syslogd,logger: code shrink for musl
No binary (build failed)
—
(log yok)
| @@ -77,14 +77,14 @@ static int pencode(char *s) | |
| ; | |
| if (*s) { | |
| *s = '\0'; | |
| - | fac = decode(save, facilitynames); |
| + | fac = decode(save, bb_facilitynames); |
| if (fac < 0) | |
| bb_error_msg_and_die("unknown %s name: %s", "facility", save); | |
| *s++ = '.'; | |
| } else { | |
| s = save; | |
| } | |
| - | lev = decode(s, prioritynames); |
| + | lev = decode(s, bb_prioritynames); |
| if (lev < 0) | |
| bb_error_msg_and_die("unknown %s name: %s", "priority", save); | |
| return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK)); | |
| @@ -447,7 +447,7 @@ static void parse_syslogdcfg(const char *file) | |
| primap = 0xff; /* all 8 log levels enabled */ | |
| else { | |
| uint8_t priority; | |
| - | code = find_by_name(t, prioritynames); |
| + | code = find_by_name(t, bb_prioritynames); |
| if (!code) | |
| goto cfgerr; | |
| primap = 0; | |
| @@ -480,7 +480,7 @@ static void parse_syslogdcfg(const char *file) | |
| next_facility = strchr(t, ','); | |
| if (next_facility) | |
| *next_facility++ = '\0'; | |
| - | code = find_by_name(t, facilitynames); |
| + | code = find_by_name(t, bb_facilitynames); |
| if (!code) | |
| goto cfgerr; | |
| /* "mark" is not a real facility, skip it */ | |
| @@ -797,9 +797,9 @@ static void parse_fac_prio_20(int pri, char *res20) | |
| { | |
| const CODE *c_pri, *c_fac; | |
| - | c_fac = find_by_val(LOG_FAC(pri) << 3, facilitynames); |
| + | c_fac = find_by_val(LOG_FAC(pri) << 3, bb_facilitynames); |
| if (c_fac) { | |
| - | c_pri = find_by_val(LOG_PRI(pri), prioritynames); |
| + | c_pri = find_by_val(LOG_PRI(pri), bb_prioritynames); |
| if (c_pri) { | |
| snprintf(res20, 20, "%s.%s", c_fac->c_name, c_pri->c_name); | |
| return; | |
| @@ -43,6 +43,17 @@ typedef struct _code { | |
| */ | |
| #endif | |
| + | /* musl decided to be funny and it implements these as giant defines |
| + | * of the form: ((CODE *)(const CODE []){ ... }) |
| + | * Which works, but causes _every_ function using them |
| + | * to have a copy on stack (at least with gcc-6.3.0). |
| + | * If we reference them just once, this saves 150 bytes. |
| + | * The pointers themselves are optimized out |
| + | * (no size change on uclibc). |
| + | */ |
| + | static const CODE *const bb_prioritynames = prioritynames; |
| + | static const CODE *const bb_facilitynames = facilitynames; |
| + | |
| #if ENABLE_SYSLOGD | |
| #include "syslogd.c" | |
| #endif | |