Rocco Rutte:
[apps/madmutt.git] / lib.c
diff --git a/lib.c b/lib.c
index b57070b..4f1fee3 100644 (file)
--- a/lib.c
+++ b/lib.c
 #include <fcntl.h>
 #include <pwd.h>
 
+#ifdef HAVE_SYSEXITS_H
+#include <sysexits.h>
+#else /* Make sure EX_OK is defined <philiph@pobox.com> */
+#define EX_OK 0
+#endif
+
 #include "lib.h"
 
 #include "lib/mem.h"
 #include "lib/str.h"
+#include "lib/debug.h"
 
 extern short Umask;
 
+static struct sysexits
+{
+  int v;
+  const char *str;
+} 
+sysexits_h[] = 
+{
+#ifdef EX_USAGE
+  { 0xff & EX_USAGE, "Bad usage." },
+#endif
+#ifdef EX_DATAERR
+  { 0xff & EX_DATAERR, "Data format error." },
+#endif
+#ifdef EX_NOINPUT
+  { 0xff & EX_NOINPUT, "Cannot open input." },
+#endif
+#ifdef EX_NOUSER
+  { 0xff & EX_NOUSER, "User unknown." },
+#endif
+#ifdef EX_NOHOST
+  { 0xff & EX_NOHOST, "Host unknown." },
+#endif
+#ifdef EX_UNAVAILABLE
+  { 0xff & EX_UNAVAILABLE, "Service unavailable." },
+#endif
+#ifdef EX_SOFTWARE
+  { 0xff & EX_SOFTWARE, "Internal error." },
+#endif
+#ifdef EX_OSERR
+  { 0xff & EX_OSERR, "Operating system error." },
+#endif
+#ifdef EX_OSFILE
+  { 0xff & EX_OSFILE, "System file missing." },
+#endif
+#ifdef EX_CANTCREAT
+  { 0xff & EX_CANTCREAT, "Can't create output." },
+#endif
+#ifdef EX_IOERR
+  { 0xff & EX_IOERR, "I/O error." },
+#endif
+#ifdef EX_TEMPFAIL
+  { 0xff & EX_TEMPFAIL, "Deferred." },
+#endif
+#ifdef EX_PROTOCOL
+  { 0xff & EX_PROTOCOL, "Remote protocol error." },
+#endif
+#ifdef EX_NOPERM
+  { 0xff & EX_NOPERM, "Insufficient permission." },
+#endif
+#ifdef EX_CONFIG
+  { 0xff & EX_NOPERM, "Local configuration error." },
+#endif
+  { S_ERR, "Exec error." },
+  { -1, NULL}
+};
+
 void mutt_nocurses_error (const char *fmt, ...)
 {
   va_list ap;
@@ -104,7 +167,7 @@ int mutt_copy_bytes (FILE * in, FILE * out, size_t size)
     if ((chunk = fread (buf, 1, chunk, in)) < 1)
       break;
     if (fwrite (buf, 1, chunk, out) != chunk) {
-      /* dprint (1, (debugfile, "mutt_copy_bytes(): fwrite() returned short byte count\n")); */
+      debug_print (1, ("fwrite() returned short byte count\n"));
       return (-1);
     }
     size -= chunk;
@@ -154,7 +217,7 @@ int safe_symlink (const char *oldpath, const char *newpath)
     char abs_oldpath[_POSIX_PATH_MAX];
 
     if ((getcwd (abs_oldpath, sizeof abs_oldpath) == NULL) ||
-        (safe_strlen (abs_oldpath) + 1 + safe_strlen (oldpath) + 1 >
+        (str_len (abs_oldpath) + 1 + str_len (oldpath) + 1 >
          sizeof abs_oldpath))
       return -1;
 
@@ -250,7 +313,7 @@ int safe_open (const char *path, int flags)
   /* make sure the file is not symlink */
   if (lstat (path, &osb) < 0 || fstat (fd, &nsb) < 0 ||
       compare_stat (&osb, &nsb) == -1) {
-/*    dprint (1, (debugfile, "safe_open(): %s is a symlink!\n", path)); */
+    debug_print (1, ("%s is a symlink!\n", path));
     close (fd);
     return (-1);
   }
@@ -334,13 +397,13 @@ char *mutt_read_line (char *s, size_t * size, FILE * fp, int *line)
   char *ch;
 
   if (!s) {
-    s = safe_malloc (STRING);
+    s = mem_malloc (STRING);
     *size = STRING;
   }
 
   FOREVER {
     if (fgets (s + offset, *size - offset, fp) == NULL) {
-      FREE (&s);
+      mem_free (&s);
       return NULL;
     }
     if ((ch = strchr (s + offset, '\n')) != NULL) {
@@ -370,7 +433,7 @@ char *mutt_read_line (char *s, size_t * size, FILE * fp, int *line)
         /* There wasn't room for the line -- increase ``s'' */
         offset = *size - 1;     /* overwrite the terminating 0 */
         *size += STRING;
-        safe_realloc (&s, *size);
+        mem_realloc (&s, *size);
       }
     }
   }
@@ -415,7 +478,7 @@ char *mutt_concat_path (char *d, const char *dir, const char *fname, size_t l)
 {
   const char *fmt = "%s/%s";
 
-  if (!*fname || (*dir && dir[safe_strlen (dir) - 1] == '/'))
+  if (!*fname || (*dir && dir[str_len (dir) - 1] == '/'))
     fmt = "%s%s";
 
   snprintf (d, l, fmt, dir, fname);
@@ -431,3 +494,17 @@ const char *mutt_basename (const char *f)
   else
     return f;
 }
+
+const char *
+mutt_strsysexit(int e)
+{
+  int i;
+  
+  for(i = 0; sysexits_h[i].str; i++)
+  {
+    if(e == sysexits_h[i].v)
+      break;
+  }
+  
+  return sysexits_h[i].str;
+}