]> diplodocus.org Git - nmh/blobdiff - uip/new.c
Moved scan_input() from uip/post.c to sbr/utils.c.
[nmh] / uip / new.c
index 6f9982528c50111ade88551a63ac45616ac6062f..9a7f9d4f2bdc76fe4060ddf6db0a983964f4c555 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
@@ -95,6 +95,7 @@ get_msgnums(char *folder, char *sequences[])
     char name[NAMESZ], field[BUFSIZ];
     char *cp;
     char *msgnums = NULL, *this_msgnums, *old_msgnums;
+    int failed_to_lock = 0;
     m_getfld_state_t gstate = 0;
 
     /* copied from seq_read.c:seq_public */
@@ -112,9 +113,14 @@ get_msgnums(char *folder, char *sequences[])
     if (seqfile == NULL)
        return NULL;
 
-    if ((fp = lkfopendata (seqfile, "r")) == NULL) {
-       free(seqfile);
-       return NULL;
+    if ((fp = lkfopendata (seqfile, "r", & failed_to_lock)) == NULL) {
+
+       if (failed_to_lock) {
+           adios (seqfile, "failed to lock");
+       } else {
+           free(seqfile);
+           return NULL;
+       }
     }
 
     /* Use m_getfld to scan sequence file */
@@ -255,7 +261,9 @@ check_folders(struct node **first, struct node **last,
     b.sequences = sequences;
 
     if (folders == NULL) {
-       chdir(m_maildir(""));
+       if (chdir(m_maildir("")) < 0) {
+           advise (m_maildir(""), "chdir");
+       }
        crawl_folders(".", crawl_callback, &b);
     } else {
        fp = fopen(folders, "r");
@@ -362,6 +370,8 @@ doit(char *cur, char *folders, char *sequences[])
                 return prev;
             }
         } else if (run_mode == UNSEEN) {
+            int status;
+
             if (node->n_field == NULL) {
                 continue;
             }
@@ -380,7 +390,10 @@ doit(char *cur, char *folders, char *sequences[])
            /* TODO: Split enough of scan.c out so that we can call it here. */
            command = concat("scan +", node->n_name, " ", sequences_s,
                             (void *)NULL);
-           system(command);
+           status = system(command);
+           if (! WIFEXITED (status)) {
+               adios (command, "system");
+           }
            free(command);
         } else {
             if (node->n_field == NULL) {
@@ -400,8 +413,11 @@ doit(char *cur, char *folders, char *sequences[])
 
     /* If we're fnext, we haven't checked the last node yet.  If it's the
      * current folder, return the first node. */
-    if (run_mode == FNEXT && strcmp(last->n_name, cur) == 0) {
-        return first;
+    if (run_mode == FNEXT) {
+       assert(last != NULL);
+       if (strcmp(last->n_name, cur) == 0) {
+            return first;
+       }
     }
 
     if (run_mode == NEW) {