]> granicus.if.org Git - neomutt/commitdiff
check retval of mutt_system() 953/head
authorRichard Russon <rich@flatcap.org>
Mon, 13 Nov 2017 13:16:32 +0000 (13:16 +0000)
committerRichard Russon <rich@flatcap.org>
Wed, 15 Nov 2017 15:12:11 +0000 (15:12 +0000)
`mutt_system()` returns int, so check accordingly.

Also, make sure we log if any calls fail.

attach.c
commands.c
conn/socket.c
curs_lib.c
curs_main.c
ncrypt/pgpinvoke.c
pager.c
remailer.c
rfc1524.c
system.c

index 458803b699cfb1e991f7b937098aa1013846da47..ab2207bcfbfb9cb2f1b81553fc8e525ca040613d 100644 (file)
--- a/attach.c
+++ b/attach.c
@@ -530,7 +530,11 @@ int mutt_view_attachment(FILE *fp, struct Body *a, int flag, struct Header *hdr,
     else
     {
       /* interactive command */
-      if (mutt_system(command) || (entry->needsterminal && option(OPT_WAIT_KEY)))
+      int rc = mutt_system(command);
+      if (rc == -1)
+        mutt_debug(1, "Error running \"%s\"!", command);
+
+      if ((rc != 0) || (entry->needsterminal && option(OPT_WAIT_KEY)))
         mutt_any_key_to_continue(NULL);
     }
   }
@@ -1050,7 +1054,11 @@ int mutt_print_attachment(FILE *fp, struct Body *a)
     }
     else
     {
-      if (mutt_system(command) || option(OPT_WAIT_KEY))
+      int rc = mutt_system(command);
+      if (rc == -1)
+        mutt_debug(1, "Error running \"%s\"!", command);
+
+      if ((rc != 0) || option(OPT_WAIT_KEY))
         mutt_any_key_to_continue(NULL);
     }
 
index fa1343b3c155ccd6cd02dc5eb9f12c8b1abe62aa..e398874e46d9bdb48e746f4ceab75c6d02db3243 100644 (file)
@@ -622,7 +622,11 @@ void mutt_shell_escape(void)
       mutt_window_clearline(MuttMessageWindow, 0);
       mutt_endwin(NULL);
       fflush(stdout);
-      if (mutt_system(buf) != 0 || option(OPT_WAIT_KEY))
+      int rc = mutt_system(buf);
+      if (rc == -1)
+        mutt_debug(1, "Error running \"%s\"!", buf);
+
+      if ((rc != 0) || option(OPT_WAIT_KEY))
         mutt_any_key_to_continue(NULL);
       mutt_buffy_check(true);
     }
index 455aaa8fab77bf349dd51c237585526f665577b4..5846391afc0e4c47e0177c80155604d7c502175f 100644 (file)
@@ -87,7 +87,7 @@ static int socket_preconnect(void)
     mutt_debug(2, "Executing preconnect: %s\n", Preconnect);
     rc = mutt_system(Preconnect);
     mutt_debug(2, "Preconnect result: %d\n", rc);
-    if (rc)
+    if (rc != 0)
     {
       save_errno = errno;
       mutt_perror(_("Preconnect command failed."));
index 43366aeed23c8962c409c988ce7bdbbb6df0a1b9..fc98d2eff1f567694b14e9078e67378521f9b55f 100644 (file)
@@ -233,7 +233,7 @@ void mutt_edit_file(const char *editor, const char *data)
 
   mutt_endwin(NULL);
   mutt_expand_file_fmt(cmd, sizeof(cmd), editor, data);
-  if (mutt_system(cmd))
+  if (mutt_system(cmd) != 0)
   {
     mutt_error(_("Error running \"%s\"!"), cmd);
     mutt_sleep(2);
index 03446a2be21851cc2500bea18d81854190fb0407..b3e89140fa2bd83840fbe34cee43aca82e56fef5 100644 (file)
@@ -1007,7 +1007,8 @@ int mutt_index_menu(void)
               {
                 char cmd[LONG_STRING];
                 menu_status_line(cmd, sizeof(cmd), menu, NONULL(NewMailCommand));
-                mutt_system(cmd);
+                if (mutt_system(cmd) != 0)
+                  mutt_error(_("Error running \"%s\"!"), cmd);
               }
               break;
             }
@@ -1049,7 +1050,8 @@ int mutt_index_menu(void)
           {
             char cmd[LONG_STRING];
             menu_status_line(cmd, sizeof(cmd), menu, NONULL(NewMailCommand));
-            mutt_system(cmd);
+            if (mutt_system(cmd) != 0)
+              mutt_error(_("Error running \"%s\"!"), cmd);
           }
         }
       }
