aboutsummaryrefslogtreecommitdiffstats
path: root/capture.c
Commit message (Collapse)AuthorAgeFilesLines
* PPP/WAN captures work on Windows 9x, so speak of them not working onlyGuy Harris2000-08-141-2/+3
| | | | | | | | | on NT/2000. Refer to Tethereal, not to Ethereal, in the long explanations of capture problems in Tethereal. svn path=/trunk/; revision=2270
* On Win32, if the attempt to open the capture device fails, don't talkGuy Harris2000-08-131-18/+54
| | | | | | | | | | | | | | | | about checking permissions, as the capture devices are probably available to all users, and talking about permissions will only confuse the user. Do, however, warn that Ethereal can't capture on Token Ring or PPP/WAN interfaces. On UNIX, if the attempt to open the capture device fails, and the error message starts with "can't find PPA for ", they are probably running on HP-UX with a version of libpcap not patched to properly look up PPAs for network interfaces given the interface name; give them a detailed warning about this, telling them that they'll have to fix libpcap and build Ethereal from source, and pointing them at the "README.hpux" file. svn path=/trunk/; revision=2265
* Miscellaneous code cleaningLaurent Deniel2000-08-111-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - add <stdarg.h> or <varargs.h> in snprintf.h and remove those inclusions in the other #ifdef NEED_SNPRINTF_H codes - remove the check of multiple inclusions in source (.c) code (there is a bit loss of _cpp_ performance, but I prefer the gain of code reading and maintenance; and nowadays, disk caches and VM are correctly optimized ;-). - protect all (well almost) header files against multiple inclusions - add header (i.e. GPL license) in some include files - reorganize a bit the way header files are included: First: #include <system_include_files> #include <external_package_include_files (e.g. gtk, glib etc.)> Then #include "ethereal_include_files" with the correct HAVE_XXX or NEED_XXX protections. - add some HAVE_XXX checks before including some system header files - add the same HAVE_XXX in wiretap as in ethereal Please forgive me, if I break something (I've only compiled and regression tested on Linux). svn path=/trunk/; revision=2254
* Fix it to compile on non-Linux UNIX-flavored systems and Win32 systems.Guy Harris2000-07-311-6/+22
| | | | svn path=/trunk/; revision=2184
* Add missing function prototypes.Olivier Abad2000-07-301-1/+7
| | | | svn path=/trunk/; revision=2182
* Support for capturing packet data from a pipe (a FIFO, or standard input).Olivier Abad2000-07-301-37/+313
| | | | | | | | | | | | | | capture.c : - modified capture() to try to open an interface as a pipe if pcap_open_live() failed, and then read data in libpcap format from this pipe ; - add new functions used by capture() : pipe_open_live() and pipe_dispatch() which are equivalents to the pcap_ functions. libpcap.[ch] : - moved the MAGIC and headers definitions from libpcap.c to libpcap.h because capture() now needs it. svn path=/trunk/; revision=2181
* Get rid of "Playback" in capture window title.Gilbert Ramirez2000-07-211-2/+2
| | | | svn path=/trunk/; revision=2150
* Use ESD_TYPE_CRIT for most errors (the model used by various GUIs seemsGuy Harris2000-07-201-8/+13
| | | | | | | | | | | | | | | | | | | | | | to use "warning" dialog boxes only to warn the user "if you do that, bad things may happen" *and* to offer them the option either to drive on or quit, so perhaps ESD_TYPE_CRIT should be used for all errors). However, put "Ethereal: Error" rather than "Ethereal: Critical" in the title bar, in the hopes that it'll make it clearer that Something Bad Happened. If the user specifies that captures should be saved to a user-specified file rather than a temporary file, report errors trying to create that file with "file_open_error_message()". Make the "for_writing" argument to "file_open_error_message()" a "gboolean", as it's either TRUE (if the file is being opened for writing) or FALSE (if it's being opened for reading). Report EISDIR as "XXX is a directory (folder), not a file.". svn path=/trunk/; revision=2143
* To make windows modal, use "gtk_window_set_modal()" rather thanGuy Harris2000-07-051-2/+2
| | | | | | | | | "gtk_grab_add()"; the former makes it a bit clearer what's being done, and I think it may be considered the right way to do it (GTK+ remembers the state of the window and appears to add and remove the grab as appropriate). svn path=/trunk/; revision=2113
* Add routines to Wiretap to allow a client of Wiretap to get:Guy Harris2000-06-271-5/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a pointer to the "wtap_pkthdr" structure for an open capture file; a pointer to the "wtap_pseudo_header" union for an open capture file; a pointer to the packet buffer for an open capture file; so that a program using "wtap_read()" in a loop can get at those items. Keep, in a "capture_file" structure, an indicator of whether: no file is open; a file is open, and being read; a file is open, and is being read, but the user tried to quit out of reading the file (e.g., by doing "File/Quit"); a file is open, and has been completely read. Abort if we try to close a capture that's being read if the user hasn't tried to quit out of the read. Have "File/Quit" check if a file is being read; if so, just set the state indicator to "user tried to quit out of it", so that the code reading the file can do what's appropriate to clean up, rather than closing the file out from under that code and causing crashes. Have "read_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, close the capture and return an indication that the read was aborted by the user. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have "continue_tail_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, quit the loop, and after the loop finishes (even if it read no packets), return an indication that the read was aborted by the user if that happened. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have "finish_tail_cap_file()" read the capture file with a loop using "wtap_read()", rather than by using "wtap_loop()"; have it check after reading each packet whether the user tried to abort the read and, if so, quit the loop, and after the loop finishes (even if it read no packets), close the capture and return an indication that the read was aborted by the user if that happened. Otherwise, return an indication of whether the read completely succeeded or failed in the middle (and, if it failed, return the error code through a pointer). Have their callers check whether the read was aborted or not and, if it was, bail out in the appropriate fashion (exit if it's reading a file specified by "-r" on the command line; exit the main loop if it's reading a file specified with File->Open; kill the capture child if it's "continue_tail_cap_file()"; exit the main loop if it's "finish_tail_cap_file()". svn path=/trunk/; revision=2095
* Patch from Ben Fowler to rename the global variable "cf" to "cfile", toGuy Harris2000-06-271-65/+65
| | | | | | | | make it easier to use grep to find all references to it without getting a lot of false hits and to check, after allocating the memory chunk for "frame_data" structures, that the allocation succeeded. svn path=/trunk/; revision=2092
* Changes from Graham Bloice to support "Update list of packets in realGuy Harris2000-06-151-19/+131
| | | | | | time" during captures on Win32. svn path=/trunk/; revision=2074
* Mark Clayton's patch to add support for capturing on ATM interfaces onGuy Harris2000-06-151-1/+5
| | | | | | | Linux (call the until-now-unused "capture_clip()" routine for each packet). svn path=/trunk/; revision=2070
* Support for SCTP in the capture dialog, from Michael Tuexen.Guy Harris2000-05-261-2/+11
| | | | svn path=/trunk/; revision=2012
* Convert dissect_ppp() and friends to use tvbuffs.Gilbert Ramirez2000-05-251-2/+2
| | | | | | | | | | | | | | | (the ip_tcp_options stuff is still non-tvbuff until I convert ip and tcp). Add preliminary fix for Linux ISDN ippp devices (similar watch was posted to ethereal-users, but did not use tvbuffs). Change packet-raw.c to call capture_ppp()/dissect_ppp() in the case where the frame starts with FF:03. We had been calling capture_ip()/dissect_ip() at byte offset 4, but I think this is for historical reasons of packet-raw.c and packet-ip.c existing before packet-ppp.c. svn path=/trunk/; revision=1998
* Move the closes of the save file FD around:Guy Harris2000-05-191-10/+18
| | | | | | | | | | | | | | "capture()" should ensure that it's closed before returning, but it was only getting closed by "wtap_dump_close()" on success, so close the raw FD on failure (no "wtap_dump" stream is opened on failure, so we just close the raw FD); in a "update the display as packets arrive" capture, we should close the FD in the parent as soon as the fork is done, before even testing whether the fork succeeded (and we might as well do the same with the write side of the sync pipe). svn path=/trunk/; revision=1988
* Close capture file descriptor.Gilbert Ramirez2000-05-191-1/+5
| | | | | | From Mark Burton <markb@ordern.com> svn path=/trunk/; revision=1986
* Remove the "union pseudo_header" from the "frame_data" structure;Guy Harris2000-05-181-2/+2
| | | | | | | | | | | | | | | | | | | | there's no need to keep it around in memory - when the frame data is read in when handing a frame, read in the information, if any, necessary to reconstruct the frame header, and reconstruct it. This saves some memory. This requires that the seek-and-read function be implemented inside Wiretap, and that the Wiretap handle remain open even after we've finished reading the file sequentially. This also points out that we can't really do X.25-over-Ethernet correctly, as we don't know where the direction (DTE->DCE or DCE->DTE) flag is stored; it's not clear how the Ethernet type 0x0805 for X.25 Layer 3 is supposed to be handled in any case. We eliminate X.25-over-Ethernet support (until we find out what we're supposed to do). svn path=/trunk/; revision=1975
* Check whether "pipe()" succeeds, and pop up a message box and quit if itGuy Harris2000-05-061-3/+12
| | | | | | doesn't. svn path=/trunk/; revision=1912
* If the attempt to execute Ethereal in a child process fails, have theGuy Harris2000-05-061-85/+117
| | | | | | | | | | | | | | child process send to the parent a message indicating why it failed, so that the parent can report that, and then exit. If the attempt to create the child process to run Ethereal fails, pop up a dialog box indicating that this happened. Change the fork code a bit, to make it easier to substitute, on Win32 systems, code that does a "CreateProcess()" for the small chunk of code that does the fork and exec. svn path=/trunk/; revision=1910
* Paul Welchinski's changes to, on Win32 systems:Guy Harris2000-03-211-1/+18
| | | | | | | | | | properly handle ASCII vs. Unicode in the list of interfaces; initialize Winsock before starting a capture, so that the code in the Win32 libpcap to get the IP address and netmask by translating the host name to an IP address works. svn path=/trunk/; revision=1737
* Used register_init_routine() to register "reinit_x25_hashtable()" as aOlivier Abad2000-02-191-6/+1
| | | | | | | routine to be called every time a new capture file is opened instead of calling it in read_cap_file() and do_capture(). svn path=/trunk/; revision=1651
* Renamed init_dissect_x25() to reinit_x25_hashtable() and actually used it !Olivier Abad2000-02-181-1/+6
| | | | | | | | | | | | This function is used to re-initialize the hash table used by the X.25 dissector to record the upper layer protocol used by each VC. The hash table should be re-initialized each time we read / start a new capture. I moved the definition of the function from packet.h to packet-x25.h, and added calls to reinit_x25_hashtable() in read_cap_file (file.c) and do_capture (capture.c). svn path=/trunk/; revision=1644
* Create a header file for every packet-*.c file. Prune the packet.h file.Gilbert Ramirez2000-02-151-1/+8
| | | | | | | | | | | | | This change allows you to add a new packet-*.c file and not cause a recompilation of everything that #include's packet.h Add the plugin_api.[ch] files ot the plugins/Makefile.am packaging list. Add #define YY_NO_UNPUT 1 to the lex source so that the yyunput symbol is not defined, squelching a compiler complaint when compiling the generated C file. svn path=/trunk/; revision=1637
* Integrate Ed Meaney's <emeaney@altiga.com> changes for using libpcapGilbert Ramirez2000-02-091-2/+14
| | | | | | from WinDump with Ethereal. We now have packet capturing on Win32. :) svn path=/trunk/; revision=1612
* Also listen for GDK_INPUT_EXCEPTION on the sync pipe. On Solaris 2.6Gilbert Ramirez2000-02-021-3/+3
| | | | | | this is needed to get the last message from the pipe. svn path=/trunk/; revision=1595
* added support for clicking capture window's close box to stop captureNathan Neulinger2000-01-301-1/+11
| | | | svn path=/trunk/; revision=1586
* In case the "ts" field of a libpcap per-packet header isn't a "structGuy Harris2000-01-261-2/+7
| | | | | | | | | | timeval" (if, say, it's a "struct bpf_timeval", with member sizes wired to 32 bits, as it appears to be in SuSE 6.3 and will, I think, be in the 0.5 release of libpcap), copy the members of that field to the "ts" field of the Wiretap per-packet header (which also lets us make it not a "struct timeval" as well). svn path=/trunk/; revision=1572
* In "dissect_eth()", update "pi.len" and "pi.captured_len" regardless ofGuy Harris2000-01-231-7/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | whether we're building a protocol tree or not. Make "dissect_eth()" use "BYTES_ARE_IN_FRAME()" to see if we have a full Ethernet header - it can be called with a non-zero offset, if Ethernet frames are encapsulated inside other frames (e.g., ATM LANE). Make capture routines take an "offset" argument if the corresponding dissect routine takes one (for symmetry, and for Cisco ISL or any other protocol that encapsulates Ethernet or Token-Ring frames inside other frames). Pass the frame lengths to capture routines via the "pi" structure, rather than as an in-line argument, so that they can macros such as "BYTES_ARE_IN_FRAME()" the way the corresponding dissect routines do. Make capture routines update "pi.len" and "pi.captured_len" the same way the corresponding diseect routines do, if the capture routines then call other capture routines. Make "capture_vlan()" count as "other" frames that are too short, the way other capture routines do. svn path=/trunk/; revision=1525
* Joerg Mayer's updates to the VINES dissector and to protocol layersGuy Harris2000-01-201-2/+11
| | | | | | above VINES. svn path=/trunk/; revision=1514
* Enough is enough. Requiring anybody who uses Ethereal on Linux toGuy Harris2000-01-121-2/+45
| | | | | | | | | | | | | | | | | | | | | | update their libpcap probably isn't going to scale - the increasing frequency with which "Ethereal hangs when I try to capture packets" shows up on "ethereal-dev" suggests that, unless and until a libpcap with the "select()" in it becomes ubiquitous on Linux, that'll be the source of a constant support burden - so we'll just put the "select()" in Ethereal if it's being built for Linux. (Putting it in for platforms where the read timeout argument to "pcap_open_live()" works adds an extra useless system call at best and, at worst, could make Ethereal not work - "select()" doesn't work on "/dev/bpf" devices on FreeBSD 3.3, at least, unless you're in "immediate mode", and, whilst "immediate mode" would make Ethereal respond more quickly when packets arrive, it might cause Ethereal to respond too quickly, doing reads for every new packet rather than waiting for multiple packets to arrive and reading them all with one "read()", which appears to be at least part of the intent of the read timeout on "/dev/bpf" devices in BSD.) svn path=/trunk/; revision=1451
* Take the "simple_dialog()" stuff out of "ui_util.h" and "gtk/ui_util.c",Guy Harris2000-01-031-2/+2
| | | | | | and move it to "simple_dialog.h" and "gtk/simple_dialog.c". svn path=/trunk/; revision=1414
* Have "gtk/menu.c" (and, in the future, code for other UIs) export a setGuy Harris2000-01-031-2/+1
| | | | | | | | | | | of routines to enable and disable various sets of menu items; call only those routines, not routines to enable or disable particular menu items, from files in the top-level directory, as other UIs may not refer to menu items with path strings of the sort used in GTK+, and as this buries knowledge of the menu items available in "gtk/menu.c" rather than requiring stuff outside of "gtk/menu.c" to know what menu items exist. svn path=/trunk/; revision=1410
* Move the GTK+ implementations of various UI utilities out of "util.c"Guy Harris1999-12-091-1/+2
| | | | | | | | | | | | | | | | | | | into "gtk/ui_util.c", and move the declarations of those UI utilities out of "util.h" into "ui_util.h". (The header file is in the top-level directory, rather than the "gtk" directory, because it declares window-system-independent interfaces to routines with window-system-dependent implementations.) Add to "gtk/ui_util.c" a routine to set the window and icon title. Use that routine to make the title of an Ethereal top-level window be {filename} - Ethereal if there's a capture open, and have "{filename}" be "<capture>" if it's a temporary capture file. svn path=/trunk/; revision=1255
* Add IPX to packet stats during capture.Gilbert Ramirez1999-11-301-2/+11
| | | | svn path=/trunk/; revision=1173
* Allow the user to save either all of the current capture, or only theGuy Harris1999-11-301-17/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | packets that are currently being displayed from that capture. Centralize the code to control whether "File:Save" and "File:Save As" are enabled (and *always* have "File:Save As" enabled if you have a capture; "File:Save" is enabled only if you have a live capture you've not yet saved, although it does the same thing as "File:Save As"). Have the "save_file" member of a "capture_file" structure represent *only* the file currently being *written* to by a capture, and, if there is no capture currently in progress, have it be NULL; the name of the file currently being *displayed" is in the "filename" member, and an "is_tempfile" member indicates whether it's a temporary file for a live capture or not. Have "close_cap_file()" delete the current capture file if it's a temporary capture file that hasn't been saved (in its entirety - saving selected frames doesn't count). Do the same (if there *is* a current capture file) when exiting. The "Ready to load or capture" message is the only statusbar message in the "main" context; "close_cap_file()" should never pop it, it should only pop whatever message exists in the "file" context, and thus has no need to take, as an argument, the context for the message it should pop. Update the man page to reflect the new behavior of "File:Save" and "File:Save As", and to reflect recent changes to "Display:Match Selected". svn path=/trunk/; revision=1170
* Move the callback for input available on the sync pipe from "file.c" toGuy Harris1999-11-291-15/+229
| | | | | | | | | | | | | | | | | | | | "capture.c", along with the other code that deals with the sync pipe. Close the sync pipe, and get rid of the temporary capture file, on errors. Split "tail_cap_file()" into routines to set up to read from the capture file, to read a specified number of packets from it when told to do so by the child process, and to read the rest of the capture file and finish up the capture, to provide the code in "capture.c" the hooks it needs. Have a common routine to set the status bar to report the file name and number of dropped packets, to use both when reading in a capture file in its entirety all at once and when done with a "read it while the capture is writing to it" live capture. svn path=/trunk/; revision=1137
* Pass the right argument to the "simple_dialog()" call to put up the "weGuy Harris1999-11-281-2/+2
| | | | | | couldn't open the temporary capture file" dialog box. svn path=/trunk/; revision=1132
* On a "wtap_dump_close()" error, if it's not one of the errors for whichGuy Harris1999-11-251-10/+3
| | | | | | | | we put up a special error, just use "wtap_strerror()" to generate the error message - it'll handle both "errno" errors and Wiretap-specific errors. svn path=/trunk/; revision=1108
* Move GTK-related stuff out of globals.h and put it in gtk/gtkglobals.hGilbert Ramirez1999-10-201-1/+2
| | | | svn path=/trunk/; revision=896
* Get rid of "-F" - "-S" works, and has a more convenient UI.Guy Harris1999-10-021-78/+62
| | | | | | | | Print a usage message if an illegal command-line flag is seen. Clean up the usage message a bit. svn path=/trunk/; revision=755
* Move the declaration of global variables involved with packet captureGuy Harris1999-10-021-1/+5
| | | | | | | | | | | | from "globals.h" to "capture.h". Only "capture.c" needs to include <pcap.h>; move the include of <pcap.h> from "capture.h" to "capture.c". We no longer need any DLT_ defines (that's handled inside Wiretap); remove the defines of DLT_ from "capture.h". svn path=/trunk/; revision=753
* Have "do_capture()" take, as an argument, a pointer to the name of theGuy Harris1999-10-021-23/+24
| | | | | | | | | | | | | | | file to which to write the capture; if it's NULL, create a temporary file and use that. Have "-w" set a local variable, which starts out null, and, for "-k" captures, call "do_capture()" and pass it that local variable as an argument; this lets you do "-k" without "-w", which makes it use a temporary file for the capture. This means "run_capture()" no longer serves a useful purpose, as its only caller is "do_capture()"; swallow it into "do_capture()". svn path=/trunk/; revision=748
* A child process for a "-S" or "-F" capture should *always* exit when theGuy Harris1999-10-021-26/+28
| | | | | | | | | | | | | | capture is done; make it do so, and don't bother passing it a "-Q" flag to tell it to do so. "capture()" is called in two places; in one place, it's in a child process, and it shouldn't read in the capture file. Move the reading of the capture file out of "capture()" itself to the place where we *should* read in the capture file after it returns. Also, have it return an indication of whether it succeeded or failed, so we know whether we should read in the capture file. svn path=/trunk/; revision=747
* Move the definitions of "sync_mode", "sync_pipe", "fork_mode",Guy Harris1999-10-011-1/+7
| | | | | | | | "quit_after_cap", and "capture_child" from "gtk/main.c" to "capture.c", so that the definitions don't have to be duplicated in "main.c" for other UIs if, as, and when we do versions of Ethereal with other UIs. svn path=/trunk/; revision=746
* Add a new global flag "capture_child", which is TRUE if we're a childGuy Harris1999-09-301-20/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | process for a sync mode or fork mode capture. Have that flag control whether we do things that *only* the parent or *only* the child should do, rather than basing it solely on the setting of "sync_mode" or "fork_mode" (or, in the case of stuff done in the child process either in sync mode or fork mode, rather than basing it on the setting of those flags at all). Split "do_capture()" into a "run_capture()" routine that starts a capture (possibly by forking off and execing a child process, if we're supposed to do sync mode or fork mode captures), and that assumes the file to which the capture is to write has already been opened and that "cf.save_file_fd" is the file descriptor for that file, and a "do_capture()" routine that creates a temporary file, getting an FD for it, and calls "run_capture()". Use "run_capture()", rather than "capture()", for "-k" captures, so that it'll do the capture in a child process if "-S" or "-F" was specified ("do_capture()" won't do because "-k" captures should write to the file specified by the "-w" flag, not some random temporary file). For child process captures, however, just use "capture()" - the child process shouldn't itself fork off a child if we're in sync or fork mode, and should just write to the file whose file descriptor was specified by the "-W" flag on the command line. All this allows you to do "ethereal -S -w <file> -i <interface> -k" to start a sync mode capture from the command line. svn path=/trunk/; revision=740
* If we're given the "-k" flag, don't start the capture until after we've:Guy Harris1999-09-301-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | popped up the top-level window (so that it looks like a capture started from "Capture/Start"); initialized the colors (so that we don't dump core when reading in the capture file); popped up any message box for failure to read the preferences file. This means we start the capture in "main()", rather than in the realize callback for the main window, so get rid of that callback. If we're a child process that's just capturing to a file for our parent to read, however, we shouldn't pop up the top-level window, because that's our parent's job; when running that child, set its "argv[0]" to a special name, so that 1) it shows up in a "ps" with a special name; 2) we don't have to invent Yet Another Flag to say "you're the child". (We may want to use the name to turn on *all* behaviors that the capture child, and only the capture child, should exhibit.) If "-w" and "-k" were both specified, attempt to open the file specified by "-w" and, if that succeeds, set "cf.save_file_fd" to refer to it, so that "-w" plus "-k" works again, rather than popping up a "The file to which the capture would be saved ... could not be opened: Bad file descriptor." message box. svn path=/trunk/; revision=739
* Squelch a (justified, although the child process *shouldn't* ever sendGuy Harris1999-09-251-2/+2
| | | | | | | | us, at that point, a character with the 8th bit set) complaint about a "char" array subscript in an "isdigit()" call by making the character unsigned. svn path=/trunk/; revision=724
* Close the capture file in "do_capture()", right before unlinking theGuy Harris1999-09-231-14/+8
| | | | | | | | | | | | | | | | | | current capture file if it's a temporary file, out of paranoia (so that we don't get into a state where we have a capture file open but unlinked - it's probably harmless to be in that state, as the file will remain around until close, modulo NFS fun, and we may never be in that state for very long, but I'd rather have it obviously stated in the code). Remove the close in "capture()", and put one before the other call to "capture()", in "main_realize_cb()" (is that call necessary, e.g. if you pass "-r <filename>" *and* "-k", for some perverse reason, as command-line arguments?). If "cf.save_file" is non-null, free it before setting it, regardless of whether it refers to a temporary file name or not. svn path=/trunk/; revision=712
* If we forcibly turn off "fork_mode" if the user doesn't enable "UpdateGuy Harris1999-09-231-4/+4
| | | | | | | | | | | list of packets in real time" in the "Capture/Start" dialog box, "ethereal -F" won't work - you get your choice of non-forked capture or "-S". Don't have "fork_mode" track "sync_mode"; instead, in those places where we check for "fork_mode", check for "sync_mode" as well. svn path=/trunk/; revision=711