modprobe: fix a bug where we were entering endless loop syslogd: strip trailing '\n' too, not only NULs
No binary (build failed)
—
(log yok)
| @@ -791,7 +791,7 @@ static void check_dep(char *mod, struct mod_list_t **head, struct mod_list_t **t | |
| if (*tail) | |
| (*tail)->m_next = find; | |
| find->m_prev = *tail; | |
| - | /*find->m_next = NULL; - xzalloc did it */ |
| + | find->m_next = NULL; /* possibly NOT done by xzalloc! */ |
| if (!*head) | |
| *head = find; | |
| @@ -536,10 +536,20 @@ static void do_syslogd(void) | |
| while (1) { | |
| if (sz == 0) | |
| goto read_again; | |
| - | if (G.recvbuf[sz-1]) |
| + | /* man 3 syslog says: "A trailing newline is added when needed". |
| + | * However, neither glibc nor uclibc do this: |
| + | * syslog(prio, "test") sends "test\0" to /dev/log, |
| + | * syslog(prio, "test\n") sends "test\n\0", |
| + | * IOW: newline is passed verbatim! |
| + | * I take it to mean that it's syslogd's job |
| + | * to make those look identical in the log files */ |
| + | if (G.recvbuf[sz-1] && G.recvbuf[sz-1] != '\n') |
| break; | |
| sz--; | |
| } | |
| + | /* Maybe we need to add '\n' here, not later? |
| + | * It looks like stock syslogd does send '\n' over network, |
| + | * but we do not (see sendto below) */ |
| G.recvbuf[sz] = '\0'; /* make sure it *is* NUL terminated */ | |
| /* TODO: maybe suppress duplicates? */ | |