diff options
Diffstat (limited to 'testing/sysvinit/Remove-handling-of-special-chars-fix-per-line-buffer.patch')
-rw-r--r-- | testing/sysvinit/Remove-handling-of-special-chars-fix-per-line-buffer.patch | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/testing/sysvinit/Remove-handling-of-special-chars-fix-per-line-buffer.patch b/testing/sysvinit/Remove-handling-of-special-chars-fix-per-line-buffer.patch deleted file mode 100644 index b573b9a6d..000000000 --- a/testing/sysvinit/Remove-handling-of-special-chars-fix-per-line-buffer.patch +++ /dev/null @@ -1,216 +0,0 @@ -From 4d2b17f47073e0491f9dfa62797cc727d4530f22 Mon Sep 17 00:00:00 2001 -From: Florian Pritz <bluewind@xinu.at> -Date: Tue, 22 May 2012 22:14:52 +0200 -Subject: [PATCH] Remove handling of special chars; fix per line buffer - problem - -The linebuffer was only 256 chars so longer lines were truncated. - -By removing the handling of special chars (for example: /n/r/t) and -simply writing everything we read as is to the logfile we fix this bug, -make the code much smaller and allow users to write userspace tools that -correctly handle rendering. - -Signed-off-by: Florian Pritz <bluewind@xinu.at> ---- - bootlogd.c | 139 +++++++++--------------------------------------------------- - 1 file changed, 19 insertions(+), 120 deletions(-) - -diff --git a/bootlogd.c b/bootlogd.c -index 570d382..5df8fb9 100644 ---- a/bootlogd.c -+++ b/bootlogd.c -@@ -58,21 +58,10 @@ char *Version = "@(#) bootlogd 2.86 03-Jun-2004 miquels@cistron.nl"; - - #define LOGFILE "/var/log/boot" - --char ringbuf[32768]; --char *endptr = ringbuf + sizeof(ringbuf); --char *inptr = ringbuf; --char *outptr = ringbuf; -- - int got_signal = 0; --int didnl = 1; - int createlogfile = 0; - int syncalot = 0; - --struct line { -- char buf[256]; -- int pos; --} line; -- - /* - * Console devices as listed on the kernel command line and - * the mapping to actual devices in /dev -@@ -345,83 +334,6 @@ int consolename(char *res, int rlen) - return -1; - } - -- --/* -- * Write data and make sure it's on disk. -- */ --void writelog(FILE *fp, unsigned char *ptr, int len) --{ -- time_t t; -- char *s; -- char tmp[8]; -- int olen = len; -- int dosync = 0; -- int tlen; -- -- while (len > 0) { -- tmp[0] = 0; -- if (didnl) { -- time(&t); -- s = ctime(&t); -- fprintf(fp, "%.24s: ", s); -- didnl = 0; -- } -- switch (*ptr) { -- case 27: /* ESC */ -- strcpy(tmp, "^["); -- break; -- case '\r': -- line.pos = 0; -- break; -- case 8: /* ^H */ -- if (line.pos > 0) line.pos--; -- break; -- case '\n': -- didnl = 1; -- dosync = 1; -- break; -- case '\t': -- line.pos += (line.pos / 8 + 1) * 8; -- if (line.pos >= (int)sizeof(line.buf)) -- line.pos = sizeof(line.buf) - 1; -- break; -- case 32 ... 127: -- case 161 ... 255: -- tmp[0] = *ptr; -- tmp[1] = 0; -- break; -- default: -- sprintf(tmp, "\\%03o", *ptr); -- break; -- } -- ptr++; -- len--; -- -- tlen = strlen(tmp); -- if (tlen && (line.pos + tlen < (int)sizeof(line.buf))) { -- memcpy(line.buf + line.pos, tmp, tlen); -- line.pos += tlen; -- } -- if (didnl) { -- fprintf(fp, "%s\n", line.buf); -- memset(&line, 0, sizeof(line)); -- } -- } -- -- if (dosync) { -- fflush(fp); -- if (syncalot) { -- fdatasync(fileno(fp)); -- } -- } -- -- outptr += olen; -- if (outptr >= endptr) -- outptr = ringbuf; -- --} -- -- - /* - * Print usage message and exit. - */ -@@ -481,7 +393,6 @@ int main(int argc, char **argv) - int ptm, pts; - int realfd; - int n, m, i; -- int todo; - - fp = NULL; - logfile = LOGFILE; -@@ -615,13 +526,13 @@ int main(int argc, char **argv) - /* - * See how much space there is left, read. - */ -- if ((n = read(ptm, inptr, endptr - inptr)) >= 0) { -+ if ((n = read(ptm, buf, sizeof(buf))) >= 0) { - /* - * Write data (in chunks if needed) - * to the real output device. - */ - m = n; -- p = inptr; -+ p = buf; - while (m > 0) { - i = write(realfd, p, m); - if (i >= 0) { -@@ -641,43 +552,31 @@ int main(int argc, char **argv) - } - - /* -- * Increment buffer position. Handle -- * wraps, and also drag output pointer -- * along if we cross it. -+ * Perhaps we need to open the logfile. - */ -- inptr += n; -- if (inptr - n < outptr && inptr > outptr) -- outptr = inptr; -- if (inptr >= endptr) -- inptr = ringbuf; -- if (outptr >= endptr) -- outptr = ringbuf; -- } -- } -+ if (fp == NULL && access(logfile, F_OK) == 0) { -+ if (rotate) { -+ snprintf(buf, sizeof(buf), "%s~", logfile); -+ rename(logfile, buf); -+ } -+ fp = fopen(logfile, "a"); -+ } -+ if (fp == NULL && createlogfile) -+ fp = fopen(logfile, "a"); - -- /* -- * Perhaps we need to open the logfile. -- */ -- if (fp == NULL && access(logfile, F_OK) == 0) { -- if (rotate) { -- snprintf(buf, sizeof(buf), "%s~", logfile); -- rename(logfile, buf); -+ if (fp) { -+ write(fileno(fp), buf, n); -+ } -+ -+ if (syncalot) { -+ fdatasync(fileno(fp)); -+ } - } -- fp = fopen(logfile, "a"); - } -- if (fp == NULL && createlogfile) -- fp = fopen(logfile, "a"); - -- if (inptr >= outptr) -- todo = inptr - outptr; -- else -- todo = endptr - outptr; -- if (fp && todo) -- writelog(fp, (unsigned char *)outptr, todo); - } - - if (fp) { -- if (!didnl) fputc('\n', fp); - fclose(fp); - } - --- -1.7.10.2 - |