Get rid of the fd member of a wth structure; the FILE_T's in that
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 9 May 2011 08:12:26 +0000 (08:12 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 9 May 2011 08:12:26 +0000 (08:12 +0000)
structure include a file descriptor.  Add a wtap_fstat() for the file
readers that use file times to generate time stamps (we really need a
way to say "this file has no time stamps" or "this file has only
relative time stamps).

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@37026 f5534014-38df-0310-8fa8-9805f1628bb7

wiretap/ascendtext.c
wiretap/ber.c
wiretap/file_access.c
wiretap/file_wrappers.c
wiretap/file_wrappers.h
wiretap/tnef.c
wiretap/wtap-int.h
wiretap/wtap.c

index 801a01fe9b4424ac96bbfe6c69497aa685a707e1..dd8e750dd87d2ea5855c8034d1a5a527b155bb80 100644 (file)
@@ -176,7 +176,7 @@ found:
 int ascend_open(wtap *wth, int *err, gchar **err_info)
 {
   gint64 offset;
-  struct stat statbuf;
+  ws_statb64 statbuf;
   guint8 buf[ASCEND_MAX_PKT_LEN];
   ascend_pkthdr header;
   gint64 dummy_seek_start;
@@ -235,8 +235,7 @@ int ascend_open(wtap *wth, int *err, gchar **err_info)
      packet's timestamp from the capture file's ctime, which gives us an
      offset that we can apply to each packet.
    */
-  if (fstat(wth->fd, &statbuf) == -1) {
-    *err = errno;
+  if (wtap_fstat(wth, &statbuf, err) == -1) {
     g_free(ascend);
     return -1;
   }
index 11a37432ba8ec8be1b217078a325f674d396c53f..fba02f240f9cd592c4115a52b6f18fdd0682907c 100644 (file)
@@ -47,7 +47,7 @@ static gboolean ber_read(wtap *wth, int *err, gchar **err_info, gint64 *data_off
   guint8 *buf;
   gint64 file_size;
   int packet_size;
-  struct stat statb;
+  ws_statb64 statb;
 
   *err = 0;
 
@@ -82,10 +82,8 @@ static gboolean ber_read(wtap *wth, int *err, gchar **err_info, gint64 *data_off
   wth->phdr.caplen = packet_size;
   wth->phdr.len = packet_size;
 
-  if (fstat(wth->fd, &statb) == -1) {
-    *err = errno;
+  if (wtap_fstat(wth, &statb, err) == -1)
     return FALSE;
-  }
 
   wth->phdr.ts.secs = statb.st_mtime;
   wth->phdr.ts.nsecs = 0;
index ed213e6df84f2403e6fe755367a74534857c12b2..c66a149ad2cba466d86e088f50fa267feafc770a 100644 (file)
@@ -222,6 +222,7 @@ void wtap_register_open_routine(wtap_open_routine_t open_routine, gboolean has_m
 wtap* wtap_open_offline(const char *filename, int *err, char **err_info,
                        gboolean do_random)
 {
+       int     fd;
        ws_statb64 statb;
        wtap    *wth;
        unsigned int    i;
@@ -296,23 +297,23 @@ wtap* wtap_open_offline(const char *filename, int *err, char **err_info,
                 * a file_close of wth->fh closing the standard
                 * input of the process.
                 */
-               wth->fd = ws_dup(0);
-               if (wth->fd < 0) {
+               fd = ws_dup(0);
+               if (fd < 0) {
                        *err = errno;
                        g_free(wth);
                        return NULL;
                }
 #ifdef _WIN32
-               if (_setmode(wth->fd, O_BINARY) == -1) {
+               if (_setmode(fd, O_BINARY) == -1) {
                        /* "Shouldn't happen" */
                        *err = errno;
                        g_free(wth);
                        return NULL;
                }
 #endif
-               if (!(wth->fh = filed_open(wth->fd))) {
+               if (!(wth->fh = filed_open(fd))) {
                        *err = errno;
-                       ws_close(wth->fd);
+                       ws_close(fd);
                        g_free(wth);
                        return NULL;
                }
index ee3ead80990170bb1c10012ddb44b821f9d72b45..bd4207d885a4e10c10cd79e4803521ab5e910ab6 100644 (file)
@@ -1006,11 +1006,23 @@ file_tell(FILE_T stream)
        return stream->pos + (stream->seek ? stream->skip : 0);
 }
 
-gint64 file_tell_raw(FILE_T stream)
+gint64
+file_tell_raw(FILE_T stream)
 {
        return stream->raw_pos;
 }
 
+int
+file_fstat(FILE_T stream, ws_statb64 *statb, int *err)
+{
+       if (ws_fstat64(stream->fd, statb) == -1) {
+               if (err != NULL)
+                       *err = errno;
+               return -1;
+       }
+       return 0;
+}
+
 int 
 file_read(void *buf, unsigned int len, FILE_T file)
 {
@@ -1206,7 +1218,7 @@ file_close(FILE_T file)
        file->err = 0;
        file->err_info = NULL;
        g_free(file);
-       return close(fd);
+       return ws_close(fd);
 }
 
 #ifdef HAVE_LIBZ
index 7929319a610ce3fbe7d87dbf5d6392fffc8e72e5..cf223f433216c7a3530e9a1e9cf1a647c2ab1efc 100644 (file)
@@ -18,7 +18,6 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
  */
 
 #ifndef __FILE_H__
@@ -27,6 +26,7 @@
 extern gint64 file_seek(FILE_T stream, gint64 offset, int whence, int *err);
 extern gint64 file_tell(FILE_T stream);
 extern gint64 file_tell_raw(FILE_T stream);
+extern int file_fstat(FILE_T stream, ws_statb64 *statb, int *err);
 extern int file_error(FILE_T fh, gchar **err_info);
 
 extern FILE_T file_open(const char *path);
index ce839fcc1340b8b28b2b0455ebaf7b560ec9d049..1fca6878051680d3e5abc3abf04c17da76703e22 100644 (file)
@@ -40,7 +40,7 @@ static gboolean tnef_read(wtap *wth, int *err, gchar **err_info, gint64 *data_of
   guint8 *buf;
   gint64 file_size;
   int packet_size;
-  struct stat statb;
+  ws_statb64 statb;
 
   *err = 0;
 
@@ -75,10 +75,8 @@ static gboolean tnef_read(wtap *wth, int *err, gchar **err_info, gint64 *data_of
   wth->phdr.caplen = packet_size;
   wth->phdr.len = packet_size;
 
-  if (fstat(wth->fd, &statb) == -1) {
-    *err = errno;
+  if (wtap_fstat(wth, &statb, err) == -1)
     return FALSE;
-  }
 
   wth->phdr.ts.secs = statb.st_mtime;
   wth->phdr.ts.nsecs = 0;
index 9691ce8efff7147aeb30f6f70cf6e2c5e07aa0ea..96e3a68ba54a6d6c81016d7bc6e151337572dbfe 100644 (file)
 #include <zlib.h>
 #endif /* HAVE_LIBZ */
 
+#include <wsutil/file_util.h>
+
 typedef struct wtap_reader *FILE_T;
 
 #include "wtap.h"
 
+int wtap_fstat(wtap *wth, ws_statb64 *statb, int *err);
+
 typedef gboolean (*subtype_read_func)(struct wtap*, int*, char**, gint64*);
 typedef gboolean (*subtype_seek_read_func)(struct wtap*, gint64, union wtap_pseudo_header*,
                                        guint8*, int, int *, char **);
 struct wtap {
        FILE_T                  fh;
-        int                     fd;           /* File descriptor for cap file */
        FILE_T                  random_fh;    /* Secondary FILE_T for random access */
        int                     file_type;
        int                     snapshot_length;
index 145567a9753202cbe95202da04b060e07799ffc6..e494a9e7576a278da9c632562a8a0208c832b5bd 100644 (file)
@@ -54,14 +54,24 @@ wtap_file_size(wtap *wth, int *err)
 {
        ws_statb64 statb;
 
-       if (ws_fstat64(wth->fd, &statb) == -1) {
-               if (err != NULL)
-                       *err = errno;
+       if (file_fstat((wth->fh == NULL) ? wth->random_fh : wth->fh,
+           &statb, err) == -1)
                return -1;
-       }
        return statb.st_size;
 }
 
+/*
+ * Do an fstat on the file.
+ */
+int
+wtap_fstat(wtap *wth, ws_statb64 *statb, int *err)
+{
+       if (file_fstat((wth->fh == NULL) ? wth->random_fh : wth->fh,
+           statb, err) == -1)
+               return -1;
+       return 0;
+}
+
 int
 wtap_file_type(wtap *wth)
 {