In a Network Monitor capture file, get the starting offsets of frames
[obnox/wireshark/wip.git] / wiretap / libpcap.c
index c9c8efba0ae15123aaa84e27cc7c1683564be68a..822b2faaed963256c2c36e6eda0bdd60862503e4 100644 (file)
@@ -1,9 +1,9 @@
 /* libpcap.c
  *
- * $Id: libpcap.c,v 1.29 2000/01/09 07:55:48 guy Exp $
+ * $Id: libpcap.c,v 1.33 2000/03/22 07:06:58 guy Exp $
  *
  * Wiretap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@verdict.uthscsa.edu>
+ * Copyright (c) 1998 by Gilbert Ramirez <gram@xiexie.org>
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <errno.h>
 #include "wtap.h"
-#include "file.h"
+#include "file_wrappers.h"
 #include "buffer.h"
 #include "libpcap.h"
 
@@ -88,6 +88,7 @@ struct pcaprec_modified_hdr {
 
 static int libpcap_read(wtap *wth, int *err);
 static void adjust_header(wtap *wth, struct pcaprec_hdr *hdr);
+static void libpcap_close(wtap *wth);
 static gboolean libpcap_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
     const u_char *pd, int *err);
 
@@ -247,7 +248,7 @@ int libpcap_open(wtap *wth, int *err)
            || pcap_encap[hdr.network] == WTAP_ENCAP_UNKNOWN) {
                g_message("pcap: network type %u unknown or unsupported",
                    hdr.network);
-               *err = WTAP_ERR_UNSUPPORTED;
+               *err = WTAP_ERR_UNSUPPORTED_ENCAP;
                return -1;
        }
 
@@ -259,6 +260,7 @@ int libpcap_open(wtap *wth, int *err)
        wth->capture.pcap->version_major = hdr.version_major;
        wth->capture.pcap->version_minor = hdr.version_minor;
        wth->subtype_read = libpcap_read;
+       wth->subtype_close = libpcap_close;
        wth->file_encap = pcap_encap[hdr.network];
        wth->snapshot_length = hdr.snaplen;
 
@@ -454,6 +456,12 @@ adjust_header(wtap *wth, struct pcaprec_hdr *hdr)
        }
 }
 
+static void
+libpcap_close(wtap *wth)
+{
+       g_free(wth->capture.pcap);
+}
+
 int wtap_pcap_encap_to_wtap_encap(int encap)
 {
        if (encap < 0 || encap >= NUM_PCAP_ENCAPS)