Added lots of "(void)" casts to standard function calls.
[exim.git] / src / src / rda.c
index 9ba95c8312865e42e64f1693e032b68d0aa13b49..06eff227e689d6c253e90cfe6da411f4b5bbc917 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/rda.c,v 1.3 2005/01/04 10:00:42 ph10 Exp $ */
+/* $Cambridge: exim/src/src/rda.c,v 1.8 2005/06/27 14:29:43 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -299,23 +299,17 @@ if (fread(filebuf, 1, statbuf.st_size, fwd) != statbuf.st_size)
   }
 filebuf[statbuf.st_size] = 0;
 
   }
 filebuf[statbuf.st_size] = 0;
 
-/* Don't pass statbuf.st_size directly to debug_printf. On some systems it
-is a long, which may not be the same as an int. */
-
 DEBUG(D_route)
 DEBUG(D_route)
-  {
-  int size = (int)statbuf.st_size;
-  debug_printf("%d bytes read from %s\n", size, filename);
-  }
+  debug_printf(OFF_T_FMT " bytes read from %s\n", statbuf.st_size, filename);
 
 
-fclose(fwd);
+(void)fclose(fwd);
 return filebuf;
 
 /* Return an error: the string is already set up. */
 
 ERROR_RETURN:
 *yield = FF_ERROR;
 return filebuf;
 
 /* Return an error: the string is already set up. */
 
 ERROR_RETURN:
 *yield = FF_ERROR;
-fclose(fwd);
+(void)fclose(fwd);
 return NULL;
 }
 
 return NULL;
 }
 
@@ -333,6 +327,8 @@ Arguments:
   options                   the options bits
   include_directory         restrain to this directory
   sieve_vacation_directory  passed to sieve_interpret
   options                   the options bits
   include_directory         restrain to this directory
   sieve_vacation_directory  passed to sieve_interpret
+  sieve_useraddress         passed to sieve_interpret
+  sieve_subaddress          passed to sieve_interpret
   generated                 where to hang generated addresses
   error                     for error messages
   eblockp                   for details of skipped syntax errors
   generated                 where to hang generated addresses
   error                     for error messages
   eblockp                   for details of skipped syntax errors
