diff -u -r1.7 -r1.8 --- src/svlogd.c 7 Oct 2004 07:56:29 -0000 1.7 +++ src/svlogd.c 7 Oct 2004 14:40:56 -0000 1.8 @@ -287,8 +287,41 @@ if (len > ((dir +n)->sizemax -(dir +n)->size)) len =(dir +n)->sizemax -(dir +n)->size; } - while ((i =write((dir +n)->fdcur, s, len)) == -1) + while ((i =write((dir +n)->fdcur, s, len)) == -1) { + if (errno == ENOSPC) { + DIR *d; + direntry *f; + char oldest[FMT_PTIME]; + + while (fchdir((dir +n)->fddir) == -1) + pause2("unable to change directory, want remove old logfile", + (dir +n)->name); + oldest[0] ='A'; oldest[1] =oldest[27] =0; + while (! (d =opendir("."))) + pause2("unable to open directory, want remove old logfile", + (dir +n)->name); + errno =0; + while ((f =readdir(d))) + if ((f->d_name[0] == '@') && (str_len(f->d_name) == 27)) + if (str_diff(f->d_name, oldest) < 0) byte_copy(oldest, 27, f->d_name); + if (errno) warn2("unable to read directory, want remove old logfile", + (dir +n)->name); + closedir(d); + if (*oldest == '@') { + strerr_warn5(WARNING, "out of disk space, delete: ", (dir +n)->name, + "/", oldest, 0); + if (unlink(oldest) == -1) + warn2("unable to unlink oldest logfile", (dir +n)->name); + else + i =1; + } + while (fchdir(fdwdir) == -1) + pause1("unable to change to initial working directory"); + if (i) continue; + } pause2("unable to write to current", (dir +n)->name); + } + (dir +n)->size +=i; if ((dir +n)->sizemax) if (s[i -1] == '\n')