Add a new "file_open_error_message()" routine in "epan/filesystem.c", to
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 24 Jan 2004 01:44:29 +0000 (01:44 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Sat, 24 Jan 2004 01:44:29 +0000 (01:44 +0000)
translate UNIX errno values to a somewhat friendly message format
string.

Rename "file_open_error_message()" in "file.c" to
"cf_open_error_message()", make "cf_open_error_message()" use the new
"file_open_error_message()" for UNIX errno values, have "do_capture()"
in "capture.c" use "file_open_error_message()" to report errors from
"open()", and make "cf_open_error_message()" static as nothing outside
"file.c" uses it.

Do similar stuff in "tethereal.c".

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@9821 f5534014-38df-0310-8fa8-9805f1628bb7

capture.c
epan/filesystem.c
epan/filesystem.h
file.c
file.h
tethereal.c

index 9bb8407a396be63d4b5059dede9bfc4ce4db53c5..6a04b9e7b855983cccc07a459323559bad696e10 100644 (file)
--- a/capture.c
+++ b/capture.c
@@ -1,7 +1,7 @@
 /* capture.c
  * Routines for packet capture windows
  *
- * $Id: capture.c,v 1.226 2004/01/22 20:45:49 guy Exp $
+ * $Id: capture.c,v 1.227 2004/01/24 01:44:28 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
 
 #include <epan/packet.h>
 #include <epan/dfilter/dfilter.h>
+#include <epan/filesystem.h>
 #include "file.h"
 #include "capture.h"
 #include "util.h"
@@ -322,7 +323,7 @@ do_capture(const char *save_file)
         ringbuf_error_cleanup();
       }
       simple_dialog(ESD_TYPE_CRIT, NULL,
-       file_open_error_message(errno, TRUE, WTAP_FILE_PCAP), capfile_name);
+       file_open_error_message(errno, TRUE), capfile_name);
     }
     g_free(capfile_name);
     return FALSE;
index c6d7c2b606163643091f6afbc035a7cccf7ae757..2debf626a43e8ed71a8d3b65eab30547c75c08f4 100644 (file)
@@ -1,7 +1,7 @@
 /* filesystem.c
  * Filesystem utility routines
  *
- * $Id: filesystem.c,v 1.27 2003/11/03 22:32:36 guy Exp $
+ * $Id: filesystem.c,v 1.28 2004/01/24 01:44:29 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -643,3 +643,42 @@ char *get_tempfile_path(const char *filename)
        return path;
 }
 
+/*
+ * Return an error message for UNIX-style errno indications.
+ */
+char *
+file_open_error_message(int err, gboolean for_writing)
+{
+       char *errmsg;
+       static char errmsg_errno[1024+1];
+
+       switch (err) {
+
+       case ENOENT:
+               if (for_writing)
+                       errmsg = "The path to the file \"%s\" does not exist.";
+               else
+                       errmsg = "The file \"%s\" does not exist.";
+               break;
+
+       case EACCES:
+               if (for_writing)
+                       errmsg = "You do not have permission to create or write to the file \"%s\".";
+               else
+                       errmsg = "You do not have permission to read the file \"%s\".";
+               break;
+
+       case EISDIR:
+               errmsg = "\"%s\" is a directory (folder), not a file.";
+               break;
+
+       default:
+               snprintf(errmsg_errno, sizeof(errmsg_errno),
+                               "The file \"%%s\" could not be %s: %s.",
+                               for_writing ? "created" : "opened",
+                               strerror(err));
+               errmsg = errmsg_errno;
+               break;
+       }
+       return errmsg;
+}
index d4a32118f99f9b9e646d6737ac37e3facaa28139..1148ba1fd688e183ec6ed49efd11a0f836c80678 100644 (file)
@@ -1,7 +1,7 @@
 /* filesystem.h
  * Filesystem utility definitions
  *
- * $Id: filesystem.h,v 1.15 2003/11/18 19:20:36 guy Exp $
+ * $Id: filesystem.h,v 1.16 2004/01/24 01:44:29 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -119,7 +119,12 @@ char *get_persconffile_path(const char *filename, gboolean for_writing);
  */
 extern char *get_tempfile_path(const char *filename);
 
-
 /* Delete a file */
 gboolean deletefile (const char *path);
+
+/*
+ * Return an error message for UNIX-style errno indications.
+ */
+char *file_open_error_message(int err, gboolean for_writing);
+
 #endif /* FILESYSTEM_H */
diff --git a/file.c b/file.c
index 1f6490abe281dccf667af2193a357160871a06d2..f644fc59c3dfb28ae10cf16f1f08bd76c711d94b 100644 (file)
--- a/file.c
+++ b/file.c
@@ -1,7 +1,7 @@
 /* file.c
  * File I/O routines
  *
- * $Id: file.c,v 1.344 2004/01/21 22:00:27 ulfl Exp $
+ * $Id: file.c,v 1.345 2004/01/24 01:44:28 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -115,6 +115,8 @@ static gboolean find_packet(capture_file *cf,
        gboolean (*match_function)(capture_file *, frame_data *, void *),
        void *criterion);
 
+static char *cf_open_error_message(int err, gboolean for_writing,
+    int file_type);
 static char *file_rename_error_message(int err);
 static char *file_close_error_message(int err);
 static   gboolean copy_binary_file(char *from_filename, char *to_filename);
@@ -210,7 +212,7 @@ cf_open(char *fname, gboolean is_tempfile, capture_file *cf)
 
 fail:
   simple_dialog(ESD_TYPE_CRIT, NULL,
-                       file_open_error_message(err, FALSE, 0), fname);
+                       cf_open_error_message(err, FALSE, 0), fname);
   return (err);
 }
 
@@ -2579,7 +2581,7 @@ cf_save(char *fname, capture_file *cf, packet_range_t *range, guint save_format)
     pdh = wtap_dump_open(fname, save_format, cf->lnk_t, cf->snap, &err);
     if (pdh == NULL) {
       simple_dialog(ESD_TYPE_CRIT, NULL,
-                       file_open_error_message(err, TRUE, save_format), fname);
+                       cf_open_error_message(err, TRUE, save_format), fname);
       goto fail;
     }
 
@@ -2671,96 +2673,82 @@ fail:
   return FALSE;
 }
 
-char *
-file_open_error_message(int err, gboolean for_writing, int file_type)
+static char *
+cf_open_error_message(int err, gboolean for_writing, int file_type)
 {
   char *errmsg;
   static char errmsg_errno[1024+1];
 
-  switch (err) {
-
-  case WTAP_ERR_NOT_REGULAR_FILE:
-    errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
-    break;
-
-  case WTAP_ERR_RANDOM_OPEN_PIPE:
-    /* Seen only when opening a capture file for reading. */
-    errmsg = "The file \"%s\" is a pipe or FIFO; Ethereal cannot read pipe or FIFO files.";
-    break;
+  if (err < 0) {
+    /* Wiretap error. */
+    switch (err) {
 
-  case WTAP_ERR_FILE_UNKNOWN_FORMAT:
-  case WTAP_ERR_UNSUPPORTED:
-    /* Seen only when opening a capture file for reading. */
-    errmsg = "The file \"%s\" is not a capture file in a format Ethereal understands.";
-    break;
-
-  case WTAP_ERR_CANT_WRITE_TO_PIPE:
-    /* Seen only when opening a capture file for writing. */
-    snprintf(errmsg_errno, sizeof(errmsg_errno),
-            "The file \"%%s\" is a pipe, and %s capture files cannot be "
-            "written to a pipe.", wtap_file_type_string(file_type));
-    errmsg = errmsg_errno;
-    break;
+   case WTAP_ERR_NOT_REGULAR_FILE:
+      errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
+      break;
 
-  case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
-    /* Seen only when opening a capture file for writing. */
-    errmsg = "Ethereal does not support writing capture files in that format.";
-    break;
+    case WTAP_ERR_RANDOM_OPEN_PIPE:
+      /* Seen only when opening a capture file for reading. */
+      errmsg = "The file \"%s\" is a pipe or FIFO; Ethereal cannot read pipe or FIFO files.";
+      break;
 
-  case WTAP_ERR_UNSUPPORTED_ENCAP:
-  case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
-    if (for_writing)
-      errmsg = "Ethereal cannot save this capture in that format.";
-    else
-      errmsg = "The file \"%s\" is a capture for a network type that Ethereal doesn't support.";
-    break;
+    case WTAP_ERR_FILE_UNKNOWN_FORMAT:
+    case WTAP_ERR_UNSUPPORTED:
+      /* Seen only when opening a capture file for reading. */
+      errmsg = "The file \"%s\" is not a capture file in a format Ethereal understands.";
+      break;
 
-  case WTAP_ERR_BAD_RECORD:
-    errmsg = "The file \"%s\" appears to be damaged or corrupt.";
-    break;
+    case WTAP_ERR_CANT_WRITE_TO_PIPE:
+      /* Seen only when opening a capture file for writing. */
+      snprintf(errmsg_errno, sizeof(errmsg_errno),
+              "The file \"%%s\" is a pipe, and %s capture files cannot be "
+              "written to a pipe.", wtap_file_type_string(file_type));
+      errmsg = errmsg_errno;
+      break;
 
-  case WTAP_ERR_CANT_OPEN:
-    if (for_writing)
-      errmsg = "The file \"%s\" could not be created for some unknown reason.";
-    else
-      errmsg = "The file \"%s\" could not be opened for some unknown reason.";
-    break;
+    case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
+      /* Seen only when opening a capture file for writing. */
+      errmsg = "Ethereal does not support writing capture files in that format.";
+      break;
 
-  case WTAP_ERR_SHORT_READ:
-    errmsg = "The file \"%s\" appears to have been cut short"
-             " in the middle of a packet or other data.";
-    break;
+    case WTAP_ERR_UNSUPPORTED_ENCAP:
+    case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
+      if (for_writing)
+        errmsg = "Ethereal cannot save this capture in that format.";
+      else
+        errmsg = "The file \"%s\" is a capture for a network type that Ethereal doesn't support.";
+      break;
 
-  case WTAP_ERR_SHORT_WRITE:
-    errmsg = "A full header couldn't be written to the file \"%s\".";
-    break;
+    case WTAP_ERR_BAD_RECORD:
+      errmsg = "The file \"%s\" appears to be damaged or corrupt.";
+      break;
 
-  case ENOENT:
-    if (for_writing)
-      errmsg = "The path to the file \"%s\" does not exist.";
-    else
-      errmsg = "The file \"%s\" does not exist.";
-    break;
+    case WTAP_ERR_CANT_OPEN:
+      if (for_writing)
+        errmsg = "The file \"%s\" could not be created for some unknown reason.";
+      else
+        errmsg = "The file \"%s\" could not be opened for some unknown reason.";
+      break;
 
-  case EACCES:
-    if (for_writing)
-      errmsg = "You do not have permission to create or write to the file \"%s\".";
-    else
-      errmsg = "You do not have permission to read the file \"%s\".";
-    break;
+    case WTAP_ERR_SHORT_READ:
+      errmsg = "The file \"%s\" appears to have been cut short"
+               " in the middle of a packet or other data.";
+      break;
 
-  case EISDIR:
-    errmsg = "\"%s\" is a directory (folder), not a file.";
-    break;
+    case WTAP_ERR_SHORT_WRITE:
+      errmsg = "A full header couldn't be written to the file \"%s\".";
+      break;
 
-  default:
-    snprintf(errmsg_errno, sizeof(errmsg_errno),
-                   "The file \"%%s\" could not be %s: %s.",
-                               for_writing ? "created" : "opened",
-                               wtap_strerror(err));
-    errmsg = errmsg_errno;
-    break;
-  }
+    default:
+      snprintf(errmsg_errno, sizeof(errmsg_errno),
+              "The file \"%%s\" could not be %s: %s.",
+              for_writing ? "created" : "opened",
+              wtap_strerror(err));
+      errmsg = errmsg_errno;
+      break;
+    }
+  } else
+    errmsg = file_open_error_message(err, for_writing);
   return errmsg;
 }
 
