aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/file_wrappers.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2013-01-06 20:36:33 +0000
committerGuy Harris <guy@alum.mit.edu>2013-01-06 20:36:33 +0000
commit073e2aa45acee5bc3662ccc976b2ec7398e87473 (patch)
tree4159d075ebe64cfe84d7b99ea5953e98b2c697c3 /wiretap/file_wrappers.c
parent40a5e8b9919862617a6d01fe7cdbb9bf44a05e57 (diff)
Make some Boolean flags gbooleans, rename one of them to more clearly
indicate what it means, and use an enum for the compression types. Note that file_getc() returns a byte, not a character. svn path=/trunk/; revision=46983
Diffstat (limited to 'wiretap/file_wrappers.c')
-rw-r--r--wiretap/file_wrappers.c108
1 files changed, 57 insertions, 51 deletions
diff --git a/wiretap/file_wrappers.c b/wiretap/file_wrappers.c
index 6fb2a9371d..42666c41d3 100644
--- a/wiretap/file_wrappers.c
+++ b/wiretap/file_wrappers.c
@@ -105,48 +105,50 @@ wtap_get_compressed_file_extensions(void)
/* #define GZBUFSIZE 8192 */
#define GZBUFSIZE 4096
+/* values for wtap_reader compression */
+typedef enum {
+ UNKNOWN, /* unknown - look for a gzip header */
+ UNCOMPRESSED, /* uncompressed - copy input directly */
+#ifdef HAVE_LIBZ
+ ZLIB, /* decompress a zlib stream */
+ GZIP_AFTER_HEADER
+#endif
+} compression_t;
+
struct wtap_reader {
- int fd; /* file descriptor */
- gint64 raw_pos; /* current position in file (just to not call lseek()) */
- gint64 pos; /* current position in uncompressed data */
- guint size; /* buffer size */
- unsigned char *in; /* input buffer */
- unsigned char *out; /* output buffer (double-sized when reading) */
- unsigned char *next; /* next output data to deliver or write */
-
- guint have; /* amount of output data unused at next */
- int eof; /* true if end of input file reached */
- gint64 start; /* where the gzip data started, for rewinding */
- gint64 raw; /* where the raw data started, for seeking */
- int compression; /* 0: ?, 1: uncompressed, 2: zlib */
- gboolean is_compressed; /* FALSE if completely uncompressed, TRUE otherwise */
+ int fd; /* file descriptor */
+ gint64 raw_pos; /* current position in file (just to not call lseek()) */
+ gint64 pos; /* current position in uncompressed data */
+ guint size; /* buffer size */
+ unsigned char *in; /* input buffer */
+ unsigned char *out; /* output buffer (double-sized when reading) */
+ unsigned char *next; /* next output data to deliver or write */
+
+ guint have; /* amount of output data unused at next */
+ gboolean eof; /* TRUE if end of input file reached */
+ gint64 start; /* where the gzip data started, for rewinding */
+ gint64 raw; /* where the raw data started, for seeking */
+ compression_t compression; /* type of compression, if any */
+ gboolean is_compressed; /* FALSE if completely uncompressed, TRUE otherwise */
/* seek request */
- gint64 skip; /* amount to skip (already rewound if backwards) */
- int seek; /* true if seek request pending */
+ gint64 skip; /* amount to skip (already rewound if backwards) */
+ gboolean seek_pending; /* TRUE if seek request pending */
/* error information */
- int err; /* error code */
- const char *err_info; /* additional error information string for some errors */
+ int err; /* error code */
+ const char *err_info; /* additional error information string for some errors */
- guint avail_in; /* number of bytes available at next_in */
- unsigned char *next_in; /* next input byte */
+ guint avail_in; /* number of bytes available at next_in */
+ unsigned char *next_in; /* next input byte */
#ifdef HAVE_LIBZ
/* zlib inflate stream */
- z_stream strm; /* stream structure in-place (not a pointer) */
- int dont_check_crc; /* 1 if we aren't supposed to check the CRC */
+ z_stream strm; /* stream structure in-place (not a pointer) */
+ gboolean dont_check_crc; /* TRUE if we aren't supposed to check the CRC */
#endif
/* fast seeking */
GPtrArray *fast_seek;
void *fast_seek_cur;
};
-/* values for wtap_reader compression */
-#define UNKNOWN 0 /* look for a gzip header */
-#define UNCOMPRESSED 1 /* copy input directly */
-#ifdef HAVE_LIBZ
-#define ZLIB 2 /* decompress a zlib stream */
-#define GZIP_AFTER_HEADER 3
-#endif
-
static int /* gz_load */
raw_read(FILE_T state, unsigned char *buf, unsigned int count, guint *have)
{
@@ -166,7 +168,7 @@ raw_read(FILE_T state, unsigned char *buf, unsigned int count, guint *have)
return -1;
}
if (ret == 0)
- state->eof = 1;
+ state->eof = TRUE;
return 0;
}
@@ -189,7 +191,7 @@ struct fast_seek_point {
gint64 out; /* corresponding offset in uncompressed data */
gint64 in; /* offset in input file of first full byte */
- int compression;
+ compression_t compression;
union {
struct {
#ifdef HAVE_INFLATEPRIME
@@ -238,7 +240,8 @@ fast_seek_find(FILE_T file, gint64 pos)
}
static void
-fast_seek_header(FILE_T file, gint64 in_pos, gint64 out_pos, int compression)
+fast_seek_header(FILE_T file, gint64 in_pos, gint64 out_pos,
+ compression_t compression)
{
struct fast_seek_point *item = NULL;
@@ -766,10 +769,10 @@ static void
gz_reset(FILE_T state)
{
state->have = 0; /* no output data available */
- state->eof = 0; /* not at end of file */
+ state->eof = FALSE; /* not at end of file */
state->compression = UNKNOWN; /* look for gzip header */
- state->seek = 0; /* no seek request pending */
+ state->seek_pending = FALSE; /* no seek request pending */
state->err = 0; /* clear error */
state->err_info = NULL;
state->pos = 0; /* no uncompressed data yet */
@@ -845,7 +848,7 @@ file_fdopen(int fd)
}
/* for now, assume we should check the crc */
- state->dont_check_crc = 0;
+ state->dont_check_crc = FALSE;
#endif
/* return stream */
return state;
@@ -896,7 +899,7 @@ file_open(const char *path)
suffixp = strrchr(path, '.');
if (suffixp != NULL) {
if (g_ascii_strcasecmp(suffixp, ".caz") == 0)
- ft->dont_check_crc = 1;
+ ft->dont_check_crc = TRUE;
}
#endif
@@ -927,9 +930,9 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err)
/* normalize offset to a SEEK_CUR specification */
if (whence == SEEK_SET)
offset -= file->pos;
- else if (file->seek)
+ else if (file->seek_pending)
offset += file->skip;
- file->seek = 0;
+ file->seek_pending = FALSE;
if (offset < 0 && file->next) {
/*
@@ -989,8 +992,8 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err)
file->raw_pos = off;
file->have = 0;
- file->eof = 0;
- file->seek = 0;
+ file->eof = FALSE;
+ file->seek_pending = FALSE;
file->err = 0;
file->err_info = NULL;
file->avail_in = 0;
@@ -1035,7 +1038,7 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err)
/* g_print("OK! %ld\n", offset); */
if (offset) {
- file->seek = 1;
+ file->seek_pending = TRUE;
file->skip = offset;
}
return file->pos + offset;
@@ -1051,8 +1054,8 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err)
}
file->raw_pos += (offset - file->have);
file->have = 0;
- file->eof = 0;
- file->seek = 0;
+ file->eof = FALSE;
+ file->seek_pending = FALSE;
file->err = 0;
file->err_info = NULL;
file->avail_in = 0;
@@ -1088,7 +1091,7 @@ file_seek(FILE_T file, gint64 offset, int whence, int *err)
/* request skip (if not zero) */
if (offset) {
- file->seek = 1;
+ file->seek_pending = TRUE;
file->skip = offset;
}
return file->pos + offset;
@@ -1111,7 +1114,7 @@ gint64
file_tell(FILE_T stream)
{
/* return position */
- return stream->pos + (stream->seek ? stream->skip : 0);
+ return stream->pos + (stream->seek_pending ? stream->skip : 0);
}
gint64
@@ -1147,8 +1150,8 @@ file_read(void *buf, unsigned int len, FILE_T file)
return 0;
/* process a skip request */
- if (file->seek) {
- file->seek = 0;
+ if (file->seek_pending) {
+ file->seek_pending = FALSE;
if (gz_skip(file, file->skip) == -1)
return -1;
}
@@ -1195,6 +1198,9 @@ file_read(void *buf, unsigned int len, FILE_T file)
return (int)got;
}
+/*
+ * XXX - this gets a byte, not a character.
+ */
int
file_getc(FILE_T file)
{
@@ -1232,8 +1238,8 @@ file_gets(char *buf, int len, FILE_T file)
return NULL;
/* process a skip request */
- if (file->seek) {
- file->seek = 0;
+ if (file->seek_pending) {
+ file->seek_pending = FALSE;
if (gz_skip(file, file->skip) == -1)
return NULL;
}
@@ -1312,7 +1318,7 @@ file_clearerr(FILE_T stream)
/* clear error and end-of-file */
stream->err = 0;
stream->err_info = NULL;
- stream->eof = 0;
+ stream->eof = FALSE;
}
void