index 6f8d18265ff97b0268ba6b03601daf8afdacd0eb..30c6f7a1d4cf7d85ed4a536297fba74c3500433f 100644 (file)
@@ -250,7 +250,8 @@ void pgp_invoke_import(const char *fname)
   cctx.signas = PgpSignAs;
 
   mutt_pgp_command(cmd, sizeof(cmd), &cctx, PgpImportCommand);
-  mutt_system(cmd);
+  if (mutt_system(cmd) != 0)
+    mutt_debug(1, "Error running \"%s\"!", cmd);
 }
 
 void pgp_invoke_getkeys(struct Address *addr)
@@ -288,7 +289,8 @@ void pgp_invoke_getkeys(struct Address *addr)
   if (!isendwin())
     mutt_message(_("Fetching PGP key..."));
 
-  mutt_system(cmd);
+  if (mutt_system(cmd) != 0)
+    mutt_debug(1, "Error running \"%s\"!", cmd);
 
   if (!isendwin())
     mutt_clear_error();
diff --git a/pager.c b/pager.c
index 9738b15041ba0aa060ec3d3ec95287c8fd5d7810..866d17f54ca496b2bb0bba69f01946b6ca49c829 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -2234,7 +2234,8 @@ int mutt_pager(const char *banner, const char *fname, int flags, struct Pager *e
         {
           char cmd[LONG_STRING];
           menu_status_line(cmd, sizeof(cmd), rd.index, NONULL(NewMailCommand));
-          mutt_system(cmd);
+          if (mutt_system(cmd) != 0)
+            mutt_error(_("Error running \"%s\"!"), cmd);
         }
       }
     }
index a6ac93b25a4211a19248f798a15bd358a549c3cc..d925562f7d97e1e028145d1e8e45385e45a2b222 100644 (file)
@@ -735,7 +735,8 @@ int mix_send_message(struct ListHead *chain, const char *tempfile)
   if (!option(OPT_NO_CURSES))
     mutt_endwin(NULL);
 
-  if ((i = mutt_system(cmd)))
+  i = mutt_system(cmd);
+  if (i != 0)
   {
     fprintf(stderr, _("Error sending message, child exited %d.\n"), i);
     if (!option(OPT_NO_CURSES))
index 125b920a6a8ed23e3163e94ec6b530b38f31a3c6..5bae77504d4e2b29978edbbb13ad67c885489f27 100644 (file)
--- a/rfc1524.c
+++ b/rfc1524.c
@@ -302,7 +302,7 @@ static int rfc1524_mailcap_parse(struct Body *a, char *filename, char *type,
             len = mutt_strlen(test_command) + STRING;
             safe_realloc(&test_command, len);
             rfc1524_expand_command(a, a->filename, type, test_command, len);
-            if (mutt_system(test_command))
+            if (mutt_system(test_command) != 0)
             {
               /* a non-zero exit code means test failed */
               found = false;
index 8e3cd0ebe2688e2b306af42ba57d2e22c43942d9..7f153bc06d7defe939079b9361a65bbdc237b670 100644 (file)
--- a/system.c
+++ b/system.c
 #include <sys/types.h>
 #include <sys/wait.h>
 
+/**
+ * mutt_system - Run an external command
+ * @param cmd Command and argments
+ * @retval -1  Error
+ * @retval >=0 Success (command's return code)
+ *
+ * Fork and run an external command with arguments.
+ *
+ * @note This function won't return until the command finishes.
+ */
 int mutt_system(const char *cmd)
 {
   int rc = -1;