From b2efcc20617d6317f74c4acb2a6af5b765f20b34 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 14 Jul 2017 13:11:25 -0700 Subject: [PATCH] ir-ctl: Define TEMP_FAILURE_RETRY if undefined use strndup() instead of strndupa() which is not universally available in C libraries Taken from AlpineLinux Signed-off-by: Khem Raj --- utils/ir-ctl/ir-ctl.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/utils/ir-ctl/ir-ctl.c b/utils/ir-ctl/ir-ctl.c index bc58cee..1a44011 100644 --- a/utils/ir-ctl/ir-ctl.c +++ b/utils/ir-ctl/ir-ctl.c @@ -42,6 +42,16 @@ # define _(string) string #endif +/* taken from glibc unistd.h */ +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int) (expression); \ + while (__result == -1L && errno == EINTR); \ + __result; })) +#endif + # define N_(string) string @@ -344,12 +354,14 @@ static struct file *read_scancode(const char *name) return NULL; } - pstr = strndupa(name, p - name); + pstr = strndup(name, p - name); if (!protocol_match(pstr, &proto)) { fprintf(stderr, _("error: protocol '%s' not found\n"), pstr); + free(pstr); return NULL; } + free(pstr); if (!strtoscancode(p + 1, &scancode)) { fprintf(stderr, _("error: invalid scancode '%s'\n"), p + 1);