modprobe: fix a bug where we were entering endless loop
syslogd: strip trailing '\n' too, not only NULs
This commit is contained in:
parent
5281630229
commit
cb12cb2407
@ -791,7 +791,7 @@ static void check_dep(char *mod, struct mod_list_t **head, struct mod_list_t **t
|
|||||||
if (*tail)
|
if (*tail)
|
||||||
(*tail)->m_next = find;
|
(*tail)->m_next = find;
|
||||||
find->m_prev = *tail;
|
find->m_prev = *tail;
|
||||||
/*find->m_next = NULL; - xzalloc did it */
|
find->m_next = NULL; /* possibly NOT done by xzalloc! */
|
||||||
|
|
||||||
if (!*head)
|
if (!*head)
|
||||||
*head = find;
|
*head = find;
|
||||||
|
@ -536,10 +536,20 @@ static void do_syslogd(void)
|
|||||||
while (1) {
|
while (1) {
|
||||||
if (sz == 0)
|
if (sz == 0)
|
||||||
goto read_again;
|
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;
|
break;
|
||||||
sz--;
|
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 */
|
G.recvbuf[sz] = '\0'; /* make sure it *is* NUL terminated */
|
||||||
|
|
||||||
/* TODO: maybe suppress duplicates? */
|
/* TODO: maybe suppress duplicates? */
|
||||||
|
Loading…
Reference in New Issue
Block a user