From Harald Welte:
[obnox/wireshark/wip.git] / ringbuffer.c
index 1cced9a16339706963207d79d4717e98767276fb..9319cf9f5132d557579a50ae1a47c022cd423377 100644 (file)
@@ -83,11 +83,10 @@ typedef struct _ringbuf_data {
   gchar        *fprefix;             /* Filename prefix */
   gchar        *fsuffix;             /* Filename suffix */
   gboolean      unlimited;           /* TRUE if unlimited number of files */
-  int           linktype;
-  int           snaplen;
 
   int           fd;                 /* Current ringbuffer file descriptor */
   FILE         *pdh;
+  gboolean      group_read_access;   /* TRUE if files need to be opened with group read access */
 } ringbuf_data;
 
 static ringbuf_data rb_data;
@@ -115,7 +114,7 @@ static int ringbuf_open_file(rb_file *rfile, int *err)
 #endif
   current_time = time(NULL);
 
-  g_snprintf(filenum, sizeof(filenum), "%05u", (rb_data.curr_file_num + 1) % 100000);
+  g_snprintf(filenum, sizeof(filenum), "%05u", (rb_data.curr_file_num + 1) % RINGBUFFER_MAX_NUM_FILES);
   strftime(timestr, sizeof(timestr), "%Y%m%d%H%M%S", localtime(&current_time));
   rfile->name = g_strconcat(rb_data.fprefix, "_", filenum, "_", timestr,
                            rb_data.fsuffix, NULL);
@@ -125,7 +124,8 @@ static int ringbuf_open_file(rb_file *rfile, int *err)
     return -1;
   }
 
-  rb_data.fd = ws_open(rfile->name, O_RDWR|O_BINARY|O_TRUNC|O_CREAT, 0600);
+  rb_data.fd = ws_open(rfile->name, O_RDWR|O_BINARY|O_TRUNC|O_CREAT, 
+                            rb_data.group_read_access ? 0640 : 0600);
 
   if (rb_data.fd == -1 && err != NULL) {
     *err = errno;
@@ -138,7 +138,7 @@ static int ringbuf_open_file(rb_file *rfile, int *err)
  * Initialize the ringbuffer data structures
  */
 int
-ringbuf_init(const char *capfile_name, guint num_files)
+ringbuf_init(const char *capfile_name, guint num_files, gboolean group_read_access)
 {
   unsigned int i;
   char        *pfx, *last_pathsep;
@@ -151,6 +151,7 @@ ringbuf_init(const char *capfile_name, guint num_files)
   rb_data.unlimited = FALSE;
   rb_data.fd = -1;
   rb_data.pdh = NULL;
+  rb_data.group_read_access = group_read_access;
 
   /* just to be sure ... */
   if (num_files <= RINGBUFFER_MAX_NUM_FILES) {
@@ -202,7 +203,7 @@ ringbuf_init(const char *capfile_name, guint num_files)
     rb_data.num_files = 1;
   }
 
-  rb_data.files = g_malloc(rb_data.num_files * sizeof(rb_file));
+  rb_data.files = (rb_file *)g_malloc(rb_data.num_files * sizeof(rb_file));
   if (rb_data.files == NULL) {
     return -1;
   }
@@ -230,15 +231,9 @@ const gchar *ringbuf_current_filename(void)
  * Calls libpcap_fdopen() for the current ringbuffer file
  */
 FILE *
-ringbuf_init_libpcap_fdopen(int linktype, int snaplen,
-                            long *bytes_written, int *err)
+ringbuf_init_libpcap_fdopen(int *err)
 {
-
-  rb_data.linktype = linktype;
-  rb_data.snaplen  = snaplen;
-
-  rb_data.pdh = libpcap_fdopen(rb_data.fd, linktype, snaplen, bytes_written,
-                               err);
+  rb_data.pdh = libpcap_fdopen(rb_data.fd, err);
   return rb_data.pdh;
 }
 
@@ -246,8 +241,7 @@ ringbuf_init_libpcap_fdopen(int linktype, int snaplen,
  * Switches to the next ringbuffer file
  */
 gboolean
-ringbuf_switch_file(FILE **pdh, gchar **save_file, int *save_file_fd,
-                    long *bytes_written, int *err)
+ringbuf_switch_file(FILE **pdh, gchar **save_file, int *save_file_fd, int *err)
 {
   int     next_file_index;
   rb_file *next_rfile = NULL;
@@ -274,8 +268,7 @@ ringbuf_switch_file(FILE **pdh, gchar **save_file, int *save_file_fd,
     return FALSE;
   }
 
-  if (ringbuf_init_libpcap_fdopen(rb_data.linktype, rb_data.snaplen,
-                                  bytes_written, err) == NULL) {
+  if (ringbuf_init_libpcap_fdopen(err) == NULL) {
     return FALSE;
   }
 
@@ -315,7 +308,7 @@ ringbuf_libpcap_dump_close(gchar **save_file, int *err)
  * Frees all memory allocated by the ringbuffer
  */
 void
-ringbuf_free()
+ringbuf_free(void)
 {
   unsigned int i;