--- multilog.c.orig Mon Mar 6 00:21:09 2000 +++ multilog.c Fri May 4 07:18:06 2001 @@ -176,6 +176,8 @@ execve("/bin/sh",args,environ); } +int flagrotateasap = 0; + void fullcurrent(struct cyclog *d) { int fd; @@ -243,6 +245,14 @@ } } +int rotatenow(void) +{ + int j; + + for (j = 0;j < cnum;++j) + fullcurrent(c + j); +} + int c_write(int pos,char *buf,int len) { struct cyclog *d; @@ -415,6 +425,11 @@ flagexitasap = 1; } +void rotateasap(void) +{ + flagrotateasap = 1; +} + int flushread(int fd,char *buf,int len) { int j; @@ -428,6 +443,13 @@ len = 1; } + if (flagrotateasap) { + if (flagnewline) { + flagrotateasap = 0; + rotatenow(); + } + } + len = read(fd,buf,len); if (len <= 0) return len; flagnewline = (buf[len - 1] == '\n'); @@ -543,7 +565,7 @@ for (j = 0;j < cnum;++j) if (c[j].flagselected) { - ch = '\n'; + ch = '\n'; buffer_PUTC(&c[j].ss,ch); } @@ -561,6 +583,7 @@ coe(fdstartdir); sig_catch(sig_term,exitasap); + sig_catch(sig_hangup,rotateasap); ++argv; f_init(argv);