Error if -q is given more than once.
[exim.git] / src / src / exim.c
index 9cef9226b52e395dc30fa6f3e3b87aa94446b2f5..6f53c1ffbf433f2ecefe849ae5958d5ccdf14299 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/exim.c,v 1.46 2006/10/24 12:56:06 ph10 Exp $ */
+/* $Cambridge: exim/src/src/exim.c,v 1.49 2006/11/13 11:56:41 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -2646,6 +2646,11 @@ for (i = 1; i < argc; i++)
 
     case 'q':
     receiving_message = FALSE;
+    if (queue_interval >= 0)
+      {
+      fprintf(stderr, "exim: -q specified more than once\n");
+      exit(EXIT_FAILURE);
+      }
 
     /* -qq...: Do queue runs in a 2-stage manner */
 
@@ -2754,7 +2759,6 @@ for (i = 1; i < argc; i++)
         }
       }
     else deliver_selectstring = argrest;
-    if (queue_interval < 0) queue_interval = 0;
     break;
 
 
@@ -2802,7 +2806,6 @@ for (i = 1; i < argc; i++)
         }
       }
     else deliver_selectstring_sender = argrest;
-    if (queue_interval < 0) queue_interval = 0;
     break;
 
     /* -Tqt is an option that is exclusively for use by the testing suite.
@@ -2893,6 +2896,12 @@ for (i = 1; i < argc; i++)
   }
 
 
+/* If -R or -S have been specified without -q, assume a single queue run. */
+
+if ((deliver_selectstring != NULL || deliver_selectstring_sender != NULL) &&
+  queue_interval < 0) queue_interval = 0;
+
+
 /* Arguments have been processed. Check for incompatibilities. */
 
 END_ARG:
@@ -4235,8 +4244,10 @@ if (expansion_test)
     filter_test = FTEST_USER;      /* Fudge to make it look like filter test */
     message_ended = END_NOTENDED;
     read_message_body(receive_msg(extract_recipients));
+    message_linecount += body_linecount;
     (void)dup2(save_stdin, 0);
     (void)close(save_stdin);
+    clearerr(stdin);               /* Required by Darwin */
     }
 
   /* Allow $recipients for this testing */