]> diplodocus.org Git - nmh/blobdiff - uip/mhstore.c
If we don't have iconv, skip the multibyte test that requires character
[nmh] / uip / mhstore.c
index 41e62c7d863c90a57bfdfbddc67a4988e84c602c..61a54e631a04daefea38ca460af7f16dcda35d52 100644 (file)
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 
-static struct swit switches[] = {
-#define        AUTOSW                  0
-    { "auto", 0 },
-#define        NAUTOSW                 1
-    { "noauto", 0 },
-#define        CHECKSW                 2
-    { "check", 0 },
-#define        NCHECKSW                3
-    { "nocheck", 0 },
-#define        VERBSW                  4
-    { "verbose", 0 },
-#define        NVERBSW                 5
-    { "noverbose", 0 },
-#define        FILESW                  6       /* interface from show */
-    { "file file", 0 },
-#define        PARTSW                  7
-    { "part number", 0 },
-#define        TYPESW                  8
-    { "type content", 0 },
-#define        RCACHESW                9
-    { "rcache policy", 0 },
-#define        WCACHESW               10
-    { "wcache policy", 0 },
-#define VERSIONSW              11
-    { "version", 0 },
-#define        HELPSW                 12
-    { "help", 0 },
-
-/*
- * switches for debugging
- */
-#define        DEBUGSW                13
-    { "debug", -5 },
-    { NULL, 0 }
-};
-
+#define MHSTORE_SWITCHES \
+    X("auto", 0, AUTOSW) \
+    X("noauto", 0, NAUTOSW) \
+    X("check", 0, CHECKSW) \
+    X("nocheck", 0, NCHECKSW) \
+    X("verbose", 0, VERBSW) \
+    X("noverbose", 0, NVERBSW) \
+    X("file file", 0, FILESW)          /* interface from show */ \
+    X("part number", 0, PARTSW) \
+    X("type content", 0, TYPESW) \
+    X("rcache policy", 0, RCACHESW) \
+    X("wcache policy", 0, WCACHESW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+    X("clobber always|auto|suffix|ask|never", 0, CLOBBERSW) \
+    X("debug", -5, DEBUGSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(MHSTORE);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(MHSTORE, switches);
+#undef X
+
+
+int save_clobber_policy (const char *);
+extern int files_not_clobbered;
 
 /* mhparse.c */
 extern char *tmp;      /* directory to place temp files */
@@ -213,6 +205,14 @@ do_cache:
            case NVERBSW: 
                verbosw = 0;
                continue;
+            case CLOBBERSW:
+               if (!(cp = *argp++) || *cp == '-')
+                   adios (NULL, "missing argument to %s", argp[-2]);
+                if (save_clobber_policy (cp)) {
+                  adios (NULL, "invalid argument, %s, to %s", argp[-1],
+                         argp[-2]);
+                }
+               continue;
            case DEBUGSW:
                debugsw = 1;
                continue;
@@ -231,8 +231,6 @@ do_cache:
     parts[npart] = NULL;
     types[ntype] = NULL;
 
-    set_endian ();
-
     /*
      * Check if we've specified an additional profile
      */
@@ -377,7 +375,7 @@ do_cache:
        context_save ();                  /* save the context file  */
     }
 
-    done (0);
+    done (files_not_clobbered);
     return 1;
 }