From d5f7b743892a37224a1d7203800bea96231e1cb1 Mon Sep 17 00:00:00 2001 From: james <> Date: Mon, 3 Mar 2008 06:20:14 +0000 Subject: *** empty log message *** --- src/rotate.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) (limited to 'src/rotate.c') diff --git a/src/rotate.c b/src/rotate.c index 6291819..1a37d21 100644 --- a/src/rotate.c +++ b/src/rotate.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.3 2008/03/03 06:20:14 james + * *** empty log message *** + * * Revision 1.2 2008/03/03 06:04:42 james * *** empty log message *** * @@ -18,13 +21,76 @@ static char rcsid[] = "$Id$"; * */ +#include "project.h" +#include +#define ROTATE_IF_OVER (4*1024*1024) +#define NUM_FILES_TO_KEEP 10 +#define GZIP_AFTER 2 +void +rotate_gzip (char *file) +{ + switch (fork ()) + { + case 0: + break; + case -1: + default: + return; + } + daemon (1, 0); + execlp ("gzip", "gzip", file); + _exit (-1); +} +void +rotate (char *file) +{ + char *buf1, *buf2; + int i; + if (!file) + return; + i = strlen (file) + 32; + buf1 = malloc (i); + buf2 = malloc (i); -void + for (i = NUM_FILES_TO_KEEP; i > 0; ++i) + { + sprintf (buf1, "%s.%d", file, i - 1); + sprintf (buf2, "%s.%d", file, i); + rename (buf2, buf1); + + sprintf (buf1, "%s.%d.gz", file, i - 1); + sprintf (buf2, "%s.%d.gz", file, i); + rename (buf2, buf1); + } + + sprintf (buf1, "%s.%d", file, 0); + rename (file, buf1); + + sprintf (buf1, "%s.%d", file, GZIP_AFTER); + + if (!access (buf1, R_OK)) + rotate_gzip (buf1); + + free (buf2); + free (buf1); +} + + + +int rotate_check (char *file) { + struct stat st; + if (!file) + return 0; + if (stat (file, &st)) + return 0; + if (st.st_size <= ROTATE_IF_OVER) + return 0; + return 1; } -- cgit v1.2.3