From 66f12b756a5431fe364c6817ec64e4e373bdc55a Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sun, 18 Feb 2018 19:35:10 -0600 Subject: Work around a musl-libc bug that has facilitynames/prioritynames in headers but then the link fails. --- toys/posix/logger.c | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) (limited to 'toys') diff --git a/toys/posix/logger.c b/toys/posix/logger.c index 16262c9f..b06699eb 100644 --- a/toys/posix/logger.c +++ b/toys/posix/logger.c @@ -29,29 +29,54 @@ GLOBALS( char *ident; ) +// find str in names[], accepting unambiguous short matches +// returns offset into array of match, or -1 if no match +int arrayfind(char *str, char *names[], int len) +{ + int try, i, matchlen = 0, found = -1, ambiguous = 1; + + for (try = 0; trypw_name); if (toys.optflags & FLAG_p) { if (!(s1 = strchr(TT.priority, '.'))) s1 = TT.priority; else { - *s1++ = 0; - for (code = facilitynames; code->c_name; code++) - if (!strcasecmp(TT.priority, code->c_name)) break; - if (!code->c_name) error_exit("bad facility: %s", TT.priority); - facility = code->c_val; + *s1++ = len = 0; + facility = arrayfind(TT.priority, facilities, ARRAY_LEN(facilities)); + if (facility == -1 && strncasecmp(TT.priority, "local", 5)) { + facility = s1[5]-'0'; + if (facility>7 || s1[6]) facility = -1; + if (facility>=0) facility += 16; + } + if (facility<0) error_exit("bad facility: %s", TT.priority); } - for (code = prioritynames; code->c_name; code++) - if (!strcasecmp(s1, code->c_name)) break; - if (!code->c_name) error_exit("bad priority: %s", s1); + priority = arrayfind(s1, priorities, ARRAY_LEN(priorities)); + if (priority<0) error_exit("bad priority: %s", s1); } - if (toys.optc) { for (len = 0, arg = toys.optargs; *arg; arg++) len += strlen(*arg)+1; s1 = s2 = xmalloc(len); -- cgit v1.2.3