tidying
[exim.git] / src / src / filter.c
index 530d772b37eeca241f689e30ae72f8e315c0c05c..18567f17c32d43f9fa0df4e8c0b07636881a4b22 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2023 */
 /* Copyright (c) University of Cambridge 1995 - 2018 */
 /* See the file NOTICE for conditions of use and distribution. */
 /* SPDX-License-Identifier: GPL-2.0-or-later */
@@ -194,8 +194,7 @@ static int cond_types[] = { cond_BEGINS, cond_BEGINS, cond_CONTAINS,
   cond_above, cond_begins, cond_begins, cond_below, cond_contains,
   cond_contains, cond_ends, cond_ends, cond_is, cond_matches, cond_matches };
 
-/* Command identities: must be kept in step with the list of command words
-and the list of expanded argument counts which follow. */
+/* Command identities */
 
 enum { add_command, defer_command, deliver_command, elif_command, else_command,
        endif_command, finish_command, fail_command, freeze_command,
@@ -203,10 +202,28 @@ enum { add_command, defer_command, deliver_command, elif_command, else_command,
        mail_command, noerror_command, pipe_command, save_command, seen_command,
        testprint_command, unseen_command, vacation_command };
 
-static const char *command_list[] = {
-  "add",     "defer",   "deliver", "elif", "else",      "endif",    "finish",
-  "fail",    "freeze",  "headers", "if",   "logfile",   "logwrite", "mail",
-  "noerror", "pipe",    "save",    "seen", "testprint", "unseen",   "vacation"
+static const char * command_list[] = {
+  [add_command] =      "add",
+  [defer_command] =    "defer",
+  [deliver_command] =  "deliver",
+  [elif_command] =     "elif",
+  [else_command] =     "else",
+  [endif_command] =    "endif",
+  [finish_command] =   "finish",
+  [fail_command] =     "fail",
+  [freeze_command] =   "freeze",
+  [headers_command] =  "headers",
+  [if_command] =       "if",
+  [logfile_command] =  "logfile",
+  [logwrite_command] = "logwrite",
+  [mail_command] =     "mail",
+  [noerror_command] =  "noerror",
+  [pipe_command] =     "pipe",
+  [save_command] =     "save",
+  [seen_command] =     "seen",
+  [testprint_command] =        "testprint",
+  [unseen_command] =   "unseen",
+  [vacation_command] = "vacation"
 };
 
 static int command_list_count = nelem(command_list);
@@ -215,27 +232,27 @@ static int command_list_count = nelem(command_list);
 If the top bit is set, it means that the default for the command is "seen". */
 
 static uschar command_exparg_count[] = {
-      2, /* add */
-      1, /* defer */
-  128+2, /* deliver */
-      0, /* elif */
-      0, /* else */
-      0, /* endif */
-      0, /* finish */
-      1, /* fail */
-      1, /* freeze */
-      1, /* headers */
-      0, /* if */
-      1, /* logfile */
-      1, /* logwrite */
-      MAILARGS_STRING_COUNT, /* mail */
-      0, /* noerror */
-  128+0, /* pipe */
-  128+1, /* save */
-      0, /* seen */
-      1, /* testprint */
-      0, /* unseen */
-      MAILARGS_STRING_COUNT /* vacation */
+  [add_command] =      2,
+  [defer_command] =    1,
+  [deliver_command] =  128+2,
+  [elif_command] =     0,
+  [else_command] =     0,
+  [endif_command] =    0,
+  [finish_command] =   0,
+  [fail_command] =     1,
+  [freeze_command] =   1,
+  [headers_command] =  1,
+  [if_command] =       0,
+  [logfile_command] =  1,
+  [logwrite_command] = 1,
+  [mail_command] =     MAILARGS_STRING_COUNT,
+  [noerror_command] =  0,
+  [pipe_command] =     128+0,
+  [save_command] =     128+1,
+  [seen_command] =     0,
+  [testprint_command] =        1,
+  [unseen_command] =   0,
+  [vacation_command] = MAILARGS_STRING_COUNT
 };
 
 
@@ -259,16 +276,11 @@ nextsigchar(const uschar *ptr, BOOL comment_allowed)
 for (;;)
   {
   while (isspace(*ptr))
-    {
-    if (*ptr == '\n') line_number++;
-    ptr++;
-    }
+    if (*ptr++ == '\n') line_number++;
   if (comment_allowed && *ptr == '#')
-    {
-    while (*(++ptr) != '\n' && *ptr != 0);
-    continue;
-    }
-  else break;
+    while (*++ptr != '\n' && *ptr) ;
+  else
+    break;
   }
 return ptr;
 }
@@ -294,18 +306,19 @@ Returns:    pointer to the next significant character after the word
 static const uschar *
 nextword(const uschar *ptr, uschar *buffer, int size, BOOL bracket)
 {
-uschar *bp = buffer;
-while (*ptr != 0 && !isspace(*ptr) &&
+uschar * bp = buffer;
+while (*ptr && !isspace(*ptr) &&
        (!bracket || (*ptr != '(' && *ptr != ')')))
-  {
-  if (bp - buffer < size - 1) *bp++ = *ptr++; else
+  if (bp - buffer < size - 1)
+    *bp++ = *ptr++;
+  else
     {
     *error_pointer = string_sprintf("word is too long in line %d of "
       "filter file (max = %d chars)", line_number, size);
     break;
     }
-  }
-*bp = 0;
+
+*bp = '\0';
 return nextsigchar(ptr, TRUE);
 }
 
@@ -393,8 +406,8 @@ int value, count;
 if (sscanf(CS s, "%i%n", &value, &count) != 1) return 0;
 if (tolower(s[count]) == 'k') { value *= 1024; count++; }
 if (tolower(s[count]) == 'm') { value *= 1024*1024; count++; }
-while (isspace((s[count]))) count++;
-if (s[count] != 0) return 0;
+while (isspace(s[count])) count++;
+if (s[count]) return 0;
 *ok = TRUE;
 return value;
 }
@@ -671,8 +684,8 @@ for (;;)
       {
 //      if (toplevel) *saveptr = 0;
 //      else
-   if (!toplevel)
-      *error_pointer = string_sprintf("missing \")\" at end of "
+      if (!toplevel)
+        *error_pointer = string_sprintf("missing \")\" at end of "
           "condition near line %d of filter file", line_number);
       break;
       }
@@ -1463,22 +1476,21 @@ switch (c->type)
     testing and verification. */
 
   case cond_errormsg:
-    yield = message_id[0] != 0 &&
-      (sender_address == NULL || sender_address[0] == 0);
+    yield = message_id[0] && (!sender_address || !*sender_address);
     break;
 
     /* Only FALSE if a message is actually being processed; TRUE for address
     and filter testing and verification. */
 
   case cond_firsttime:
-    yield = filter_test != FTEST_NONE || message_id[0] == 0 || f.deliver_firsttime;
+    yield = filter_test != FTEST_NONE || !message_id[0] || f.deliver_firsttime;
     break;
 
     /* Only TRUE if a message is actually being processed; FALSE for address
     testing and verification. */
 
   case cond_manualthaw:
-    yield = message_id[0] != 0 && f.deliver_manual_thaw;
+    yield = message_id[0] && f.deliver_manual_thaw;
     break;
 
     /* The foranyaddress condition loops through a list of addresses */
@@ -1990,8 +2002,7 @@ while (commands)
 
        if (subtype == TRUE)
          {
-         while (isspace(*s)) s++;
-         if (*s)
+         if (Uskip_whitespace(&s))
            {
            header_add(htype_other, "%s%s", s,
              s[Ustrlen(s)-1] == '\n' ? "" : "\n");
@@ -2210,7 +2221,7 @@ while (commands)
          gstring * log_addr = NULL;
 
          if (!to) to = expand_string(US"$reply_address");
-         while (isspace(*to)) to++;
+         Uskip_whitespace(&to);
 
          for (tt = to; *tt; tt++)     /* Get rid of newlines */
            if (*tt == '\n')
@@ -2282,7 +2293,7 @@ while (commands)
            /* Move on past this address */
 
            tt = ss + (*ss ? 1 : 0);
-           while (isspace(*tt)) tt++;
+           Uskip_whitespace(&tt);
            }
 
          if (log_addr)
@@ -2596,3 +2607,5 @@ return yield;
 
 
 /* End of filter.c */
+/* vi: aw ai sw=2
+*/