@@ -2886,7 +2874,7 @@ copy_binary_file(char *from_filename, char *to_filename)
   if (from_fd < 0) {
     err = errno;
     simple_dialog(ESD_TYPE_CRIT, NULL,
-                 file_open_error_message(err, TRUE, 0), from_filename);
+                 cf_open_error_message(err, TRUE, 0), from_filename);
     goto done;
   }
 
@@ -2899,7 +2887,7 @@ copy_binary_file(char *from_filename, char *to_filename)
   if (to_fd < 0) {
     err = errno;
     simple_dialog(ESD_TYPE_CRIT, NULL,
-                 file_open_error_message(err, TRUE, 0), to_filename);
+                 cf_open_error_message(err, TRUE, 0), to_filename);
     close(from_fd);
     goto done;
   }
diff --git a/file.h b/file.h
index 3cd339ad920d1d2e3f5cd76d197af67053d6bb78..f117acd3bf20c4315db04bb1333d911dfbd9956d 100644 (file)
--- a/file.h
+++ b/file.h
@@ -1,7 +1,7 @@
 /* file.h
  * Definitions for file structures and routines
  *
- * $Id: file.h,v 1.111 2004/01/20 18:47:21 ulfl Exp $
+ * $Id: file.h,v 1.112 2004/01/24 01:44:28 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -95,7 +95,6 @@ int file_mv(char *from, char *to);
 /* Copies a file. Returns 0 on failure, 1 on success */
 int file_cp(char *from, char *to);
 
