Initialize vecp in send anno()
[mmh] / uip / send.c
index 3ca6772..ed6b08d 100644 (file)
@@ -24,8 +24,7 @@
 #include <time.h>
 
 int debugsw = 0;  /* global */
-int verbosesw = 0;
-char *altmsg   = NULL;
+char *altmsg = NULL;
 char *annotext = NULL;
 char *distfile = NULL;
 
@@ -118,9 +117,7 @@ main(int argc, char **argv)
                                debugsw++;
                                /* fall */
                        case VERBSW:
-                               verbosesw += 2;
                        case NVERBSW:
-                               verbosesw--;
                                vec[vecp++] = --cp;
                                continue;
                        }
@@ -240,8 +237,7 @@ main(int argc, char **argv)
 static int
 sendsbr(char **vec, int vecp, char *drft, struct stat *st)
 {
-       int status;
-       char buffer[BUFSIZ];
+       int status, dupfd;
        char *original_draft;
 
        /*
@@ -298,12 +294,16 @@ sendsbr(char **vec, int vecp, char *drft, struct stat *st)
                status = sendaux(vec, vecp, drft, st) ? NOTOK : OK;
                if (status == OK) {
                        /* move original draft to +trash folder */
-                       snprintf(buffer, sizeof buffer,
-                                       "</dev/null refile -file %s +trash",
-                                       original_draft);
-                       if (system(buffer) != 0) {
+                       /* temporary close stdin, for refile not to ask */
+                       dupfd = dup(0);
+                       close(0);
+                       if (execprogl("refile", "refile", "-file",
+                                       original_draft, "+trash",
+                                       (char *)NULL) != 0) {
                                advise(NULL, "unable to trash the draft");
                        }
+                       dup2(dupfd, 0);
+                       close(dupfd);
                }
                break;
 
@@ -653,12 +653,9 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st)
                        if (annotext) {
                                anno(st);
                        }
-               }
-               else {
+               } else {
+                       /* spost failed */
                        advise(NULL, "%s", strexit(status));
-                       if (verbosesw <= 0) {
-                               advise(NULL, "Try using -v to get better output");
-                       }
                        if (distfile) {
                                unlink(drft);
                                if (rename(backup, drft) == NOTOK) {
@@ -680,6 +677,9 @@ anno(struct stat *st)
        struct stat st2;
        char *msgs, *folder;
        char buf[BUFSIZ];
+       char *vec[MAXARGS];
+       int vecp = 0;
+       char *cp, *dp;
 
        if (altmsg && (stat(altmsg, &st2) == NOTOK ||
                        st->st_mtime != st2.st_mtime ||
@@ -707,9 +707,27 @@ anno(struct stat *st)
                advise(NULL, "annotate as `%s': %s %s", annotext,
                                folder, msgs);
        }
-       snprintf(buf, sizeof buf, "anno -comp '%s' '+%s' %s",
-                       annotext, folder, msgs);
-       if (system(buf) != 0) {
+       vec[vecp++] = "anno";
+       vec[vecp++] = "-comp";
+       vec[vecp++] = annotext;
+       snprintf(buf, sizeof buf, "+%s", folder);
+       vec[vecp++] = buf;
+
+       while (isspace(*msgs)) {
+               msgs++;
+       }
+       for (cp=dp=msgs; *cp; cp++) {
+               if (isspace(*cp)) {
+                       while (isspace(*cp)) {
+                               *cp++ = '\0';
+                       }
+                       vec[vecp++] = dp;
+                       dp = cp;
+               }
+       }
+       vec[vecp++] = dp;
+       vec[vecp] = NULL;
+       if (execprog(*vec, vec) != 0) {
                advise(NULL, "unable to annotate");
        }
 }
@@ -722,13 +740,13 @@ strexit(int status)
                return "spost or sendmail killed by signal";
        }
        if (!WIFEXITED(status)) {
-               return "sendmail stopt for unknown reasen, message not deliverd to anyone";
+               return "message not delivered to anyone";
        }
        switch (WEXITSTATUS(status)) {
-               case EX_TEMPFAIL:
-                       return "Temporary error, maby the MTA hase queued the Mail";
-               default:
-                       return "sendmail stopt for unknown reasen, message not deliverd to anyone";
+       case EX_TEMPFAIL:
+               return "Temporary error, maybe the MTA has queued the message";
+       default:
+               return "message not delivered to anyone";
        }
 }