Go to the documentation of this file.
   21 #include <sys/param.h> 
   33 #define LOGFILE_BUF_LEN     65536 
   36 rotate(
const char *path, 
int rotate_count)
 
   46     if (stat(path, &sb) == 0)
 
   47         if (S_ISREG(sb.st_mode) == 0)
 
   51     for (i = rotate_count; i > 1;) {
 
   53         snprintf(from, 
MAXPATHLEN, 
"%s.%d", path, i - 1);
 
   55 #if _SQUID_OS2_ || _SQUID_WINDOWS_ 
   58             fprintf(stderr, 
"WARNING: remove '%s' failure: %s\n", to, 
xstrerr(xerrno));
 
   61         if (rename(from, to) < 0 && errno != ENOENT) {
 
   63             fprintf(stderr, 
"WARNING: rename '%s' to '%s' failure: %s\n", from, to, 
xstrerr(xerrno));
 
   66     if (rotate_count > 0) {
 
   68 #if _SQUID_OS2_ || _SQUID_WINDOWS_ 
   71             fprintf(stderr, 
"WARNING: remove '%s' failure: %s\n", to, 
xstrerr(xerrno));
 
   74         if (rename(path, to) < 0 && errno != ENOENT) {
 
   76             fprintf(stderr, 
"WARNING: rename %s to %s failure: %s\n", path, to, 
xstrerr(xerrno));
 
   93 main(
int argc, 
char *argv[])
 
   98     int rotate_count = 10;
 
  102         printf(
"Error: usage: %s <logfile>\n", argv[0]);
 
  105     fp = fopen(argv[1], 
"a");
 
  110     setbuf(stdout, 
nullptr);
 
  115     t = 
xopen(_PATH_DEVNULL, O_RDWR);
 
  123             if (buf[1] != 
'\0') {
 
  124                 fprintf(fp, 
"%s", buf + 1);
 
  126                 int err = ferror(fp);
 
  132                     if (err == EFBIG || err == ENOSPC) {
 
  133                         fprintf(stderr, 
"WARNING: %s writing %s. Attempting to recover via a log rotation.\n",
xstrerr(err),argv[1]);
 
  135                         rotate(argv[1], rotate_count);
 
  136                         fp = fopen(argv[1], 
"a");
 
  141                         fprintf(fp, 
"%s", buf + 1);
 
  153             rotate(argv[1], rotate_count);
 
  154             fp = fopen(argv[1], 
"a");
 
  166             rotate_count = atoi(buf + 1);
 
  170             do_buffer = (buf[1] == 
'1');
 
  177             fprintf(fp, 
"%s", buf);
 
  
const char * xstrerr(int error)
int main(int argc, char *argv[])
int xopen(const char *filename, int oflag, int pmode=0)
POSIX open(2) equivalent.
int xclose(int fd)
POSIX close(2) equivalent.
static void rotate(const char *path, int rotate_count)