Subject: Collected Debian patches for driftnet
Author: David Suarez <david.sephirot@gmail.com>

The driftnet package is maintained in Git rather than maintaining
patches as separate files, and separating the patches doesn't seem to
be worth the effort.  They are therefore all included in this single
Debian patch.

For full commit history and separated commits, see the packaging Git
repository.
--- driftnet-0.1.6+cvs20040426.orig/png.c
+++ driftnet-0.1.6+cvs20040426/png.c
@@ -15,6 +15,24 @@
 
 static const char rcsid[] = "$Id: png.c,v 1.4 2003/08/25 12:23:43 chris Exp $";
 
+/* png_catch_error: */
+/* Catch errors signalled by libpng, clean up and go on. */
+void png_catch_error(png_structp png_ptr, png_const_charp error_msg) {
+   jmp_buf *jmpbuf_ptr;
+   
+   fprintf(stderr, "libpng error: %s (skipping image).\n", error_msg);
+   fflush(stderr);
+
+   jmpbuf_ptr=png_jmpbuf(png_ptr);
+   if (jmpbuf_ptr==NULL) {
+      fprintf(stderr, "libpng unrecoverable error, terminating.\n");
+      fflush(stderr);
+      exit(20);
+   }
+
+   longjmp(jmpbuf_ptr, 1);
+}
+
 int png_load_hdr(img I) {
     unsigned char sig[PNG_SIG_LEN];
     png_structp png_ptr;
@@ -32,13 +50,19 @@ int png_load_hdr(img I) {
         return 0;
     }
 
-    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-        NULL, NULL, NULL);
+    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 
+        NULL, png_catch_error, NULL);
 
     if (png_ptr == NULL) {
         I->err = IE_HDRFORMAT;
         return 0;
     }
+   
+    if (setjmp(png_jmpbuf(png_ptr))) {
+       png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+       I->err = IE_HDRFORMAT;
+       return 0;
+    }
 
     info_ptr = png_create_info_struct(png_ptr);
 
@@ -76,12 +100,18 @@ int png_load_img(img I) {
     img_alloc(I);
 
     png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-        NULL, NULL, NULL);
+        NULL, png_catch_error, NULL);
 
     if (png_ptr == NULL) {
         I->err = IE_HDRFORMAT;
         return 0;
     }
+    
+    if (setjmp(png_jmpbuf(png_ptr))) {
+       png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+       I->err = IE_HDRFORMAT;
+       return 0;
+    }
 
     info_ptr = png_create_info_struct(png_ptr);
 
--- driftnet-0.1.6+cvs20040426.orig/img.h
+++ driftnet-0.1.6+cvs20040426/img.h
@@ -9,7 +9,7 @@
  *
  */
 
-#ifndef NO_DISPLAY_WINDOW
+
 
 #ifndef __IMG_H_ /* include guard */
 #define __IMG_H_
@@ -22,13 +22,24 @@
 
 #include <stdio.h>
 
-#include "endianness.h"
+#define PNG_CODE_LEN 4
+#define PNG_CRC_LEN  4
+#define PNG_SIG_LEN  8
+
+struct png_chunk {
+   uint32_t datalen;
+   unsigned char code[PNG_CODE_LEN];
+};
+
+#ifndef NO_DISPLAY_WINDOW
+
+#include <glib.h>
 
 typedef uint8_t chan;
 typedef uint32_t pel;
 
 /* Yuk. GDKRGB expects data in a specific ordering. */
-#if defined(DRIFTNET_LITTLE_ENDIAN)
+#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
 #   define PEL(r, g, b)        ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16)))
 #   define PELA(r, g, b, a)    ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16) | ((chan)(a) << 24)))
 
@@ -36,7 +47,7 @@ typedef uint32_t pel;
 #   define GETG(p)             ((chan)(((p) & (pel)0x0000ff00) >>  8))
 #   define GETB(p)             ((chan)(((p) & (pel)0x00ff0000) >> 16))
 #   define GETA(p)             ((chan)(((p) & (pel)0xff000000) >> 24))
-#elif defined(DRIFTNET_BIG_ENDIAN)
+#elif (G_BYTE_ORDER == G_BIG_ENDIAN)
 #   define PEL(r, g, b)        ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8)))
 #   define PELA(r, g, b, a)    ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8) | ((chan)(a))))
 
@@ -48,10 +59,6 @@ typedef uint32_t pel;
 #   error "no endianness defined"
 #endif
 
-#define PNG_CODE_LEN 4
-#define PNG_CRC_LEN  4
-#define PNG_SIG_LEN  8
-
 typedef enum { unknown = 0, pnm = 1, gif = 2, jpeg = 3, png = 4, raw = 5 } imgtype;
 typedef enum { none = 0, header = 1, full = 2 } imgstate;
 
