On Wed, 17 Jul 2002, Joerg Mayer wrote:
> The problem with file.c still persists when I enter the filename from
> the command line and then "save to" via the gui. This is caused by the
> file requester always returning an absolute path. I've created a very
> preliminary patch that resolves this. I don't know whether this has any
> chance of working with Windows too, or if I should put a #ifdef Unix
> around the new code. Please let me know how to improve this patch. I'm
> also planning to handle the error case differently: Create a temporary
> file, write to that and after that unlink the old one and rename the
> temp file. As this replaces Ethereal's input file, I guess I have to
> take care of that. Is this more than closing and reopening the file?
>
> ciao
> Jörg
>
>
>
> Index: ethereal/file.c
> ===================================================================
> RCS file: /cvsroot/ethereal/file.c,v
> retrieving revision 1.282
> diff -u -r1.282 file.c
> --- file.c 2002/07/16 07:15:04 1.282
> +++ file.c 2002/07/17 07:48:24
> @@ -1725,6 +1725,9 @@
> struct wtap_pkthdr hdr;
> union wtap_pseudo_header pseudo_header;
> guint8 pd[65536];
> +#if 1
> + struct stat infile, outfile;
> +#endif
>
> name_ptr = get_basename(fname);
> msg_len = strlen(name_ptr) + strlen(save_fmt) + 2;
> @@ -1737,12 +1740,30 @@
> * Check that the from file is not the same as to file
> * We do it here so we catch all cases ...
> */
> +#if 0
> if (strcmp(cf->filename, fname) == 0) {
> simple_dialog(ESD_TYPE_CRIT, NULL,
> "Can't save over current capture file: %s!",
> cf->filename);
> goto fail;
> }
> +#else
> + /*
> + * Unfortunately, the file requester gives us an absolute file
> + * name and the read file name may be relative (if supplied on
> + * the command line).
> + */
> + infile.st_ino = 1;
> + outfile.st_ino = 2;
> + stat(cf->filename, &infile);
> + stat(fname, &outfile);
That stat is going to fail if fname does not exist, and, while you have
handled that case above by setting the st_ino fields correctly, it looks
ugly.
> + if (infile.st_ino == outfile.st_ino) {
> + simple_dialog(ESD_TYPE_CRIT, NULL,
> + "Can't save over current capture file: %s!",
> + cf->filename);
> + goto fail;
> + }
> +#endif
>
> if (!save_filtered && !save_marked && save_format == cf->cd_t) {
> /* We're not filtering packets, and we're saving it in the format
>
> --
> Joerg Mayer <jmayer@xxxxxxxxx>
> I found out that "pro" means "instead of" (as in proconsul). Now I know
> what proactive means.
>
> _______________________________________________
> Ethereal-dev mailing list
> Ethereal-dev@xxxxxxxxxxxx
> http://www.ethereal.com/mailman/listinfo/ethereal-dev
>
--
Regards
-----
Richard Sharpe, rsharpe@xxxxxxxxxx, rsharpe@xxxxxxxxx,
sharpe@xxxxxxxxxxxx