]> granicus.if.org Git - neomutt/commitdiff
add debug harness to lib.c functions, and a bunch of dprint's
authorThomas Roessler <roessler@does-not-exist.org>
Tue, 2 Jan 2007 17:10:34 +0000 (17:10 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Tue, 2 Jan 2007 17:10:34 +0000 (17:10 +0000)
to safe_rename().

globals.h
lib.c
lib.h
mutt.h
mutt_socket.c
muttlib.c
pgppacket.c
protos.h

index 6abd75e0e6ba607cd4fbe6b14e649a92a5b5a2e1..7836155b062eb1cb81f4d2ec8b21e6edac450cb0 100644 (file)
--- a/globals.h
+++ b/globals.h
@@ -254,10 +254,6 @@ WHERE char *SmimeGetCertEmailCommand;
 
 
 
-#ifdef DEBUG
-WHERE FILE *debugfile INITVAL (0);
-WHERE int debuglevel INITVAL (0);
-#endif
 
 #ifdef MAIN_C
 const char *Weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
diff --git a/lib.c b/lib.c
index d672a8a0c428f756d7efee4e113cde623a300543..e6e80c2edc253583c20d25524641ee492ea8e3b1 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -26,6 +26,8 @@
  * some of our "standard" functions in external programs, too.
  */
 
+#define _LIB_C 1
+
 #if HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -48,6 +50,7 @@
 
 #include "lib.h"
 
+
 static struct sysexits
 {
   int v;
@@ -361,7 +364,7 @@ int mutt_copy_stream (FILE *fin, FILE *fout)
   return 0;
 }
 
-static int 
+int 
 compare_stat (struct stat *osb, struct stat *nsb)
 {
   if (osb->st_dev != nsb->st_dev || osb->st_ino != nsb->st_ino ||
@@ -412,6 +415,8 @@ int safe_symlink(const char *oldpath, const char *newpath)
   return 0;
 }
 
+
+
 /* 
  * This function is supposed to do nfs-safe renaming of files.
  * 
@@ -439,10 +444,22 @@ int safe_rename (const char *src, const char *target)
      * to try it here.
      *
      */
+    
+    dprint (1, (debugfile, "safe_rename: link (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));
 
     if (errno == EXDEV)
-      return rename (src, target);
+    {
+      dprint (1, (debugfile, "safe_rename: errno was EXDEV; trying rename...\n"));
+      if (rename (src, target) == -1) 
+      {
+       dprint (1, (debugfile, "safe_rename: rename (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));
+       return -1;
+      }
+      dprint (1, (debugfile, "safe_rename: rename succeeded.\n"));
     
+      return 0;
+    }
+
     return -1;
   }
 
@@ -450,13 +467,17 @@ int safe_rename (const char *src, const char *target)
    * Stat both links and check if they are equal.
    */
   
-  if (stat (src, &ssb) == -1)
+  if (lstat (src, &ssb) == -1)
   {
+    dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
+               src, strerror (errno), errno));
     return -1;
   }
   
-  if (stat (target, &tsb) == -1)
+  if (lstat (target, &tsb) == -1)
   {
+    dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
+               src, strerror (errno), errno));
     return -1;
   }
 
@@ -467,6 +488,7 @@ int safe_rename (const char *src, const char *target)
 
   if (compare_stat (&ssb, &tsb) == -1)
   {
+    dprint (1, (debugfile, "safe_rename: stat blocks for %s and %s diverge; pretending EEXIST.\n", src, target));
     errno = EEXIST;
     return -1;
   }
@@ -476,11 +498,17 @@ int safe_rename (const char *src, const char *target)
    * value here? XXX
    */
 
-  unlink (src);
+  if (unlink (src) == -1) 
+  {
+    dprint (1, (debugfile, "safe_rename: unlink (%s) failed: %s (%d)\n",
+               src, strerror (errno), errno));
+  }
+  
 
   return 0;
 }
 