@@ -74,11 +81,6 @@ typedef struct _img {
     imgerr err;
 } *img;
 
-struct png_chunk {
-   uint32_t datalen;
-   unsigned char code[PNG_CODE_LEN];
-};
-
 img img_new(void);
 img img_new_blank(const unsigned int width, const unsigned int height);
 void img_alloc(img I);
--- driftnet-0.1.6+cvs20040426.orig/display.c
+++ driftnet-0.1.6+cvs20040426/display.c
@@ -305,7 +305,7 @@ gboolean pipe_event(GIOChannel chan, GIO
     int nimgs = 0;
 
     if (!path)
-        path = xmalloc(strlen(tmpdir) + 34);
+        path = xmalloc(strlen(tmpdir) + 64);
 
     /* We are sent messages of size TMPNAMELEN containing a null-terminated
      * file name. */
@@ -413,7 +413,7 @@ int dodisplay(int argc, char *argv[]) {
     
     /* mouse button press/release for saving images */
     g_signal_connect(G_OBJECT(darea), "button_press_event", GTK_SIGNAL_FUNC(button_press_event), NULL);
-    g_signal_connect(G_OBJECT(darea), "button_press_event", GTK_SIGNAL_FUNC(button_release_event), NULL);
+    g_signal_connect(G_OBJECT(darea), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL);
 
     gtk_widget_show_all(window);
 
--- driftnet-0.1.6+cvs20040426.orig/Makefile
+++ driftnet-0.1.6+cvs20040426/Makefile
@@ -11,13 +11,15 @@
 #
 # User-serviceable parts:
 #
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
 
 # Compiler to use.
-#CC = gcc
+CC = gcc
 
 # Basic compiler, linker flags; should not need any changes.
-CFLAGS += -g -Wall
-LDFLAGS += -g
+CFLAGS += -O2 -g -Wall
+LDFLAGS += 
 
 # You might need these if libpcap is installed somewhere random.
 CFLAGS += -I/usr/include/pcap
@@ -34,8 +36,8 @@ LDLIBS += -lpcap -lpthread #-lefence
 
 # Optional C compiler and linker flags. Typical driftnet builds have support
 # for displaying captured images in an X window, and need the following flags:
-CFLAGS  += `pkg-config --cflags gtk+-2.0`
-LDLIBS  += -ljpeg -lungif -lpng `pkg-config --libs gtk+-2.0`
+CFLAGS  += `pkg-config --cflags gtk+-2.0` `pkg-config --cflags libpng`	
+LDLIBS  += -ljpeg -lgif `pkg-config --libs gtk+-2.0` `pkg-config --cflags libpng`
 
 # Alternatively, you can build a version of driftnet which can only be used
 # in `adjunct' mode as the back end for some other image-processing program. To
@@ -76,477 +78,27 @@ OBJS = $(SRCS:.c=.o)
 
 default: driftnet driftnet.1
 
-driftnet:   depend $(OBJS)
+driftnet: $(OBJS)
 	$(CC) -o driftnet $(OBJS) $(LDFLAGS) $(LDLIBS)
 
 driftnet.1: driftnet.1.in Makefile
 	( echo '.\" DO NOT EDIT THIS FILE-- edit driftnet.1.in instead' ; sed s/@@@VERSION@@@/$(VERSION)/ ) < driftnet.1.in > driftnet.1
 
-endianness.h: endian
-	./endian > endianness.h
-
-endian: endian.c
-	$(CC) $(CFLAGS) -o endian endian.c
-
-%.o:    %.c Makefile endianness.h
+%.o:    %.c Makefile
 	$(CC) $(CFLAGS) -c -o $@ $<
 
-clean:  nodepend
-	rm -f *~ *.bak *.o core $(BINS) TAGS driftnet.1 endian endianness.h
+clean: 
+	rm -f *~ *.bak *.o core $(BINS) TAGS driftnet.1
 
 tags:
 	etags *.c *.h
 
-tarball: nodepend $(SRCS) $(HDRS) $(TXTS)
+tarball: $(SRCS) $(HDRS) $(TXTS)
 	mkdir driftnet-$(VERSION)
 	set -e ; for i in Makefile $(SRCS) $(HDRS) $(TXTS) ; do cp $$i driftnet-$(VERSION)/$$i ; done
 	tar cvzf driftnet-$(VERSION).tar.gz driftnet-$(VERSION)
 	rm -rf driftnet-$(VERSION)
 	mv driftnet-$(VERSION).tar.gz ..
-	
-depend: endianness.h
-	makedepend -- $(CFLAGS) `cat endianness` -- $(SRCS)
-	touch depend
-	rm -f Makefile.bak
-
-nodepend:
-	makedepend -- --
-	rm -f depend Makefile.bak
 
-# DO NOT DELETE
 
-audio.o: /usr/include/string.h /usr/include/features.h
-audio.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-audio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h driftnet.h
-audio.o: /usr/include/sys/types.h /usr/include/bits/types.h
-audio.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h
-audio.o: /usr/include/sys/select.h /usr/include/bits/select.h
-audio.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
-audio.o: /usr/include/sys/sysmacros.h /usr/include/sys/socket.h
-audio.o: /usr/include/sys/uio.h /usr/include/bits/uio.h
-audio.o: /usr/include/bits/socket.h /usr/include/limits.h
-audio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-audio.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-audio.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-audio.o: /usr/include/stdint.h /usr/include/bits/wchar.h
-audio.o: /usr/include/bits/wordsize.h /usr/include/bits/in.h
-audio.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
-audio.o: /usr/include/sys/time.h /usr/include/stdio.h /usr/include/libio.h
-audio.o: /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h
-audio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-audio.o: /usr/include/bits/stdio_lim.h mpeghdr.h
-mpeghdr.o: /usr/include/stdio.h /usr/include/features.h
-mpeghdr.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-mpeghdr.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-mpeghdr.o: /usr/include/bits/types.h /usr/include/libio.h
-mpeghdr.o: /usr/include/_G_config.h /usr/include/wchar.h
-mpeghdr.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-mpeghdr.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-mpeghdr.o: /usr/include/bits/stdio_lim.h mpeghdr.h /usr/include/stdint.h
-mpeghdr.o: /usr/include/bits/wordsize.h
-gif.o: /usr/include/gif_lib.h img.h /usr/include/stdint.h
-gif.o: /usr/include/features.h /usr/include/sys/cdefs.h
-gif.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-gif.o: /usr/include/bits/wordsize.h /usr/include/stdio.h
-gif.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-gif.o: /usr/include/bits/types.h /usr/include/libio.h
-gif.o: /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h
-gif.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-gif.o: /usr/include/bits/stdio_lim.h endianness.h
-img.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
-img.o: /usr/include/gnu/stubs.h
-img.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-img.o: /usr/include/bits/types.h /usr/include/libio.h
-img.o: /usr/include/_G_config.h /usr/include/wchar.h
-img.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-img.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-img.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-img.o: /usr/include/alloca.h /usr/include/string.h driftnet.h
-img.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h
-img.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-img.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-img.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-img.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-img.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-img.o: /usr/include/limits.h
-img.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-img.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-img.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-img.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-img.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-img.o: /usr/include/arpa/inet.h /usr/include/sys/time.h img.h endianness.h
-jpeg.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
-jpeg.o: /usr/include/gnu/stubs.h
-jpeg.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-jpeg.o: /usr/include/bits/types.h /usr/include/libio.h
-jpeg.o: /usr/include/_G_config.h /usr/include/wchar.h
-jpeg.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-jpeg.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-jpeg.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-jpeg.o: /usr/include/alloca.h /usr/include/setjmp.h
-jpeg.o: /usr/include/bits/setjmp.h /usr/include/bits/sigset.h
-jpeg.o: /usr/include/jpeglib.h /usr/include/jconfig.h /usr/include/jmorecfg.h
-jpeg.o: driftnet.h /usr/include/sys/types.h /usr/include/time.h
-jpeg.o: /usr/include/endian.h /usr/include/bits/endian.h
-jpeg.o: /usr/include/sys/select.h /usr/include/bits/select.h
-jpeg.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-jpeg.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-jpeg.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-jpeg.o: /usr/include/limits.h
-jpeg.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-jpeg.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-jpeg.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-jpeg.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-jpeg.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-jpeg.o: /usr/include/arpa/inet.h /usr/include/sys/time.h img.h endianness.h
-png.o: /usr/include/png.h /usr/include/zlib.h /usr/include/zconf.h
-png.o: /usr/include/pngconf.h /usr/include/stdio.h /usr/include/features.h
-png.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-png.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-png.o: /usr/include/bits/types.h /usr/include/libio.h
-png.o: /usr/include/_G_config.h /usr/include/wchar.h
-png.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-png.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-png.o: /usr/include/bits/stdio_lim.h /usr/include/sys/types.h
-png.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h
-png.o: /usr/include/sys/select.h /usr/include/bits/select.h
-png.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
-png.o: /usr/include/sys/sysmacros.h /usr/include/setjmp.h
-png.o: /usr/include/bits/setjmp.h /usr/include/string.h img.h
-png.o: /usr/include/stdint.h /usr/include/bits/wordsize.h endianness.h
-driftnet.o: /usr/include/assert.h /usr/include/features.h
-driftnet.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-driftnet.o: /usr/include/dirent.h /usr/include/bits/types.h
-driftnet.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-driftnet.o: /usr/include/bits/dirent.h /usr/include/bits/posix1_lim.h
-driftnet.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
-driftnet.o: /usr/include/errno.h /usr/include/bits/errno.h
-driftnet.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
-driftnet.o: /usr/include/pcap/pcap.h /usr/include/sys/types.h
-driftnet.o: /usr/include/time.h /usr/include/endian.h
-driftnet.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-driftnet.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-driftnet.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-driftnet.o: /usr/include/sys/time.h /usr/include/pcap/net/bpf.h
-driftnet.o: /usr/include/stdio.h /usr/include/libio.h
-driftnet.o: /usr/include/_G_config.h /usr/include/wchar.h
-driftnet.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-driftnet.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-driftnet.o: /usr/include/bits/stdio_lim.h /usr/include/netinet/in.h
-driftnet.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-driftnet.o: /usr/include/bits/socket.h /usr/include/limits.h
-driftnet.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-driftnet.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-driftnet.o: /usr/include/asm/sockios.h /usr/include/bits/in.h
-driftnet.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
-driftnet.o: /usr/include/netinet/in_systm.h /usr/include/netinet/ip.h
-driftnet.o: /usr/include/netinet/tcp.h /usr/include/ctype.h
-driftnet.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
-driftnet.o: /usr/include/pthread.h /usr/include/sched.h
-driftnet.o: /usr/include/bits/sched.h /usr/include/signal.h
-driftnet.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/initspin.h
-driftnet.o: /usr/include/bits/sigthread.h /usr/include/stdlib.h
-driftnet.o: /usr/include/alloca.h /usr/include/string.h /usr/include/unistd.h
-driftnet.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
-driftnet.o: /usr/include/sys/stat.h /usr/include/bits/stat.h
-driftnet.o: /usr/include/sys/wait.h /usr/include/sys/resource.h
-driftnet.o: /usr/include/bits/resource.h /usr/include/bits/waitflags.h
-driftnet.o: /usr/include/bits/waitstatus.h driftnet.h
-driftnet.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-driftnet.o: /usr/include/bits/uio.h
-image.o: /usr/include/stdio.h /usr/include/features.h
-image.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-image.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-image.o: /usr/include/bits/types.h /usr/include/libio.h
-image.o: /usr/include/_G_config.h /usr/include/wchar.h
-image.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-image.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-image.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-image.o: /usr/include/alloca.h /usr/include/string.h
-image.o: /usr/include/netinet/in.h /usr/include/stdint.h
-image.o: /usr/include/bits/wordsize.h /usr/include/bits/socket.h
-image.o: /usr/include/limits.h
-image.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-image.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h
-image.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-image.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-image.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-image.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-image.o: /usr/include/asm/sockios.h /usr/include/bits/in.h
-image.o: /usr/include/bits/byteswap.h img.h endianness.h driftnet.h
-image.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-image.o: /usr/include/bits/uio.h /usr/include/arpa/inet.h
-image.o: /usr/include/sys/time.h
-display.o: /usr/include/sys/types.h /usr/include/features.h
-display.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-display.o: /usr/include/bits/types.h
-display.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-display.o: /usr/include/time.h /usr/include/endian.h
-display.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-display.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-display.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-display.o: /usr/include/errno.h /usr/include/bits/errno.h
-display.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
-display.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
-display.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
-display.o: /usr/include/wchar.h /usr/include/bits/wchar.h
-display.o: /usr/include/gconv.h
-display.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-display.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-display.o: /usr/include/alloca.h /usr/include/string.h /usr/include/unistd.h
-display.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
-display.o: /usr/include/gtk-1.2/gtk/gtk.h /usr/include/gtk-1.2/gdk/gdk.h
-display.o: /usr/include/gtk-1.2/gdk/gdktypes.h /usr/include/glib-1.2/glib.h
-display.o: /usr/lib/glib/include/glibconfig.h /usr/include/limits.h
-display.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-display.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/float.h
-display.o: /usr/include/gtk-1.2/gdk/gdkcursors.h
-display.o: /usr/include/gtk-1.2/gdk/gdkrgb.h
-display.o: /usr/include/gtk-1.2/gtk/gtkaccelgroup.h
-display.o: /usr/include/gtk-1.2/gtk/gtkobject.h
-display.o: /usr/include/gtk-1.2/gtk/gtkarg.h
-display.o: /usr/include/gtk-1.2/gtk/gtktypeutils.h
-display.o: /usr/include/gtk-1.2/gtk/gtktypebuiltins.h
-display.o: /usr/include/gtk-1.2/gtk/gtkenums.h
-display.o: /usr/include/gtk-1.2/gtk/gtkdebug.h
-display.o: /usr/include/gtk-1.2/gtk/gtkaccellabel.h
-display.o: /usr/include/gtk-1.2/gtk/gtklabel.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmisc.h
-display.o: /usr/include/gtk-1.2/gtk/gtkwidget.h
-display.o: /usr/include/gtk-1.2/gtk/gtkadjustment.h
-display.o: /usr/include/gtk-1.2/gtk/gtkdata.h
-display.o: /usr/include/gtk-1.2/gtk/gtkstyle.h
-display.o: /usr/include/gtk-1.2/gtk/gtkalignment.h
-display.o: /usr/include/gtk-1.2/gtk/gtkbin.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcontainer.h
-display.o: /usr/include/gtk-1.2/gtk/gtkaspectframe.h
-display.o: /usr/include/gtk-1.2/gtk/gtkframe.h
-display.o: /usr/include/gtk-1.2/gtk/gtkarrow.h
-display.o: /usr/include/gtk-1.2/gtk/gtkbindings.h
-display.o: /usr/include/gtk-1.2/gtk/gtkbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkbbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkbutton.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcalendar.h
-display.o: /usr/include/gtk-1.2/gtk/gtksignal.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmarshal.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcheckbutton.h
-display.o: /usr/include/gtk-1.2/gtk/gtktogglebutton.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcheckmenuitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmenuitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkclist.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhscrollbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtkscrollbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtkrange.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvscrollbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcolorsel.h
-display.o: /usr/include/gtk-1.2/gtk/gtkwindow.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkpreview.h
-display.o: /usr/include/gtk-1.2/gtk/gtkentry.h
-display.o: /usr/include/gtk-1.2/gtk/gtkeditable.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmain.h
-display.o: /usr/include/gtk-1.2/gtk/gtkscale.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhscale.h
-display.o: /usr/include/gtk-1.2/gtk/gtktable.h
-display.o: /usr/include/gtk-1.2/gtk/gtkeventbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcombo.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcompat.h
-display.o: /usr/include/gtk-1.2/gtk/gtkctree.h
-display.o: /usr/include/gtk-1.2/gtk/gtkcurve.h
-display.o: /usr/include/gtk-1.2/gtk/gtkdrawingarea.h
-display.o: /usr/include/gtk-1.2/gtk/gtkdialog.h
-display.o: /usr/include/gtk-1.2/gtk/gtkdnd.h
-display.o: /usr/include/gtk-1.2/gtk/gtkselection.h
-display.o: /usr/include/gtk-1.2/gtk/gtkfeatures.h
-display.o: /usr/include/gtk-1.2/gtk/gtkfilesel.h
-display.o: /usr/include/gtk-1.2/gtk/gtkfixed.h
-display.o: /usr/include/gtk-1.2/gtk/gtkfontsel.h
-display.o: /usr/include/gtk-1.2/gtk/gtknotebook.h
-display.o: /usr/include/gtk-1.2/gtk/gtkgamma.h
-display.o: /usr/include/gtk-1.2/gtk/gtkgc.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhandlebox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhbbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhpaned.h
-display.o: /usr/include/gtk-1.2/gtk/gtkpaned.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhruler.h
-display.o: /usr/include/gtk-1.2/gtk/gtkruler.h
-display.o: /usr/include/gtk-1.2/gtk/gtkhseparator.h
-display.o: /usr/include/gtk-1.2/gtk/gtkseparator.h
-display.o: /usr/include/gtk-1.2/gtk/gtkimage.h
-display.o: /usr/include/gtk-1.2/gtk/gtkinputdialog.h
-display.o: /usr/include/gtk-1.2/gtk/gtkitemfactory.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmenufactory.h
-display.o: /usr/include/gtk-1.2/gtk/gtklayout.h
-display.o: /usr/include/gtk-1.2/gtk/gtklist.h
-display.o: /usr/include/gtk-1.2/gtk/gtklistitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmenu.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmenushell.h
-display.o: /usr/include/gtk-1.2/gtk/gtkmenubar.h
-display.o: /usr/include/gtk-1.2/gtk/gtkoptionmenu.h
-display.o: /usr/include/gtk-1.2/gtk/gtkpacker.h
-display.o: /usr/include/gtk-1.2/gtk/gtkpixmap.h
-display.o: /usr/include/gtk-1.2/gtk/gtkplug.h
-display.o: /usr/include/gtk-1.2/gtk/gtkprogress.h
-display.o: /usr/include/gtk-1.2/gtk/gtkprogressbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtkradiobutton.h
-display.o: /usr/include/gtk-1.2/gtk/gtkradiomenuitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkrc.h
-display.o: /usr/include/gtk-1.2/gtk/gtkscrolledwindow.h
-display.o: /usr/include/gtk-1.2/gtk/gtkviewport.h
-display.o: /usr/include/gtk-1.2/gtk/gtksocket.h
-display.o: /usr/include/gtk-1.2/gtk/gtkspinbutton.h
-display.o: /usr/include/gtk-1.2/gtk/gtkstatusbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtktearoffmenuitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtktext.h
-display.o: /usr/include/gtk-1.2/gtk/gtkthemes.h
-display.o: /usr/include/gtk-1.2/gtk/gtktipsquery.h
-display.o: /usr/include/gtk-1.2/gtk/gtktoolbar.h
-display.o: /usr/include/gtk-1.2/gtk/gtktooltips.h
-display.o: /usr/include/gtk-1.2/gtk/gtktree.h
-display.o: /usr/include/gtk-1.2/gtk/gtktreeitem.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvbbox.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvpaned.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvruler.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvscale.h
-display.o: /usr/include/gtk-1.2/gtk/gtkvseparator.h
-display.o: /usr/include/gtk-1.2/gdk/gdkx.h
-display.o: /usr/include/gtk-1.2/gdk/gdkprivate.h
-display.o: /usr/X11R6/include/X11/Xlib.h /usr/X11R6/include/X11/X.h
-display.o: /usr/X11R6/include/X11/Xfuncproto.h
-display.o: /usr/X11R6/include/X11/Xosdefs.h /usr/X11R6/include/X11/Xutil.h
-display.o: /usr/include/sys/stat.h /usr/include/bits/stat.h driftnet.h
-display.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-display.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-display.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-display.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-display.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-display.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-display.o: /usr/include/arpa/inet.h /usr/include/sys/time.h img.h
-display.o: endianness.h
-playaudio.o: /usr/include/sys/types.h /usr/include/features.h
-playaudio.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-playaudio.o: /usr/include/bits/types.h
-playaudio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-playaudio.o: /usr/include/time.h /usr/include/endian.h
-playaudio.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-playaudio.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-playaudio.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-playaudio.o: /usr/include/errno.h /usr/include/bits/errno.h
-playaudio.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
-playaudio.o: /usr/include/pthread.h /usr/include/sched.h
-playaudio.o: /usr/include/bits/sched.h /usr/include/signal.h
-playaudio.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/initspin.h
-playaudio.o: /usr/include/bits/sigthread.h /usr/include/stdio.h
-playaudio.o: /usr/include/libio.h /usr/include/_G_config.h
-playaudio.o: /usr/include/wchar.h /usr/include/bits/wchar.h
-playaudio.o: /usr/include/gconv.h
-playaudio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-playaudio.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-playaudio.o: /usr/include/alloca.h /usr/include/string.h
-playaudio.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h
-playaudio.o: /usr/include/bits/confname.h /usr/include/sys/wait.h
-playaudio.o: /usr/include/sys/resource.h /usr/include/bits/resource.h
-playaudio.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h
-playaudio.o: driftnet.h /usr/include/sys/socket.h /usr/include/sys/uio.h
-playaudio.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-playaudio.o: /usr/include/limits.h
-playaudio.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-playaudio.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-playaudio.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-playaudio.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-playaudio.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-playaudio.o: /usr/include/arpa/inet.h /usr/include/sys/time.h
-connection.o: /usr/include/sys/types.h /usr/include/features.h
-connection.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-connection.o: /usr/include/bits/types.h
-connection.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-connection.o: /usr/include/time.h /usr/include/endian.h
-connection.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-connection.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-connection.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-connection.o: /usr/include/assert.h /usr/include/stdio.h /usr/include/libio.h
-connection.o: /usr/include/_G_config.h /usr/include/wchar.h
-connection.o: /usr/include/bits/wchar.h /usr/include/gconv.h
-connection.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-connection.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-connection.o: /usr/include/alloca.h /usr/include/string.h driftnet.h
-connection.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-connection.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-connection.o: /usr/include/limits.h
-connection.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-connection.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-connection.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-connection.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-connection.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-connection.o: /usr/include/arpa/inet.h /usr/include/sys/time.h
-media.o: /usr/include/assert.h /usr/include/features.h
-media.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-media.o: /usr/include/dirent.h /usr/include/bits/types.h
-media.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-media.o: /usr/include/bits/dirent.h /usr/include/bits/posix1_lim.h
-media.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
-media.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
-media.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h
-media.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-media.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-media.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-media.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
-media.o: /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h
-media.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-media.o: /usr/include/bits/stdio_lim.h /usr/include/stdlib.h
-media.o: /usr/include/alloca.h /usr/include/string.h /usr/include/unistd.h
-media.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
-media.o: driftnet.h /usr/include/sys/socket.h /usr/include/sys/uio.h
-media.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-media.o: /usr/include/limits.h
-media.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-media.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-media.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-media.o: /usr/include/stdint.h /usr/include/bits/wordsize.h
-media.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-media.o: /usr/include/arpa/inet.h /usr/include/sys/time.h
-util.o: /usr/include/stdlib.h /usr/include/features.h
-util.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-util.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-util.o: /usr/include/alloca.h /usr/include/string.h driftnet.h
-util.o: /usr/include/sys/types.h /usr/include/bits/types.h
-util.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h
-util.o: /usr/include/sys/select.h /usr/include/bits/select.h
-util.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
-util.o: /usr/include/sys/sysmacros.h /usr/include/sys/socket.h
-util.o: /usr/include/sys/uio.h /usr/include/bits/uio.h
-util.o: /usr/include/bits/socket.h /usr/include/limits.h
-util.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-util.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-util.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-util.o: /usr/include/stdint.h /usr/include/bits/wchar.h
-util.o: /usr/include/bits/wordsize.h /usr/include/bits/in.h
-util.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
-util.o: /usr/include/sys/time.h /usr/include/stdio.h /usr/include/libio.h
-util.o: /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h
-util.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-util.o: /usr/include/bits/stdio_lim.h
-http.o: /usr/include/sys/types.h /usr/include/features.h
-http.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
-http.o: /usr/include/bits/types.h
-http.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h
-http.o: /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h
-http.o: /usr/include/sys/select.h /usr/include/bits/select.h
-http.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
-http.o: /usr/include/sys/sysmacros.h /usr/include/stdlib.h
-http.o: /usr/include/alloca.h /usr/include/string.h driftnet.h
-http.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-http.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-http.o: /usr/include/limits.h
-http.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h
-http.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-http.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
-http.o: /usr/include/stdint.h /usr/include/bits/wchar.h
-http.o: /usr/include/bits/wordsize.h /usr/include/bits/in.h
-http.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
-http.o: /usr/include/sys/time.h /usr/include/stdio.h /usr/include/libio.h
-http.o: /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h
-http.o: /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h
-http.o: /usr/include/bits/stdio_lim.h
+# DO NOT DELETE
--- driftnet-0.1.6+cvs20040426.orig/driftnet.c
+++ driftnet-0.1.6+cvs20040426/driftnet.c
@@ -75,6 +75,10 @@ void do_mpeg_player(void);
 void clean_temporary_directory(void) {
     DIR *d;
     
+    /* If in adjunct mode, do not delete any temporary files */
+    if (adjunct)
+	return;
+
     /* If tmpdir_specified is true, the user specified a particular temporary
      * directory. We presume that the user doesn't want the directory removed
      * and that we shouldn't nuke any files in that directory which don't look
@@ -89,9 +93,7 @@ void clean_temporary_directory(void) {
         buf = xmalloc(buflen = strlen(tmpdir) + 64);
 
         while ((de = readdir(d))) {
-            char *p;
-            p = strrchr(de->d_name, '.');
-            if (!tmpdir_specified || (p && strncmp(de->d_name, "driftnet-", 9) == 0 && (strcmp(p, ".jpeg") == 0 || strcmp(p, ".gif") == 0 || strcmp(p, ".mp3") == 0))) {
+            if (!tmpdir_specified || is_driftnet_file(de->d_name)) {
                 if (buflen < strlen(tmpdir) + strlen(de->d_name) + 1)
                     buf = xrealloc(buf, buflen = strlen(tmpdir) + strlen(de->d_name) + 64);
                 
@@ -634,25 +636,38 @@ int main(int argc, char *argv[]) {
         }
     } else {
         /* need to make a temporary directory. */
-        for (;;) {
-            tmpdir = strdup(tmpnam(NULL));  /* may generate a warning, but this is safe because we create a directory not a file */
-            if (mkdir(tmpdir, 0700) == 0)
-                break;
-            xfree(tmpdir);
-        }
+	char *tmp;
+	char template[PATH_MAX+11];
+
+	if (!(tmp = getenv("TMPDIR")))
+	    if (!(tmp = getenv("TEMP")))
+		if (!(tmp = getenv("TMP")))
+		    tmp = "/tmp";
+
+	snprintf(template, PATH_MAX+11, "%s/drifnet-XXXXXX", tmp);
+	tmpdir = mkdtemp(template);
+	if (!tmpdir) {
+	    perror(PROGNAME": mkdtemp");
+	    return -1;
+	}
     }
 
     if (verbose) 
         fprintf(stderr, PROGNAME": using temporary file directory %s\n", tmpdir);
 
-    if (!interface && !(interface = pcap_lookupdev(ebuf))) {
+    if (!dumpfile && !interface && !(interface = pcap_lookupdev(ebuf))) {
         fprintf(stderr, PROGNAME": pcap_lookupdev: %s\n", ebuf);
         fprintf(stderr, PROGNAME": try specifying an interface with -i\n");
         return -1;
     }
 
-    if (verbose)
-        fprintf(stderr, PROGNAME": listening on %s%s\n", interface ? interface : "all interfaces", promisc ? " in promiscuous mode" : "");
+    if (verbose) {
+        if (interface) {
+            fprintf(stderr, PROGNAME": listening on %s%s\n", interface ? interface : "all interfaces", promisc ? " in promiscuous mode" : "");
+        } else if (dumpfile) {
+            fprintf(stderr, PROGNAME": processing packets from dumpfile '%s'\n", dumpfile);
+        }
+    }
 
     /* Build up filter. */
     if (optind < argc) {
@@ -792,7 +807,7 @@ int main(int argc, char *argv[]) {
     for (C = slots; C < slots + slotsalloc; ++C)
         if (*C) connection_delete(*C);
     xfree(slots);
-    xfree(tmpdir);
+    /*xfree(tmpdir); */
 
     return 0;
 }
--- driftnet-0.1.6+cvs20040426.orig/media.c
+++ driftnet-0.1.6+cvs20040426/media.c
@@ -52,9 +52,7 @@ static int count_temporary_files(void) {
         d = opendir(tmpdir);
         if (d) {
             while ((de = readdir(d))) {
-                char *p;
-                p = strrchr(de->d_name, '.');
-                if (p && (strncmp(de->d_name, "driftnet-", 9) == 0 && (strcmp(p, ".jpeg") == 0 || strcmp(p, ".gif") == 0 || strcmp(p, ".png") == 0 || strcmp(p, ".mp3") == 0)))
+                if (is_driftnet_file(de->d_name))
                     ++num;
             }
             closedir(d);
@@ -141,3 +139,16 @@ void connection_extract_media(connection
         }
     }
 }
+
+int is_driftnet_file(char *filename) 
+{
+    if (strncmp(filename, "driftnet-", 9) != 0) return 0;
+    
+    char *p = strrchr(filename, '.');
+    if (p == 0) return 0;
+    
+    return (strcmp(p, ".jpeg") == 0 ||
+	strcmp(p, ".gif") == 0 ||
+	strcmp(p, ".png") == 0 ||
+	strcmp(p, ".mp3") == 0);
+}
--- driftnet-0.1.6+cvs20040426.orig/driftnet.h
+++ driftnet-0.1.6+cvs20040426/driftnet.h
@@ -81,6 +81,7 @@ connection *find_connection(const struct
 
 /* media.c */
 void connection_extract_media(connection c, const enum mediatype T);
+int is_driftnet_file(char *filename);
 
 /* util.c */
 void *xmalloc(size_t n);
--- driftnet-0.1.6+cvs20040426.orig/driftnet.1.in
+++ driftnet-0.1.6+cvs20040426/driftnet.1.in
@@ -47,6 +47,11 @@ pick up traffic on all interfaces, but t
 on such systems, an interface must be specified. On some systems, \fBdriftnet\fP
 can only use promiscuous mode if an interface is specified.
 .TP
+\fB-f\fP \fIfile\fP
+Instead of listening on an interface, read captured packets from a
+.BR pcap (3);
+dump \fIfile\fP; \fIfile\fP can be a named pipe for use with Kismet or similar.
+.TP
 \fB-p\fP
 Do not put the interface into promiscuous mode.
 .TP
--- driftnet-0.1.6+cvs20040426.orig/util.c
+++ driftnet-0.1.6+cvs20040426/util.c
@@ -58,26 +58,18 @@ char *xstrdup(const char *s) {
 
 /* memstr:
  * Locate needle, of length n_len, in haystack, of length h_len, returning NULL.
- * Uses the Boyer-Moore search algorithm. Cf.
- *  http://www-igm.univ-mlv.fr/~lecroq/string/node14.html */
+ */
 unsigned char *memstr(const unsigned char *haystack, const size_t hlen,
-                             const unsigned char *needle, const size_t nlen) {
-    int skip[256], k;
-
-    if (nlen == 0) return (char*)haystack;
-
-    /* Set up the finite state machine we use. */
-    for (k = 0; k < 256; ++k) skip[k] = nlen;
-    for (k = 0; k < nlen - 1; ++k) skip[needle[k]] = nlen - k - 1;
-
-    /* Do the search. */
-    for (k = nlen - 1; k < hlen; k += skip[haystack[k]]) {
-        int i, j;
-        for (j = nlen - 1, i = k; j >= 0 && haystack[i] == needle[j]; j--) i--;
-        if (j == -1) return (unsigned char*)(haystack + i + 1);
-    }
-
-    return NULL;
+		const unsigned char *needle, const size_t nlen)
+{
+	char *p;
+
+	for (p = haystack; p <= (haystack - nlen + hlen); p++)
+	{
+		if (memcmp(p, needle, nlen) == 0)
+			return p; /* found */
+	}
+	return NULL;
 }
 
 
