ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/log.c
(Generate patch)

Comparing ircd-hybrid-8/src/s_log.c (file contents):
Revision 1247 by michael, Sat Oct 1 07:54:24 2011 UTC vs.
Revision 1248 by michael, Sat Oct 1 10:02:53 2011 UTC

# Line 32 | Line 32
32   #include "s_misc.h"
33   #include "s_conf.h"
34   #include "memory.h"
35 + #include "send.h"
36  
37   /* some older syslogs would overflow at 2024 */
38   #define LOG_BUFSIZE 2000
# Line 48 | Line 49 | log_add_file(unsigned int type, size_t s
49   {
50    if (log_type_table[type].file)
51      fbclose(log_type_table[type].file);
51  else
52    log_type_table[type].file = MyMalloc(sizeof(FBFILE));
52  
53    strlcpy(log_type_table[type].path, path, sizeof(log_type_table[type].path));
54 +  log_type_table[type].size = size;
55  
56    return (log_type_table[type].file = fbopen(path, "a")) != NULL;
57   }
# Line 67 | Line 67 | log_close_all(void)
67        continue;
68  
69      fbclose(log_type_table[type].file);
70 <    MyFree(log_type_table[type].file);
70 >    log_type_table[type].file = NULL;
71    }
72   }
73  
74 + static int
75 + log_exceed_size(unsigned int type)
76 + {
77 +  struct stat sb;
78 +
79 +  if (!log_type_table[type].size)
80 +    return 0;
81 +
82 +  if (stat(log_type_table[type].path, &sb) < 0)
83 +    return -1;
84 +
85 +  return (size_t)sb.st_size > log_type_table[type].size;
86 + }
87 +
88 +
89   static void
90   write_log(unsigned int type, const char *message)
91   {
# Line 103 | Line 118 | ilog(unsigned int type, const char *fmt,
118    va_end(args);
119  
120    if (ConfigLoggingEntry.use_logging)
121 +  {
122 +    write_log(type, buf);
123 +
124 +    if (log_exceed_size(type) <= 0)
125 +      return;
126 +
127 +    snprintf(buf, sizeof(buf), "Rotating logfile %s",
128 +             log_type_table[type].path);
129      write_log(type, buf);
130 < }
130 >    fbclose(log_type_table[type].file);
131 >    log_type_table[type].file = NULL;
132 >
133 >    snprintf(buf, sizeof(buf), "%s.old", log_type_table[type].path);
134 >    unlink(buf);
135 >    rename(log_type_table[type].path, buf);
136 >    log_add_file(type, log_type_table[type].size, log_type_table[type].path);
137 >  }
138 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)