-char *file_open_error_message(int, gboolean, int);
 char *file_read_error_message(int);
 char *file_write_error_message(int);
 
index 9ea3a537810ad3ca2fe9a89d2af54908c2b21927..3ae5cb807197b806d59e0310ab69aaf7949460f8 100644 (file)
@@ -1,6 +1,6 @@
 /* tethereal.c
  *
- * $Id: tethereal.c,v 1.223 2004/01/19 18:21:18 jmayer Exp $
+ * $Id: tethereal.c,v 1.224 2004/01/24 01:44:28 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -172,6 +172,8 @@ static void wtap_dispatch_cb_write(guchar *, const struct wtap_pkthdr *, long,
 static void show_capture_file_io_error(const char *, int, gboolean);
 static void wtap_dispatch_cb_print(guchar *, const struct wtap_pkthdr *, long,
     union wtap_pseudo_header *, const guchar *);
+static char *cf_open_error_message(int err, gboolean for_writing,
+    int file_type);
 #ifdef HAVE_LIBPCAP
 #ifndef _WIN32
 static void adjust_header(loop_data *, struct pcap_hdr *, struct pcaprec_hdr *);
@@ -1811,7 +1813,7 @@ capture(int out_file_type)
 
     if (ld.pdh == NULL) {
       snprintf(errmsg, sizeof errmsg,
-              file_open_error_message(err, TRUE, out_file_type),
+              cf_open_error_message(err, TRUE, out_file_type),
               *cfile.save_file == '\0' ? "stdout" : cfile.save_file);
       goto error;
     }
@@ -2814,91 +2816,77 @@ wtap_dispatch_cb_print(guchar *user, const struct wtap_pkthdr *phdr,
   clear_fdata(&fdata);
 }
 
-char *
-file_open_error_message(int err, gboolean for_writing, int file_type)
+static char *
+cf_open_error_message(int err, gboolean for_writing, int file_type)
 {
   char *errmsg;
   static char errmsg_errno[1024+1];
 
-  switch (err) {
-
-  case WTAP_ERR_NOT_REGULAR_FILE:
-    errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
-    break;
-
-  case WTAP_ERR_FILE_UNKNOWN_FORMAT:
-  case WTAP_ERR_UNSUPPORTED:
-    /* Seen only when opening a capture file for reading. */
-    errmsg = "The file \"%s\" is not a capture file in a format Tethereal understands.";
-    break;
-
-  case WTAP_ERR_CANT_WRITE_TO_PIPE:
-    /* Seen only when opening a capture file for writing. */
-    snprintf(errmsg_errno, sizeof(errmsg_errno),
-            "The file \"%%s\" is a pipe, and %s capture files cannot be "
-            "written to a pipe.", wtap_file_type_string(file_type));
-    errmsg = errmsg_errno;
-    break;
+  if (err < 0) {
+    /* Wiretap error. */
+    switch (err) {
 
-  case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
-    /* Seen only when opening a capture file for writing. */
-    errmsg = "Tethereal does not support writing capture files in that format.";
-    break;
+    case WTAP_ERR_NOT_REGULAR_FILE:
+      errmsg = "The file \"%s\" is a \"special file\" or socket or other non-regular file.";
+      break;
 
-  case WTAP_ERR_UNSUPPORTED_ENCAP:
-  case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
-    if (for_writing)
-      errmsg = "Tethereal cannot save this capture in that format.";
-    else
-      errmsg = "The file \"%s\" is a capture for a network type that Tethereal doesn't support.";
-    break;
+    case WTAP_ERR_FILE_UNKNOWN_FORMAT:
+    case WTAP_ERR_UNSUPPORTED:
+      /* Seen only when opening a capture file for reading. */
+      errmsg = "The file \"%s\" is not a capture file in a format Tethereal understands.";
+      break;
 
-  case WTAP_ERR_BAD_RECORD:
-    errmsg = "The file \"%s\" appears to be damaged or corrupt.";
-    break;
+    case WTAP_ERR_CANT_WRITE_TO_PIPE:
+      /* Seen only when opening a capture file for writing. */
+      snprintf(errmsg_errno, sizeof(errmsg_errno),
+              "The file \"%%s\" is a pipe, and %s capture files cannot be "
+              "written to a pipe.", wtap_file_type_string(file_type));
+      errmsg = errmsg_errno;
+      break;
 
-  case WTAP_ERR_CANT_OPEN:
-    if (for_writing)
-      errmsg = "The file \"%s\" could not be created for some unknown reason.";
-    else
-      errmsg = "The file \"%s\" could not be opened for some unknown reason.";
-    break;
+    case WTAP_ERR_UNSUPPORTED_FILE_TYPE:
+      /* Seen only when opening a capture file for writing. */
+      errmsg = "Tethereal does not support writing capture files in that format.";
+      break;
 
-  case WTAP_ERR_SHORT_READ:
-    errmsg = "The file \"%s\" appears to have been cut short"
-             " in the middle of a packet or other data.";
-    break;
+    case WTAP_ERR_UNSUPPORTED_ENCAP:
+    case WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED:
+      if (for_writing)
+        errmsg = "Tethereal cannot save this capture in that format.";
+      else
+        errmsg = "The file \"%s\" is a capture for a network type that Tethereal doesn't support.";
+      break;
 
-  case WTAP_ERR_SHORT_WRITE:
-    errmsg = "A full header couldn't be written to the file \"%s\".";
-    break;
+    case WTAP_ERR_BAD_RECORD:
+      errmsg = "The file \"%s\" appears to be damaged or corrupt.";
+      break;
 
-  case ENOENT:
-    if (for_writing)
-      errmsg = "The path to the file \"%s\" does not exist.";
-    else
-      errmsg = "The file \"%s\" does not exist.";
-    break;
+    case WTAP_ERR_CANT_OPEN:
+      if (for_writing)
+        errmsg = "The file \"%s\" could not be created for some unknown reason.";
+      else
+        errmsg = "The file \"%s\" could not be opened for some unknown reason.";
+      break;
 
-  case EACCES:
-    if (for_writing)
-      errmsg = "You do not have permission to create or write to the file \"%s\".";
-    else
-      errmsg = "You do not have permission to read the file \"%s\".";
-    break;
+    case WTAP_ERR_SHORT_READ:
+      errmsg = "The file \"%s\" appears to have been cut short"
+               " in the middle of a packet or other data.";
+      break;
 
-  case EISDIR:
-    errmsg = "\"%s\" is a directory (folder), not a file.";
-    break;
+    case WTAP_ERR_SHORT_WRITE:
+      errmsg = "A full header couldn't be written to the file \"%s\".";
+      break;
 
-  default:
-    snprintf(errmsg_errno, sizeof(errmsg_errno),
-            "The file \"%%s\" could not be %s: %s.",
-            for_writing ? "created" : "opened",
-            wtap_strerror(err));
-    errmsg = errmsg_errno;
-    break;
-  }
+    default:
+      snprintf(errmsg_errno, sizeof(errmsg_errno),
+              "The file \"%%s\" could not be %s: %s.",
+              for_writing ? "created" : "opened",
+              wtap_strerror(err));
+      errmsg = errmsg_errno;
+      break;
+    }
+  } else
+    errmsg = file_open_error_message(err, for_writing);
   return errmsg;
 }
 
@@ -2952,7 +2940,7 @@ cf_open(char *fname, gboolean is_tempfile, capture_file *cf)
   return (0);
 
 fail:
-  snprintf(err_msg, sizeof err_msg, file_open_error_message(err, FALSE, 0),
+  snprintf(err_msg, sizeof err_msg, cf_open_error_message(err, FALSE, 0),
           fname);
   fprintf(stderr, "tethereal: %s\n", err_msg);
   return (err);