]> diplodocus.org Git - nmh/blobdiff - uip/comp.c
Alter HasSuffixC()'s char * to be const.
[nmh] / uip / comp.c
index 0b0ac369f804a66f169f4398be211432ec6b8793..8129bb4c6646e15709e86c4b3d1df77f614de34a 100644 (file)
@@ -24,6 +24,7 @@
     X("nouse", 0, NUSESW) \
     X("whatnowproc program", 0, WHATSW) \
     X("nowhatnowproc", 0, NWHATSW) \
     X("nouse", 0, NUSESW) \
     X("whatnowproc program", 0, WHATSW) \
     X("nowhatnowproc", 0, NWHATSW) \
+    X("build", 5, BILDSW) \
     X("version", 0, VERSIONSW) \
     X("help", 0, HELPSW) \
     X("to address", 0, TOSW) \
     X("version", 0, VERSIONSW) \
     X("help", 0, HELPSW) \
     X("to address", 0, TOSW) \
@@ -69,7 +70,7 @@ static struct swit aqrul[] = {
 int
 main (int argc, char **argv)
 {
 int
 main (int argc, char **argv)
 {
-    int use = NOUSE, nedit = 0, nwhat = 0;
+    int use = NOUSE, nedit = 0, nwhat = 0, build = 0;
     int i, in = NOTOK, isdf = 0, out, dat[5], format_len = 0;
     int outputlinelen = OUTPUTLINELEN;
     char *cp, *cwd, *maildir, *dfolder = NULL;
     int i, in = NOTOK, isdf = 0, out, dat[5], format_len = 0;
     int outputlinelen = OUTPUTLINELEN;
     char *cp, *cwd, *maildir, *dfolder = NULL;
@@ -82,13 +83,7 @@ main (int argc, char **argv)
     struct format *fmt;
     struct stat st;
 
     struct format *fmt;
     struct stat st;
 
-#ifdef LOCALE
-    setlocale(LC_ALL, "");
-#endif
-    invo_name = r1bindex (argv[0], '/');
-
-    /* read user profile/context */
-    context_read();
+    if (nmh_init(argv[0], 1)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -125,6 +120,10 @@ main (int argc, char **argv)
                        adios (NULL, "missing argument to %s", argp[-2]);
                    nwhat = 0;
                    continue;
                        adios (NULL, "missing argument to %s", argp[-2]);
                    nwhat = 0;
                    continue;
+
+               case BILDSW:
+                   build++;
+                   /* fall through */
                case NWHATSW: 
                    nwhat++;
                    continue;
                case NWHATSW: 
                    nwhat++;
                    continue;
@@ -193,8 +192,7 @@ main (int argc, char **argv)
                    if (*cp == '@')
                        cp = dp = path(cp + 1, TSUBCWF);
                    fcc = addlist(fcc, cp);
                    if (*cp == '@')
                        cp = dp = path(cp + 1, TSUBCWF);
                    fcc = addlist(fcc, cp);
-                   if (dp)
-                       free(dp);
+                    mh_xfree(dp);
                    continue;
 
                case WIDTHSW:
                    continue;
 
                case WIDTHSW:
@@ -224,7 +222,7 @@ main (int argc, char **argv)
        }
     }
 
        }
     }
 
-    cwd = getcpy (pwd ());
+    cwd = mh_xstrdup(pwd ());
 
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
 
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
@@ -256,7 +254,7 @@ main (int argc, char **argv)
            adios (maildir, "unable to change directory to");
 
        /* read folder and create message structure */
            adios (maildir, "unable to change directory to");
 
        /* read folder and create message structure */
-       if (!(mp = folder_read (folder)))
+       if (!(mp = folder_read (folder, 1)))
            adios (NULL, "unable to read folder %s", folder);
 
        /* check for empty folder */
            adios (NULL, "unable to read folder %s", folder);
 
        /* check for empty folder */
@@ -267,11 +265,12 @@ main (int argc, char **argv)
        if (!m_convert (mp, msg))
            done (1);
        seq_setprev (mp);       /* set the previous-sequence */
        if (!m_convert (mp, msg))
            done (1);
        seq_setprev (mp);       /* set the previous-sequence */
+       seq_save (mp);
 
        if (mp->numsel > 1)
            adios (NULL, "only one message at a time!");
 
 
        if (mp->numsel > 1)
            adios (NULL, "only one message at a time!");
 
-       if ((in = open (form = getcpy (m_name (mp->lowsel)), O_RDONLY)) == NOTOK)
+       if ((in = open (form = mh_xstrdup(m_name (mp->lowsel)), O_RDONLY)) == NOTOK)
            adios (form, "unable to open message");
     } else {
        struct comp *cptr;
            adios (form, "unable to open message");
     } else {
        struct comp *cptr;
@@ -315,12 +314,13 @@ main (int argc, char **argv)
     }
 
 try_it_again:
     }
 
 try_it_again:
-    strncpy (drft, m_draft (dfolder, file, use, &isdf), sizeof(drft));
+    strncpy (drft, build ? m_maildir ("draft")
+                       : m_draft (dfolder, file, use, &isdf), sizeof(drft));
 
     /*
      * Check if we have an existing draft
      */
 
     /*
      * Check if we have an existing draft
      */
-    if ((out = open (drft, O_RDONLY)) != NOTOK) {
+    if (!build && (out = open (drft, O_RDONLY)) != NOTOK) {
        i = fdcompare (in, out);
        close (out);
 
        i = fdcompare (in, out);
        close (out);
 
@@ -336,7 +336,8 @@ try_it_again:
            adios (drft, "unable to stat");
        printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
        for (i = LISTDSW; i != YESW;) {
            adios (drft, "unable to stat");
        printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
        for (i = LISTDSW; i != YESW;) {
-           if (!(argp = getans ("\nDisposition? ", isdf ? aqrunl : aqrul)))
+           if (!(argp = read_switch_multiword ("\nDisposition? ",
+                                               isdf ? aqrunl : aqrul)))
                done (1);
            switch (i = smatch (*argp, isdf ? aqrunl : aqrul)) {
                case NOSW: 
                done (1);
            switch (i = smatch (*argp, isdf ? aqrunl : aqrul)) {
                case NOSW: 
@@ -370,18 +371,21 @@ try_it_again:
     if ((out = creat (drft, m_gmprot ())) == NOTOK)
        adios (drft, "unable to create");
     if (cp) {
     if ((out = creat (drft, m_gmprot ())) == NOTOK)
        adios (drft, "unable to create");
     if (cp) {
-       char *scanl;
+       charstring_t scanl;
 
        i = format_len + 1024;
 
        i = format_len + 1024;
-       scanl = mh_xmalloc((size_t) i + 2);
+       scanl = charstring_create (i + 2);
        dat[0] = 0;
        dat[1] = 0;
        dat[2] = 0;
        dat[3] = outputlinelen;
        dat[4] = 0;
        dat[0] = 0;
        dat[1] = 0;
        dat[2] = 0;
        dat[3] = outputlinelen;
        dat[4] = 0;
-       fmt_scan(fmt, scanl, i + 1, i, dat);
-       write(out, scanl, strlen(scanl));
-       free(scanl);
+       fmt_scan(fmt, scanl, i, dat, NULL);
+       if (write(out, charstring_buffer (scanl),
+                 charstring_bytes (scanl)) < 0) {
+           advise (drft, "write");
+       }
+       charstring_free(scanl);
     } else {
        cpydata (in, out, form, drft);
        close (in);
     } else {
        cpydata (in, out, form, drft);
        close (in);