+
 /* Create a temporary directory next to a file name */
 
 int mutt_mkwrapdir (const char *path, char *newfile, size_t nflen, 
diff --git a/lib.h b/lib.h
index eb3ba33cf1041d591abf864f1fcd6b65df6ec403..952a1b4edcf77cb42c8738160591c5c24339b408 100644 (file)
--- a/lib.h
+++ b/lib.h
  * A non-mutt "implementation" (ahem) can be found in extlib.c.
  */
 
+
 # ifndef _EXTLIB_C
 extern void (*mutt_error) (const char *, ...);
 # endif
+
+# ifdef _LIB_C
+#  define MUTT_LIB_WHERE 
+#  define MUTT_LIB_INITVAL(x) = x
+# else
+#  define MUTT_LIB_WHERE extern
+#  define MUTT_LIB_INITVAL(x)
+# endif
+
 void mutt_exit (int);
 
+
+# ifdef DEBUG
+
+MUTT_LIB_WHERE FILE *debugfile MUTT_LIB_INITVAL(0);
+MUTT_LIB_WHERE int debuglevel MUTT_LIB_INITVAL(0);
+
+#  define dprint(N,X) do { if(debuglevel>=N && debugfile) fprintf X; } while (0)
+
+# else
+
+#  define dprint(N,X)
+
+# endif
+
+
 /* Exit values used in send_msg() */
 #define S_ERR 127
 #define S_BKG 126
@@ -124,6 +149,7 @@ char *safe_strdup (const char *);
 const char *mutt_stristr (const char *, const char *);
 const char *mutt_basename (const char *);
 
+int compare_stat (struct stat *, struct stat *);
 int mutt_copy_stream (FILE *, FILE *);
 int mutt_copy_bytes (FILE *, FILE *, size_t);
 int mutt_rx_sanitize_string (char *, size_t, const char *);
@@ -133,8 +159,8 @@ int mutt_strncasecmp (const char *, const char *, size_t);
 int mutt_strncmp (const char *, const char *, size_t);
 int mutt_strcoll (const char *, const char *);
 int safe_open (const char *, int);
-int safe_symlink (const char *, const char *);
 int safe_rename (const char *, const char *);
+int safe_symlink (const char *, const char *);
 int safe_fclose (FILE **);
 
 size_t mutt_quote_filename (char *, size_t, const char *);
diff --git a/mutt.h b/mutt.h
index 72a9d57ed113125b1fff6099f053899e9954ef15..8cb74f8b249d2b13cf03855f00b074d006ca6a4f 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -71,6 +71,8 @@
 #define INITVAL(x) 
 #endif
 
+#define WHERE_DEFINED 1
+
 #include "mutt_regex.h"
 
 /* flags for mutt_copy_header() */
index cf0037f8838f8f885c25172e0cf2543c78c2c185..4c1b96e868ae35ce5aba3498b5f05d1df5eef342 100644 (file)
@@ -23,7 +23,6 @@
 #endif
 
 #include "mutt.h"
-#include "globals.h"
 #include "mutt_socket.h"
 #include "mutt_tunnel.h"
 #if defined(USE_SSL)
index 7bd9c6edbfb0d27ce724f8cf2416bd650a0f8ce5..babe55adbf1f1a4873dbd10a5af703fec8b33904 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -1641,3 +1641,4 @@ int mutt_match_spam_list (const char *s, SPAM_LIST *l, char *text, int x)
 
   return 0;
 }
+
index acf617d0e86c9532234af12b4033d6d03337e248..8c2d4b928d1c5ccd9e139b697cf7cf94a296d97f 100644 (file)
 #include <unistd.h>
 #include <time.h>
 
+
+
+/* yuck, we were including this one somewhere below. */
+#include "mutt.h"
+
 #include "sha1.h"
 #include "lib.h"
 #include "pgplib.h"
index 451753c85e197261d6f5cc7ad652795163ea5fba..f0456fe60de0084e5fa921a446c0098e4a78540c 100644 (file)
--- a/protos.h
+++ b/protos.h
 
 #include "mbyte.h"
 
-#ifdef DEBUG
-#define dprint(N,X) do { if(debuglevel>=N) fprintf X; } while (0)
-#else
-#define dprint(N,X) 
-#endif
-
 #define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#')
 
 #define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0)