@@ -348,7 +344,8 @@ Returns:                    a suitable return for rda_interpret()
 
 static int
 rda_extract(redirect_block *rdata, int options, uschar *include_directory,
 
 static int
 rda_extract(redirect_block *rdata, int options, uschar *include_directory,
-  uschar *sieve_vacation_directory, address_item **generated, uschar **error,
+  uschar *sieve_vacation_directory, uschar *sieve_useraddress,
+  uschar *sieve_subaddress, address_item **generated, uschar **error,
   error_block **eblockp, int *filtertype)
 {
 uschar *data;
   error_block **eblockp, int *filtertype)
 {
 uschar *data;
@@ -378,7 +375,7 @@ if (*filtertype != FILTER_FORWARD)
     (*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve");
 
   /* RDO_FILTER is an "allow" bit */
     (*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve");
 
   /* RDO_FILTER is an "allow" bit */
-   
+
   if ((options & RDO_FILTER) == 0)
     {
     *error = US"filtering not enabled";
   if ((options & RDO_FILTER) == 0)
     {
     *error = US"filtering not enabled";
@@ -388,18 +385,18 @@ if (*filtertype != FILTER_FORWARD)
   expand_forbid =
     (expand_forbid & ~RDO_FILTER_EXPANSIONS) |
     (options & RDO_FILTER_EXPANSIONS);
   expand_forbid =
     (expand_forbid & ~RDO_FILTER_EXPANSIONS) |
     (options & RDO_FILTER_EXPANSIONS);
-  
+
   /* RDO_{EXIM,SIEVE}_FILTER are forbid bits */
   /* RDO_{EXIM,SIEVE}_FILTER are forbid bits */
-   
+
   if (*filtertype == FILTER_EXIM)
     {
     if ((options & RDO_EXIM_FILTER) != 0)
       {
       *error = US"Exim filtering not enabled";
       return FF_ERROR;
   if (*filtertype == FILTER_EXIM)
     {
     if ((options & RDO_EXIM_FILTER) != 0)
       {
       *error = US"Exim filtering not enabled";
       return FF_ERROR;
-      }    
+      }
     frc = filter_interpret(data, options, generated, error);
     frc = filter_interpret(data, options, generated, error);
-    }  
+    }
   else
     {
     if ((options & RDO_SIEVE_FILTER) != 0)
   else
     {
     if ((options & RDO_SIEVE_FILTER) != 0)
@@ -407,9 +404,9 @@ if (*filtertype != FILTER_FORWARD)
       *error = US"Sieve filtering not enabled";
       return FF_ERROR;
       }
       *error = US"Sieve filtering not enabled";
       return FF_ERROR;
       }
-    frc = sieve_interpret(data, options, sieve_vacation_directory, generated, 
-      error);
-    }   
+    frc = sieve_interpret(data, options, sieve_vacation_directory,
+      sieve_useraddress, sieve_subaddress, generated, error);
+    }
 
   expand_forbid = old_expand_forbid;
   return frc;
 
   expand_forbid = old_expand_forbid;
   return frc;
@@ -449,8 +446,8 @@ static void
 rda_write_string(int fd, uschar *s)
 {
 int len = (s == NULL)? 0 : Ustrlen(s) + 1;
 rda_write_string(int fd, uschar *s)
 {
 int len = (s == NULL)? 0 : Ustrlen(s) + 1;
-write(fd, &len, sizeof(int));
-if (s != NULL) write(fd, s, len);
+(void)write(fd, &len, sizeof(int));
+if (s != NULL) (void)write(fd, s, len);
 }
 
 
 }
 
 
@@ -515,6 +512,8 @@ Arguments:
                               plus ENOTDIR and EACCES handling bits
   include_directory         restrain :include: to this directory
   sieve_vacation_directory  directory passed to sieve_interpret()
                               plus ENOTDIR and EACCES handling bits
   include_directory         restrain :include: to this directory
   sieve_vacation_directory  directory passed to sieve_interpret()
+  sieve_useraddress         passed to sieve_interpret
+  sieve_subaddress          passed to sieve_interpret
   ugid                      uid/gid to run under - if NULL, no change
   generated                 where to hang generated addresses, initially NULL
   error                     pointer for error message
   ugid                      uid/gid to run under - if NULL, no change
   generated                 where to hang generated addresses, initially NULL
   error                     pointer for error message
@@ -541,7 +540,8 @@ Returns:        values from extraction function, or FF_NONEXIST:
 
 int
 rda_interpret(redirect_block *rdata, int options, uschar *include_directory,
 
 int
 rda_interpret(redirect_block *rdata, int options, uschar *include_directory,
-  uschar *sieve_vacation_directory, ugid_block *ugid, address_item **generated,
+  uschar *sieve_vacation_directory, uschar *sieve_useraddress,
+  uschar *sieve_subaddress, ugid_block *ugid, address_item **generated,
   uschar **error, error_block **eblockp, int *filtertype, uschar *rname)
 {
 int fd, rc, pfd[2];
   uschar **error, error_block **eblockp, int *filtertype, uschar *rname)
 {
 int fd, rc, pfd[2];
@@ -586,7 +586,8 @@ if (!ugid->uid_set ||                         /* Either there's no uid, or */
      Ustrstr(data, ":include:") == NULL))     /* and there's no :include: */
   {
   return rda_extract(rdata, options, include_directory,
      Ustrstr(data, ":include:") == NULL))     /* and there's no :include: */
   {
   return rda_extract(rdata, options, include_directory,
-    sieve_vacation_directory, generated, error, eblockp, filtertype);
+    sieve_vacation_directory, sieve_useraddress, sieve_subaddress,
+    generated, error, eblockp, filtertype);
   }
 
 /* We need to run the processing code in a sub-process. However, if we can
   }
 
 /* We need to run the processing code in a sub-process. However, if we can
@@ -614,7 +615,7 @@ if ((pid = fork()) == 0)
   header_line *waslast = header_last;   /* Save last header */
 
   fd = pfd[pipe_write];
   header_line *waslast = header_last;   /* Save last header */
 
   fd = pfd[pipe_write];
-  close(pfd[pipe_read]);
+  (void)close(pfd[pipe_read]);
   exim_setugid(ugid->uid, ugid->gid, FALSE, rname);
 
   /* Addresses can get rewritten in filters; if we are not root or the exim
   exim_setugid(ugid->uid, ugid->gid, FALSE, rname);
 
   /* Addresses can get rewritten in filters; if we are not root or the exim
@@ -631,13 +632,14 @@ if ((pid = fork()) == 0)
   /* Now do the business */
 
   yield = rda_extract(rdata, options, include_directory,
   /* Now do the business */
 
   yield = rda_extract(rdata, options, include_directory,
-    sieve_vacation_directory, generated, error, eblockp, filtertype);
+    sieve_vacation_directory, sieve_useraddress, sieve_subaddress, generated,
+    error, eblockp, filtertype);
 
   /* Pass back whether it was a filter, and the return code and any overall
   error text via the pipe. */
 
 
   /* Pass back whether it was a filter, and the return code and any overall
   error text via the pipe. */
 
-  write(fd, filtertype, sizeof(int));
-  write(fd, &yield, sizeof(int));
+  (void)write(fd, filtertype, sizeof(int));
+  (void)write(fd, &yield, sizeof(int));
   rda_write_string(fd, *error);
 
   /* Pass back the contents of any syntax error blocks if we have a pointer */
   rda_write_string(fd, *error);
 
   /* Pass back the contents of any syntax error blocks if we have a pointer */
@@ -663,10 +665,10 @@ if ((pid = fork()) == 0)
     header_line *h;
     for (h = header_list; h != waslast->next; i++, h = h->next)
       {
     header_line *h;
     for (h = header_list; h != waslast->next; i++, h = h->next)
       {
-      if (h->type == htype_old) write(fd, &i, sizeof(i));
+      if (h->type == htype_old) (void)write(fd, &i, sizeof(i));
       }
     i = -1;
       }
     i = -1;
-    write(fd, &i, sizeof(i));
+    (void)write(fd, &i, sizeof(i));
 
     while (waslast != header_last)
       {
 
     while (waslast != header_last)
       {
@@ -674,7 +676,7 @@ if ((pid = fork()) == 0)
       if (waslast->type != htype_old)
         {
         rda_write_string(fd, waslast->text);
       if (waslast->type != htype_old)
         {
         rda_write_string(fd, waslast->text);
-        write(fd, &(waslast->type), sizeof(waslast->type));
+        (void)write(fd, &(waslast->type), sizeof(waslast->type));
         }
       }
     rda_write_string(fd, NULL);    /* Indicates end of added headers */
         }
       }
     rda_write_string(fd, NULL);    /* Indicates end of added headers */
@@ -682,7 +684,7 @@ if ((pid = fork()) == 0)
 
   /* Write the contents of the $n variables */
 
 
   /* Write the contents of the $n variables */
 
-  write(fd, filter_n, sizeof(filter_n));
+  (void)write(fd, filter_n, sizeof(filter_n));
 
   /* If the result was DELIVERED or NOTDELIVERED, we pass back the generated
   addresses, and their associated information, through the pipe. This is
 
   /* If the result was DELIVERED or NOTDELIVERED, we pass back the generated
   addresses, and their associated information, through the pipe. This is
@@ -699,8 +701,8 @@ if ((pid = fork()) == 0)
       int reply_options = 0;
 
       rda_write_string(fd, addr->address);
       int reply_options = 0;
 
       rda_write_string(fd, addr->address);
-      write(fd, &(addr->mode), sizeof(addr->mode));
-      write(fd, &(addr->flags), sizeof(addr->flags));
+      (void)write(fd, &(addr->mode), sizeof(addr->mode));
+      (void)write(fd, &(addr->flags), sizeof(addr->flags));
       rda_write_string(fd, addr->p.errors_address);
 
       if (addr->pipe_expandn != NULL)
       rda_write_string(fd, addr->p.errors_address);
 
       if (addr->pipe_expandn != NULL)
@@ -712,15 +714,15 @@ if ((pid = fork()) == 0)
       rda_write_string(fd, NULL);
 
       if (addr->reply == NULL)
       rda_write_string(fd, NULL);
 
       if (addr->reply == NULL)
-        write(fd, &reply_options, sizeof(int));    /* 0 means no reply */
+        (void)write(fd, &reply_options, sizeof(int));    /* 0 means no reply */
       else
         {
         reply_options |= REPLY_EXISTS;
         if (addr->reply->file_expand) reply_options |= REPLY_EXPAND;
         if (addr->reply->return_message) reply_options |= REPLY_RETURN;
       else
         {
         reply_options |= REPLY_EXISTS;
         if (addr->reply->file_expand) reply_options |= REPLY_EXPAND;
         if (addr->reply->return_message) reply_options |= REPLY_RETURN;
-        write(fd, &reply_options, sizeof(int));
-        write(fd, &(addr->reply->expand_forbid), sizeof(int));
-        write(fd, &(addr->reply->once_repeat), sizeof(time_t));
+        (void)write(fd, &reply_options, sizeof(int));
+        (void)write(fd, &(addr->reply->expand_forbid), sizeof(int));
+        (void)write(fd, &(addr->reply->once_repeat), sizeof(time_t));
         rda_write_string(fd, addr->reply->to);
         rda_write_string(fd, addr->reply->cc);
         rda_write_string(fd, addr->reply->bcc);
         rda_write_string(fd, addr->reply->to);
         rda_write_string(fd, addr->reply->cc);
         rda_write_string(fd, addr->reply->bcc);
@@ -740,7 +742,7 @@ if ((pid = fork()) == 0)
 
   /* OK, this process is now done. Must use _exit() and not exit() !! */
 
 
   /* OK, this process is now done. Must use _exit() and not exit() !! */
 
-  close(fd);
+  (void)close(fd);
   _exit(0);
   }
 
   _exit(0);
   }
 
@@ -753,7 +755,7 @@ if (pid < 0)
 writing end must be closed first, as otherwise read() won't return zero on an
 empty pipe. Afterwards, close the reading end. */
 
 writing end must be closed first, as otherwise read() won't return zero on an
 empty pipe. Afterwards, close the reading end. */
 
-close(pfd[pipe_write]);
+(void)close(pfd[pipe_write]);
 
 /* Read initial data, including yield and contents of *error */
 
 
 /* Read initial data, including yield and contents of *error */
 
@@ -938,7 +940,7 @@ else if (status != 0)
   }
 
 FINAL_EXIT:
   }
 
 FINAL_EXIT:
-close(fd);
+(void)close(fd);
 signal(SIGCHLD, oldsignal);   /* restore */
 return yield;
 
 signal(SIGCHLD, oldsignal);   /* restore */
 return yield;