Compiler masochism compliance.
authorPhil Pennock <pdp@exim.org>
Tue, 22 Mar 2011 09:36:24 +0000 (05:36 -0400)
committerPhil Pennock <pdp@exim.org>
Tue, 22 Mar 2011 09:36:24 +0000 (05:36 -0400)
Be able to build most of Exim with:
  -Werror -Wwrite-strings -Wunused-function -Waddress -Wpointer-sign
  -Wformat -Wuninitialized -Winit-self

Skipped a change to auth-spa which I was uncertain of. That is not
the most readable of code.

Temporarily gave up on src/src/pdkim/pdkim.c, as header_name_match()
treats the second param as const or not depending on the third param.
(I hacked the build-*/pdkim/Makefile to continue past this)

Much of this change is const propagation.

35 files changed:
src/src/buildconfig.c
src/src/debug.c
src/src/directory.c
src/src/drtables.c
src/src/exim.c
src/src/exim_dbmbuild.c
src/src/exim_lock.c
src/src/expand.c
src/src/filter.c
src/src/functions.h
src/src/globals.c
src/src/globals.h
src/src/header.c
src/src/local_scan.h
src/src/log.c
src/src/lookups/dnsdb.c
src/src/lookups/lf_check_file.c
src/src/lookups/lf_functions.h
src/src/malware.c
src/src/mime.c
src/src/moan.c
src/src/os.c
src/src/osfunctions.h
src/src/pdkim/bignum.c
src/src/pdkim/bignum.h
src/src/pdkim/pdkim.c
src/src/rewrite.c
src/src/smtp_in.c
src/src/smtp_out.c
src/src/string.c
src/src/transport.c
src/src/transports/appendfile.c
src/src/transports/lmtp.c
src/src/transports/tf_maildir.c
src/src/verify.c

index 49d8c411ac1cbd904a82ecad8c2f164d0e335d09..c012fb7d40a70f106ecccd62ecd56a5312327269 100644 (file)
@@ -42,16 +42,16 @@ normally called independently. */
 #include <grp.h>
 
 typedef struct {
-  char *name;
+  const char *name;
   int *flag;
 } have_item;
 
 typedef struct {
-  char *name;
+  const char *name;
   char *data;
 } save_item;
 
-static char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB" };
+static const char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB" };
 
 static int have_ipv6 = 0;
 static int have_iconv = 0;
@@ -557,9 +557,9 @@ while (fgets(buffer, sizeof(buffer), base) != NULL)
     int isgroup = name[10] == 'G';
     uid_t uid = 0;
     gid_t gid = 0;
-    char *s;
-    char *username = NULL;
-    char *user = getenv(name);
+    const char *s;
+    const char *username = NULL;
+    const char *user = getenv(name);
 
     if (user == NULL) user = "";
     while (isspace((unsigned char)(*user))) user++;
@@ -600,8 +600,7 @@ while (fgets(buffer, sizeof(buffer), base) != NULL)
       while (isspace(*user)) user++;
       username = user;
       }
-
-    else if (isgroup)
+else if (isgroup)
       {
       struct group *gr = getgrnam(user);
       if (gr == NULL)
index 71e8c420d24c35ca0b3dd93e9cb9be5409a08cf6..4b08f654c40898162a2343eec315451c1a31586e 100644 (file)
@@ -148,7 +148,7 @@ get interleaved. Since some calls to debug_printf() don't end with newline,
 we save up the text until we do get the newline. */
 
 void
-debug_printf(char *format, ...)
+debug_printf(const char *format, ...)
 {
 va_list ap;
 va_start(ap, format);
@@ -157,7 +157,7 @@ va_end(ap);
 }
 
 void
-debug_vprintf(char *format, va_list ap)
+debug_vprintf(const char *format, va_list ap)
 {
 if (debug_file == NULL) return;
 
index 7aa137c8afef8db00b3f4c97406f9549ecfebc6f..d6cac2cb8096d6dce6042890f6203054bee17bba 100644 (file)
@@ -36,10 +36,12 @@ Returns:    panic on failure if panic is set; otherwise return FALSE;
 */
 
 BOOL
-directory_make(uschar *parent, uschar *name, int mode, BOOL panic)
+directory_make(const uschar *parent, const uschar *name,
+               int mode, BOOL panic)
 {
 BOOL use_chown = parent == spool_directory && geteuid() == root_uid;
-uschar *p, *slash;
+uschar *p;
+const uschar *slash;
 int c = 1;
 struct stat statbuf;
 uschar buffer[256];
@@ -47,7 +49,7 @@ uschar buffer[256];
 if (parent == NULL)
   {
   p = buffer + 1;
-  slash = parent = US"";
+  slash = parent = CUS"";
   }
 else
   {
index 183edf321ba20ab3655d01306637209d646146a4..85b6efb2f04d3c8e37ec1677268034c43b67db5e 100644 (file)
@@ -544,7 +544,7 @@ void init_lookup_list(void)
         int pathnamelen = len + (int)strlen(LOOKUP_MODULE_DIR) + 2;
         void *dl;
         struct lookup_module_info *info;
-        char *errormsg;
+        const char *errormsg;
 
         /* SRH: am I being paranoid here or what? */
         if (pathnamelen > big_buffer_size) {
index c368e590695f312a369d4b6ebcf14fbeab17d683..f086a00e852028c56c46649449c7db6ab426343c 100644 (file)
@@ -360,7 +360,7 @@ Returns:   nothing
 */
 
 void
-set_process_info(char *format, ...)
+set_process_info(const char *format, ...)
 {
 int len;
 va_list ap;
@@ -397,7 +397,7 @@ Returns:          the fopened FILE or NULL
 */
 
 FILE *
-modefopen(uschar *filename, char *options, mode_t mode)
+modefopen(const uschar *filename, const char *options, mode_t mode)
 {
 mode_t saved_umask = umask(0777);
 FILE *f = Ufopen(filename, options);
@@ -1038,8 +1038,8 @@ Returns:            the dlopen handle or NULL on failure
 */
 
 static void *
-set_readline(char * (**fn_readline_ptr)(char *),
-             char * (**fn_addhist_ptr)(char *))
+set_readline(char * (**fn_readline_ptr)(const char *),
+             void   (**fn_addhist_ptr)(const char *))
 {
 void *dlhandle;
 void *dlhandle_curses = dlopen("libcurses.so", RTLD_GLOBAL|RTLD_LAZY);
@@ -1049,8 +1049,12 @@ if (dlhandle_curses != NULL) dlclose(dlhandle_curses);
 
 if (dlhandle != NULL)
   {
-  *fn_readline_ptr = (char *(*)(char*))dlsym(dlhandle, "readline");
-  *fn_addhist_ptr = (char *(*)(char*))dlsym(dlhandle, "add_history");
+  /* Checked manual pages; at least in GNU Readline 6.1, the prototypes are:
+   *   char * readline (const char *prompt);
+   *   void add_history (const char *string);
+   */
+  *fn_readline_ptr = (char *(*)(const char*))dlsym(dlhandle, "readline");
+  *fn_addhist_ptr = (void(*)(const char*))dlsym(dlhandle, "add_history");
   }
 else
   {
@@ -1080,7 +1084,7 @@ Returns:        pointer to dynamic memory, or NULL at end of file
 */
 
 static uschar *
-get_stdinput(char *(*fn_readline)(char *), char *(*fn_addhist)(char *))
+get_stdinput(char *(*fn_readline)(const char *), void(*fn_addhist)(const char *))
 {
 int i;
 int size = 0;
@@ -4555,8 +4559,8 @@ if (expansion_test)
 
   else
     {
-    char *(*fn_readline)(char *) = NULL;
-    char *(*fn_addhist)(char *) = NULL;
+    char *(*fn_readline)(const char *) = NULL;
+    void (*fn_addhist)(const char *) = NULL;
 
     #ifdef USE_READLINE
     void *dlhandle = set_readline(&fn_readline, &fn_addhist);
index 4ff724cdcf6a05746be2f7ba11c9f60fbb4d6eac..386c9b4a482300a31b049a5b60dc40f36f82f5d7 100644 (file)
@@ -39,7 +39,7 @@ characters. */
 /* This is global because it's defined in the headers and compilers grumble
 if it is made static. */
 
-uschar *hex_digits = US"0123456789abcdef";
+const uschar *hex_digits = CUS"0123456789abcdef";
 
 
 #ifdef STRERROR_FROM_ERRLIST
index 0c60ce107c5ae8c8095f4fc62185d788f1940b70..f783a2bcf781cbcb8067105f1437ff955824767f 100644 (file)
@@ -183,7 +183,8 @@ BOOL quiet = FALSE;
 BOOL restore_times = FALSE;
 char *filename;
 char *lockname = NULL, *hitchname = NULL;
-char *primary_hostname, *command;
+char *primary_hostname;
+const char *command;
 struct utsname s;
 char buffer[256];
 char tempname[256];
index 1fd4335da70c74d1b2584f26e54e96f8ee5a0da9..bf425ae81ed6a031378a6f1a3bcb9d48d953d061 100644 (file)
@@ -328,9 +328,9 @@ enum {
 /* Type for main variable table */
 
 typedef struct {
-  char *name;
-  int   type;
-  void *value;
+  const char *name;
+  int         type;
+  void       *value;
 } var_entry;
 
 /* Type for entries pointing to address/length pairs. Not currently
@@ -632,9 +632,9 @@ static BOOL malformed_header;
 
 /* For textual hashes */
 
-static char *hashcodes = "abcdefghijklmnopqrtsuvwxyz"
-                         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-                         "0123456789";
+static const char *hashcodes = "abcdefghijklmnopqrtsuvwxyz"
+                               "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                               "0123456789";
 
 enum { HMAC_MD5, HMAC_SHA1 };
 
index b1fcd40b0cef7dd260e8e5c875d16e0df5189c44..fd2f7ced1e378aa8cceb12bba1255bae47a83ef7 100644 (file)
@@ -76,8 +76,8 @@ permitted to include \n followed by white space) first, and then the body text
 one (it can have \n anywhere). Then the file names and once_repeat, which may
 not contain \n. */
 
-static char *mailargs[] = {  /* "to" must be first, and */
-  "to",                      /* "cc" and "bcc" must follow */
+static const char *mailargs[] = {  /* "to" must be first, and */
+  "to",                            /* "cc" and "bcc" must follow */
   "cc",
   "bcc",
   "from",
@@ -146,14 +146,14 @@ enum { cond_and, cond_or, cond_personal, cond_begins, cond_BEGINS,
        cond_above, cond_below, cond_errormsg, cond_firsttime,
        cond_manualthaw, cond_foranyaddress };
 
-static char *cond_names[] = {
+static const char *cond_names[] = {
   "and", "or", "personal",
   "begins", "BEGINS", "ends", "ENDS",
   "is", "IS", "matches", "MATCHES", "contains",
   "CONTAINS", "delivered", "above", "below", "error_message",
   "first_delivery", "manually_thawed", "foranyaddress" };
 
-static char *cond_not_names[] = {
+static const char *cond_not_names[] = {
   "", "", "not personal",
   "does not begin", "does not BEGIN",
   "does not end", "does not END",
@@ -165,7 +165,7 @@ static char *cond_not_names[] = {
 /* Tables of binary condition words and their corresponding types. Not easy
 to amalgamate with the above because of the different variants. */
 
-static char *cond_words[] = {
+static const char *cond_words[] = {
    "BEGIN",
    "BEGINS",
    "CONTAIN",
@@ -203,7 +203,7 @@ 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 char *command_list[] = {
+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"
@@ -777,7 +777,7 @@ Returns:      nothing
 static void
 print_condition(condition_block *c, BOOL toplevel)
 {
-char *name = (c->testfor)? cond_names[c->type] : cond_not_names[c->type];
+const char *name = (c->testfor)? cond_names[c->type] : cond_not_names[c->type];
 switch(c->type)
   {
   case cond_personal:
@@ -800,7 +800,7 @@ switch(c->type)
   case cond_ENDS:
   case cond_above:
   case cond_below:
-  debug_printf("%s %s %s", c->left.u, (char *)name, c->right.u);
+  debug_printf("%s %s %s", c->left.u, name, c->right.u);
   break;
 
   case cond_and:
index 24088727ad0db45bafe447d354f6820a9551c95b..079e8ad142278cf3fc9200e8582510fdedc5cef6 100644 (file)
@@ -77,7 +77,7 @@ extern void    debug_print_argv(uschar **);
 extern void    debug_print_ids(uschar *);
 extern void    debug_print_string(uschar *);
 extern void    debug_print_tree(tree_node *);
-extern void    debug_vprintf(char *, va_list);
+extern void    debug_vprintf(const char *, va_list);
 extern void    decode_bits(unsigned int *, unsigned int *,
                   int, int, uschar *, bit_table *, int, uschar *, int);
 extern address_item *deliver_make_addr(uschar *, BOOL);
@@ -89,7 +89,7 @@ extern void    deliver_succeeded(address_item *);
 #ifdef WITH_OLD_DEMIME
 extern int     demime(uschar **);
 #endif
-extern BOOL    directory_make(uschar *, uschar *, int, BOOL);
+extern BOOL    directory_make(const uschar *, const uschar *, int, BOOL);
 #ifndef DISABLE_DKIM
 extern BOOL    dkim_transport_write_message(address_item *, int, int,
                    int, uschar *, uschar *, uschar *, uschar *, rewrite_rule *,
@@ -121,7 +121,7 @@ extern BOOL    filter_personal(string_item *, BOOL);
 extern BOOL    filter_runtest(int, uschar *, BOOL, BOOL);
 extern BOOL    filter_system_interpret(address_item **, uschar **);
 
-extern void    header_add(int, char *, ...);
+extern void    header_add(int, const char *, ...);
 extern int     header_checkname(header_line *, BOOL);
 extern BOOL    header_match(uschar *, BOOL, BOOL, string_item *, int, ...);
 extern int     host_address_extract_port(uschar *);
@@ -181,12 +181,12 @@ extern int     mime_regex(uschar **);
 extern uschar *moan_check_errorcopy(uschar *);
 extern BOOL    moan_skipped_syntax_errors(uschar *, error_block *, uschar *,
                  BOOL, uschar *);
-extern void    moan_smtp_batch(uschar *, char *, ...);
-extern void    moan_tell_someone(uschar *, address_item *, uschar *, char *,
-                 ...);
+extern void    moan_smtp_batch(uschar *, const char *, ...);
+extern void    moan_tell_someone(uschar *, address_item *,
+                 const uschar *, const char *, ...);
 extern BOOL    moan_to_sender(int, error_block *, header_line *, FILE *, BOOL);
 extern void    moan_write_from(FILE *);
-extern FILE   *modefopen(uschar *, char *, mode_t);
+extern FILE   *modefopen(const uschar *, const char *, mode_t);
 
 extern uschar *parse_extract_address(uschar *, uschar **, int *, int *, int *,
                  BOOL);
@@ -271,7 +271,7 @@ extern int     search_findtype_partial(uschar *, int *, uschar **, int *,
                  int *);
 extern void   *search_open(uschar *, int, int, uid_t *, gid_t *);
 extern void    search_tidyup(void);
-extern void    set_process_info(char *, ...);
+extern void    set_process_info(const char *, ...);
 extern void    sha1_end(sha1 *, const uschar *, int, uschar *);
 extern void    sha1_mid(sha1 *, const uschar *);
 extern void    sha1_start(sha1 *);
@@ -299,7 +299,7 @@ extern int     smtp_setup_msg(void);
 extern BOOL    smtp_start_session(void);
 extern int     smtp_ungetc(int);
 extern BOOL    smtp_verify_helo(void);
-extern int     smtp_write_command(smtp_outblock *, BOOL, char *, ...);
+extern int     smtp_write_command(smtp_outblock *, BOOL, const char *, ...);
 #ifdef WITH_CONTENT_SCAN
 extern int     spam(uschar **);
 extern FILE   *spool_mbox(unsigned long *, uschar *);
@@ -321,18 +321,18 @@ extern uschar *string_copy_malloc(uschar *);
 extern uschar *string_copylc(uschar *);
 extern uschar *string_copynlc(uschar *, int);
 extern uschar *string_dequote(uschar **);
-extern BOOL    string_format(uschar *, int, char *, ...);
+extern BOOL    string_format(uschar *, int, const char *, ...);
 extern uschar *string_format_size(int, uschar *);
 extern int     string_interpret_escape(uschar **);
 extern int     string_is_ip_address(uschar *, int *);
 extern uschar *string_log_address(address_item *, BOOL, BOOL);
 extern uschar *string_nextinlist(uschar **, int *, uschar *, int);
-extern uschar *string_open_failed(int, char *, ...);
+extern uschar *string_open_failed(int, const char *, ...);
 extern uschar *string_printing2(uschar *, BOOL);
 extern uschar *string_split_message(uschar *);
-extern BOOL    string_vformat(uschar *, int, char *, va_list);
-extern int     strcmpic(uschar *, uschar *);
-extern int     strncmpic(uschar *, uschar *, int);
+extern BOOL    string_vformat(uschar *, int, const char *, va_list);
+extern int     strcmpic(const uschar *, const uschar *);
+extern int     strncmpic(const uschar *, const uschar *, int);
 extern uschar *strstric(uschar *, uschar *, BOOL);
 
 extern uschar *tod_stamp(int);
@@ -346,7 +346,7 @@ extern BOOL    transport_set_up_command(uschar ***, uschar *, BOOL, int,
                  address_item *, uschar *, uschar **);
 extern void    transport_update_waiting(host_item *, uschar *);
 extern BOOL    transport_write_block(int, uschar *, int);
-extern BOOL    transport_write_string(int, char *, ...);
+extern BOOL    transport_write_string(int, const char *, ...);
 extern BOOL    transport_write_message(address_item *, int, int, int, uschar *,
                  uschar *, uschar *, uschar *, rewrite_rule *, int);
 extern void    tree_add_duplicate(uschar *, address_item *);
index fe3a2eeb53bb2bddec964fb297fb871a31d96011..7b5a52554371fe0cc4c646ca36a701ec127ede4e 100644 (file)
@@ -633,7 +633,7 @@ uschar *helo_try_verify_hosts  = NULL;
 BOOL    helo_verified          = FALSE;
 BOOL    helo_verify_failed     = FALSE;
 uschar *helo_verify_hosts      = NULL;
-uschar *hex_digits             = US"0123456789abcdef";
+const uschar *hex_digits       = CUS"0123456789abcdef";
 uschar *hold_domains           = NULL;
 BOOL    host_checking          = FALSE;
 BOOL    host_checking_callout  = FALSE;
@@ -787,7 +787,7 @@ uschar *message_reference      = NULL;
 /* MIME ACL expandables */
 #ifdef WITH_CONTENT_SCAN
 int     mime_anomaly_level     = 0;
-uschar *mime_anomaly_text      = NULL;
+const uschar *mime_anomaly_text      = NULL;
 uschar *mime_boundary          = NULL;
 uschar *mime_charset           = NULL;
 uschar *mime_content_description = NULL;
index b0c26c42501d0393d6abf7ef6a783ca4887a42b2..c1806f070e795c5a4a608ac4277235ed362b95bc 100644 (file)
@@ -398,7 +398,7 @@ extern uschar *helo_try_verify_hosts;  /* Soft check HELO argument for these */
 extern BOOL    helo_verified;          /* True if HELO verified */
 extern BOOL    helo_verify_failed;     /* True if attempt failed */
 extern uschar *helo_verify_hosts;      /* Hard check HELO argument for these */
-extern uschar *hex_digits;             /* Used in several places */
+extern const uschar *hex_digits;             /* Used in several places */
 extern uschar *hold_domains;           /* Hold up deliveries to these */
 extern BOOL    host_find_failed_syntax;/* DNS syntax check failure */
 extern BOOL    host_checking_callout;  /* TRUE if real callout wanted */
@@ -489,7 +489,7 @@ extern uschar *message_reference;      /* Reference for error messages */
 /* MIME ACL expandables */
 #ifdef WITH_CONTENT_SCAN
 extern int     mime_anomaly_level;
-extern uschar *mime_anomaly_text;
+extern const uschar *mime_anomaly_text;
 extern uschar *mime_boundary;
 extern uschar *mime_charset;
 extern uschar *mime_content_description;
index 1b6bf56d1d2eba734c1f217b456a8205090f5bc3..36a48b4e7eb193d2d082f4eac476640b237cb878 100644 (file)
@@ -30,7 +30,7 @@ Returns:    TRUE or FALSE
 */
 
 BOOL
-header_testname(header_line *h, uschar *name, int len, BOOL notdel)
+header_testname(header_line *h, const uschar *name, int len, BOOL notdel)
 {
 uschar *tt;
 if (h->type == '*' && notdel) return FALSE;
@@ -46,7 +46,8 @@ return *tt == ':';
    header_testname() above. */
 
 BOOL
-header_testname_incomplete(header_line *h, uschar *name, int len, BOOL notdel)
+header_testname_incomplete(header_line *h, const uschar *name,
+    int len, BOOL notdel)
 {
 if (h->type == '*' && notdel) return FALSE;
 if (h->text == NULL || strncmpic(h->text, name, len) != 0) return FALSE;
@@ -92,7 +93,7 @@ Returns:    nothing
 
 static void
 header_add_backend(BOOL after, uschar *name, BOOL topnot, int type,
-  char *format, va_list ap)
+  const char *format, va_list ap)
 {
 header_line *h, *new;
 header_line **hptr;
@@ -213,7 +214,7 @@ Returns:    nothing
 
 void
 header_add_at_position(BOOL after, uschar *name, BOOL topnot, int type,
-  char *format, ...)
+  const char *format, ...)
 {
 va_list ap;
 va_start(ap, format);
@@ -238,7 +239,7 @@ Returns:    nothing
 */
 
 void
-header_add(int type, char *format, ...)
+header_add(int type, const char *format, ...)
 {
 va_list ap;
 va_start(ap, format);
@@ -264,7 +265,7 @@ Returns:        nothing
 */
 
 void
-header_remove(int occ, uschar *name)
+header_remove(int occ, const uschar *name)
 {
 header_line *h;
 int hcount = 0;
index 1f86c72d32bca5dc7160f1f610bf2f76a3d20d82..ffde0e3ab24b3533cb7bc1f9517cd7affb7173f6 100644 (file)
@@ -117,9 +117,9 @@ typedef struct header_line {
 /* Entries in lists options are in this form. */
 
 typedef struct {
-  char   *name;
-  int     type;
-  void   *value;
+  const char   *name;
+  int           type;
+  void         *value;
 } optionlist;
 
 /*Structure for holding information about an envelope address. The errors_to
@@ -168,14 +168,14 @@ extern int     child_close(pid_t, int);
 extern pid_t   child_open(uschar **, uschar **, int, int *, int *, BOOL);
 extern pid_t   child_open_exim(int *);
 extern pid_t   child_open_exim2(int *, uschar *, uschar *);
-extern void    debug_printf(char *, ...) PRINTF_FUNCTION(1,2);
+extern void    debug_printf(const char *, ...) PRINTF_FUNCTION(1,2);
 extern uschar *expand_string(uschar *);
-extern void    header_add(int, char *, ...);
-extern void    header_add_at_position(BOOL, uschar *, BOOL, int, char *, ...);
-extern void    header_remove(int, uschar *);
-extern BOOL    header_testname(header_line *, uschar *, int, BOOL);
-extern BOOL    header_testname_incomplete(header_line *, uschar *, int, BOOL);
-extern void    log_write(unsigned int, int, char *format, ...);
+extern void    header_add(int, const char *, ...);
+extern void    header_add_at_position(BOOL, uschar *, BOOL, int, const char *, ...);
+extern void    header_remove(int, const uschar *);
+extern BOOL    header_testname(header_line *, const uschar *, int, BOOL);
+extern BOOL    header_testname_incomplete(header_line *, const uschar *, int, BOOL);
+extern void    log_write(unsigned int, int, const char *format, ...);
 extern int     lss_b64decode(uschar *, uschar **);
 extern uschar *lss_b64encode(uschar *, int);
 extern int     lss_match_domain(uschar *, uschar *);
@@ -186,10 +186,10 @@ extern void    receive_add_recipient(uschar *, int);
 extern BOOL    receive_remove_recipient(uschar *);
 extern uschar *rfc2047_decode(uschar *, BOOL, uschar *, int, int *, uschar **);
 extern int     smtp_fflush(void);
-extern void    smtp_printf(char *, ...) PRINTF_FUNCTION(1,2);
-extern void    smtp_vprintf(char *, va_list);
+extern void    smtp_printf(const char *, ...) PRINTF_FUNCTION(1,2);
+extern void    smtp_vprintf(const char *, va_list);
 extern uschar *string_copy(uschar *);
 extern uschar *string_copyn(uschar *, int);
-extern uschar *string_sprintf(char *, ...);
+extern uschar *string_sprintf(const char *, ...);
 
 /* End of local_scan.h */
index 0995621ac62a5edb3a32e24963d16be37ccc9b02..a2c1d44169d7e8b21b40e521544c1cdb9559d14a 100644 (file)
@@ -573,7 +573,7 @@ Returns:    nothing
 */
 
 void
-log_write(unsigned int selector, int flags, char *format, ...)
+log_write(unsigned int selector, int flags, const char *format, ...)
 {
 uschar *ptr;
 int length, rc;
index 5e7c158aa1dda04d70a5f1f37a09a3f6ef47a808..f3aaf52aff965917d795191226fbaac3021a99d3 100644 (file)
@@ -21,7 +21,7 @@ header files. */
 
 /* Table of recognized DNS record types and their integer values. */
 
-static char *type_names[] = {
+static const char *type_names[] = {
   "a",
 #if HAVE_IPV6
   "aaaa",
index b1919a20a7cd08f2d7edc0777799a5960fd9d5cd..1d452599d7078ed638a7c42158321ef4de439479 100644 (file)
@@ -41,7 +41,7 @@ Side effect: sets errno to ERRNO_BADUGID, ERRNO_NOTREGULAR or ERRNO_BADMODE for
 
 int
 lf_check_file(int fd, uschar *filename, int s_type, int modemask, uid_t *owners,
-  gid_t *owngroups, char *type, uschar **errmsg)
+  gid_t *owngroups, const char *type, uschar **errmsg)
 {
 int i;
 struct stat statbuf;
index 64cd0970ea01dd157cb366629094e9b6b46867be..9490b81a844b1148f8786a7d934cc5bfc0399579 100644 (file)
@@ -9,8 +9,8 @@
 
 /* Header for the functions that are shared by the lookups */
 
-extern int     lf_check_file(int, uschar *, int, int, uid_t *, gid_t *, char *,
-                 uschar **);
+extern int     lf_check_file(int, uschar *, int, int, uid_t *, gid_t *,
+                 const char *, uschar **);
 extern uschar *lf_quote(uschar *, uschar *, int, uschar *, int *, int *);
 extern int     lf_sqlperform(uschar *, uschar *, uschar *, uschar *, uschar **,
                  uschar **, BOOL *, int(*)(uschar *, uschar *, uschar **,
index eb0c33cea1efb11aa853129e6ab26ffbae57ad7d..de8d08d195f0a55cbeb5d5807a4d32ae0094f237 100644 (file)
@@ -592,7 +592,7 @@ static int malware_internal(uschar **listptr, uschar *eml_filename, BOOL faking)
       }
     }
     else {
-      char *drweb_s = NULL;
+      const char *drweb_s = NULL;
 
       if (drweb_rc & DERR_READ_ERR) drweb_s = "read error";
       if (drweb_rc & DERR_NOMEMORY) drweb_s = "no memory";
@@ -1910,14 +1910,14 @@ static int mksd_parse_line (char *line)
 static int mksd_scan_packed(int sock, uschar *scan_filename)
 {
   struct iovec iov[3];
-  char *cmd = "MSQ\n";
+  const char *cmd = "MSQ\n";
   uschar av_buffer[1024];
 
-  iov[0].iov_base = cmd;
+  iov[0].iov_base = (void *) cmd;
   iov[0].iov_len = 3;
   iov[1].iov_base = CS scan_filename;
   iov[1].iov_len = Ustrlen(scan_filename);
-  iov[2].iov_base = cmd + 3;
+  iov[2].iov_base = (void *) cmd + 3;
   iov[2].iov_len = 1;
 
   if (mksd_writev (sock, iov, 3) < 0)
index 76783455a8843f174cfd97435950c34f739c392f..8a3d03394be79849447148ebce01580c2b46f10d 100644 (file)
@@ -23,9 +23,9 @@ uschar *mime_current_boundary = NULL;
    give info on detected "problems" in MIME
    encodings. Those are defined in mime.h. */
 
-void mime_set_anomaly(int level, char *text) {
+void mime_set_anomaly(int level, const char *text) {
   mime_anomaly_level = level;
-  mime_anomaly_text = US text;
+  mime_anomaly_text = CUS text;
 }
 
 
index f03eb8db37b43be07b23f8255bdd35520c31b5ab..ff6c3682645733e0b376565d21e046c25b6b99ac 100644 (file)
@@ -437,8 +437,8 @@ Returns:        nothing
 */
 
 void
-moan_tell_someone(uschar *who, address_item *addr, uschar *subject,
-  char *format, ...)
+moan_tell_someone(uschar *who, address_item *addr,
+  const uschar *subject, const char *format, ...)
 {
 FILE *f;
 va_list ap;
@@ -505,7 +505,7 @@ Returns:       does not return; exits from the program
 */
 
 void
-moan_smtp_batch(uschar *cmd_buffer, char *format, ...)
+moan_smtp_batch(uschar *cmd_buffer, const char *format, ...)
 {
 va_list ap;
 int yield = (receive_messagecount > 0)? 1 : 2;
index b8d3693070549cac72f6ca1021ceb6ff7cc128c8..4fa9324d4902b9d6b3c2d52b24aae0792a118fd3 100644 (file)
@@ -167,8 +167,8 @@ that have nothing. It provides a basic translation for the common standard
 signal numbers. I've been extra cautious with the ifdef's here. Probably more
 than is necessary... */
 
-char *
-os_strsignal(int n)
+const char *
+os_strsignal(const int n)
 {
 switch (n)
   {
@@ -284,8 +284,8 @@ switch (n)
 exit codes into text, but this function is implemented this way so that if any
 OS does have such a thing, it could be used instead of this build-in one. */
 
-char *
-os_strexit(int n)
+const char *
+os_strexit(const int n)
 {
 switch (n)
   {
index 67f7b0ebde3d5f58402d8b3706467f1ad6369c9f..19b5808607023f77b20ac0234e78baf1893273a6 100644 (file)
@@ -14,10 +14,10 @@ that uses a type that isn't defined for them. */
 extern ip_address_item *os_common_find_running_interfaces(void);
 #endif
 
-extern int     os_getloadavg(void);
-extern void    os_restarting_signal(int, void (*)(int));
-extern void    os_non_restarting_signal(int, void (*)(int));
-extern char   *os_strexit(int);     /* char to match os_strsignal */
-extern char   *os_strsignal(int);   /* char to match strsignal in some OS */
+extern int           os_getloadavg(void);
+extern void          os_restarting_signal(int, void (*)(int));
+extern void          os_non_restarting_signal(int, void (*)(int));
+extern const char   *os_strexit(int);     /* char to match os_strsignal */
+extern const char   *os_strsignal(int);   /* char to match strsignal in some OS */
 
 /* End of osfunctions.h */
index e4fc92d2c4085d046e7942741fee9e07c25fb700..d7b67a50999c420b3f5a7f8c7b6836ddcb00641e 100644 (file)
@@ -428,7 +428,7 @@ int mpi_read_file( mpi *X, int radix, FILE *fin )
 /*
  * Write X into an opened file (or stdout if fout == NULL)
  */
-int mpi_write_file( char *p, mpi *X, int radix, FILE *fout )
+int mpi_write_file( const char *p, mpi *X, int radix, FILE *fout )
 {
     int n, ret;
     size_t slen;
index aaca67ff8d6244690ef2a29a17ef88734442f4f5..5b355f2fcec42c4336e54e564a39c4e97f8278d2 100644 (file)
@@ -202,7 +202,7 @@ int mpi_read_file( mpi *X, int radix, FILE *fin );
  *
  * \note           Set fout == NULL to print X on the console.
  */
-int mpi_write_file( char *p, mpi *X, int radix, FILE *fout );
+int mpi_write_file( const char *p, mpi *X, int radix, FILE *fout );
 
 /**
  * \brief          Import X from unsigned binary data, big endian
index 0147f5f05ce0923cb487a8dbfd6c809436bfa72b..b0430ea45f9a15ba84790aa75d4948b31e7266c5 100644 (file)
@@ -65,32 +65,32 @@ struct pdkim_str {
 
 /* -------------------------------------------------------------------------- */
 /* A bunch of list constants */
-char *pdkim_querymethods[] = {
+const char *pdkim_querymethods[] = {
   "dns/txt",
   NULL
 };
-char *pdkim_algos[] = {
+const char *pdkim_algos[] = {
   "rsa-sha256",
   "rsa-sha1",
   NULL
 };
-char *pdkim_canons[] = {
+const char *pdkim_canons[] = {
   "simple",
   "relaxed",
   NULL
 };
-char *pdkim_hashes[] = {
+const char *pdkim_hashes[] = {
   "sha256",
   "sha1",
   NULL
 };
-char *pdkim_keytypes[] = {
+const char *pdkim_keytypes[] = {
   "rsa",
   NULL
 };
 
 typedef struct pdkim_combined_canon_entry {
-  char *str;
+  const char *str;
   int canon_headers;
   int canon_body;
 } pdkim_combined_canon_entry;
@@ -105,7 +105,7 @@ pdkim_combined_canon_entry pdkim_combined_canons[] = {
 };
 
 
-char *pdkim_verify_status_str(int status) {
+const char *pdkim_verify_status_str(int status) {
   switch(status) {
     case PDKIM_VERIFY_NONE:    return "PDKIM_VERIFY_NONE";
     case PDKIM_VERIFY_INVALID: return "PDKIM_VERIFY_INVALID";
@@ -114,7 +114,7 @@ char *pdkim_verify_status_str(int status) {
     default:                   return "PDKIM_VERIFY_UNKNOWN";
   }
 }
-char *pdkim_verify_ext_status_str(int ext_status) {
+const char *pdkim_verify_ext_status_str(int ext_status) {
   switch(ext_status) {
     case PDKIM_VERIFY_FAIL_BODY: return "PDKIM_VERIFY_FAIL_BODY";
     case PDKIM_VERIFY_FAIL_MESSAGE: return "PDKIM_VERIFY_FAIL_MESSAGE";
@@ -129,12 +129,12 @@ char *pdkim_verify_ext_status_str(int ext_status) {
 /* -------------------------------------------------------------------------- */
 /* Print debugging functions */
 #ifdef PDKIM_DEBUG
-void pdkim_quoteprint(FILE *stream, char *data, int len, int lf) {
+void pdkim_quoteprint(FILE *stream, const char *data, int len, int lf) {
   int i;
-  unsigned char *p = (unsigned char *)data;
+  const unsigned char *p = (const unsigned char *)data;
 
   for (i=0;i<len;i++) {
-    int c = p[i];
+    const int c = p[i];
     switch (c) {
       case ' ' : fprintf(stream,"{SP}"); break;
       case '\t': fprintf(stream,"{TB}"); break;
@@ -153,12 +153,12 @@ void pdkim_quoteprint(FILE *stream, char *data, int len, int lf) {
   if (lf)
     fputc('\n',stream);
 }
-void pdkim_hexprint(FILE *stream, char *data, int len, int lf) {
+void pdkim_hexprint(FILE *stream, const char *data, int len, int lf) {
   int i;
-  unsigned char *p = (unsigned char *)data;
+  const unsigned char *p = (const unsigned char *)data;
 
   for (i=0;i<len;i++) {
-    int c = p[i];
+    const int c = p[i];
     fprintf(stream,"%02x",c);
   }
   if (lf)
@@ -198,7 +198,7 @@ pdkim_stringlist *pdkim_prepend_stringlist(pdkim_stringlist *base, char *str) {
 
 /* -------------------------------------------------------------------------- */
 /* A small "growing string" implementation to escape malloc/realloc hell */
-pdkim_str *pdkim_strnew (char *cstr) {
+pdkim_str *pdkim_strnew (const char *cstr) {
   unsigned int len = cstr?strlen(cstr):0;
   pdkim_str *p = malloc(sizeof(pdkim_str));
   if (p == NULL) return NULL;
@@ -214,7 +214,7 @@ pdkim_str *pdkim_strnew (char *cstr) {
   else p->str[p->len] = '\0';
   return p;
 }
-char *pdkim_strncat(pdkim_str *str, char *data, int len) {
+char *pdkim_strncat(pdkim_str *str, const char *data, int len) {
   if ((str->allocated - str->len) < (len+1)) {
     /* Extend the buffer */
     int num_frags = ((len+1)/PDKIM_STR_ALLOC_FRAG)+1;
@@ -229,7 +229,7 @@ char *pdkim_strncat(pdkim_str *str, char *data, int len) {
   str->str[str->len] = '\0';
   return str->str;
 }
-char *pdkim_strcat(pdkim_str *str, char *cstr) {
+char *pdkim_strcat(pdkim_str *str, const char *cstr) {
   return pdkim_strncat(str, cstr, strlen(cstr));
 }
 char *pdkim_numcat(pdkim_str *str, unsigned long num) {
@@ -328,9 +328,9 @@ DLLEXPORT void pdkim_free_ctx(pdkim_ctx *ctx) {
    the passed colon-separated "list", starting at entry
    "start". Returns the position of the header name in
    the list. */
-int header_name_match(char *header,
-                      char *tick,
-                      int   do_tick) {
+int header_name_match(const char *header,
+                      char       *tick,
+                      int         do_tick) {
   char *hname;
   char *lcopy;
   char *p;
@@ -865,7 +865,7 @@ pdkim_pubkey *pdkim_parse_pubkey_record(pdkim_ctx *ctx, char *raw_record) {
 
 
 /* -------------------------------------------------------------------------- */
-int pdkim_update_bodyhash(pdkim_ctx *ctx, char *data, int len) {
+int pdkim_update_bodyhash(pdkim_ctx *ctx, const char *data, int len) {
   pdkim_signature *sig = ctx->sig;
   /* Cache relaxed version of data */
   char *relaxed_data = NULL;
@@ -874,14 +874,14 @@ int pdkim_update_bodyhash(pdkim_ctx *ctx, char *data, int len) {
   /* Traverse all signatures, updating their hashes. */
   while (sig != NULL) {
     /* Defaults to simple canon (no further treatment necessary) */
-    char *canon_data = data;
-    int   canon_len = len;
+    const char *canon_data = data;
+    int         canon_len = len;
 
     if (sig->canon_body == PDKIM_CANON_RELAXED) {
       /* Relax the line if not done already */
       if (relaxed_data == NULL) {
         int seen_wsp = 0;
-        char *p = data;
+        const char *p = data;
         int q = 0;
         relaxed_data = malloc(len+1);
         if (relaxed_data == NULL) return PDKIM_ERR_OOM;
index 8a640565ec1e829e586054cec0b09782f0c7cfd9..e6face16a6ccf7b5e1924261645680ec576b438c 100644 (file)
@@ -14,7 +14,7 @@
 
 /* Names for testing rewriting */
 
-static char *rrname[] = {
+static const char *rrname[] = {
   "  sender",
   "    from",
   "      to",
@@ -29,20 +29,20 @@ static char *rrname[] = {
 
 typedef struct where_list_block {
   int bit;
-  uschar *string;
+  const uschar *string;
 } where_list_block;
 
 static where_list_block where_list[] = {
-  { rewrite_sender,  US"sender:" },
-  { rewrite_from,    US"from:" },
-  { rewrite_to,      US"to:" },
-  { rewrite_cc,      US"cc:" },
-  { rewrite_bcc,     US"bcc:" },
-  { rewrite_replyto, US"reply-to:" },
-  { rewrite_envfrom, US"env-from" },
-  { rewrite_envto,   US"env-to" },
-  { rewrite_smtp,    US"smtp recipient" },
-  { rewrite_smtp|rewrite_smtp_sender, US"smtp sender" }
+  { rewrite_sender,  CUS"sender:" },
+  { rewrite_from,    CUS"from:" },
+  { rewrite_to,      CUS"to:" },
+  { rewrite_cc,      CUS"cc:" },
+  { rewrite_bcc,     CUS"bcc:" },
+  { rewrite_replyto, CUS"reply-to:" },
+  { rewrite_envfrom, CUS"env-from" },
+  { rewrite_envto,   CUS"env-to" },
+  { rewrite_smtp,    CUS"smtp recipient" },
+  { rewrite_smtp|rewrite_smtp_sender, CUS"smtp sender" }
 };
 
 static int where_list_size = sizeof(where_list)/sizeof(where_list_block);
@@ -252,7 +252,7 @@ for (rule = rewrite_rules;
       (debug_selector & D_rewrite) != 0)
     {
     int i;
-    uschar *where = US"?";
+    const uschar *where = CUS"?";
 
     for (i = 0; i < where_list_size; i++)
       {
index 0fcedc8216cb68719cdb5f416c3276f4330ca22a..2ef6977024d543a459be6d72fc5be17ba138922a 100644 (file)
@@ -49,7 +49,7 @@ the data can be quite long. */
 /* Structure for SMTP command list */
 
 typedef struct {
-  char *name;
+  const char *name;
   int len;
   short int cmd;
   short int has_arg;
@@ -376,7 +376,7 @@ Returns:      nothing
 */
 
 void
-smtp_printf(char *format, ...)
+smtp_printf(const char *format, ...)
 {
 va_list ap;
 
@@ -390,7 +390,7 @@ smtp_printf(), bearing in mind that in C a vararg function can't directly
 call another vararg function, only a function which accepts a va_list. */
 
 void
-smtp_vprintf(char *format, va_list ap)
+smtp_vprintf(const char *format, va_list ap)
 {
 BOOL yield;
 
index 484735032b12bbbf88d0067d996dcf79aa921a79..da1d322151ca4ad94e9616f1c7699a0e82ce77c6 100644 (file)
@@ -318,7 +318,7 @@ Returns:     0 if command added to pipelining buffer, with nothing transmitted
 */
 
 int
-smtp_write_command(smtp_outblock *outblock, BOOL noflush, char *format, ...)
+smtp_write_command(smtp_outblock *outblock, BOOL noflush, const char *format, ...)
 {
 int count;
 int rc = 0;
index 49ffc968548ff183445c132e2652cb631ab12408..d501453c79eeab054196410d04ad0fe785bc5efd 100644 (file)
@@ -641,7 +641,7 @@ Returns:    pointer to fresh piece of store containing sprintf'ed string
 */
 
 uschar *
-string_sprintf(char *format, ...)
+string_sprintf(const char *format, ...)
 {
 va_list ap;
 uschar buffer[STRING_SPRINTF_BUFFER_SIZE];
@@ -669,7 +669,7 @@ Returns:    < 0, = 0, or > 0, according to the comparison
 */
 
 int
-strncmpic(uschar *s, uschar *t, int n)
+strncmpic(const uschar *s, const uschar *t, int n)
 {
 while (n--)
   {
@@ -693,7 +693,7 @@ Returns:    < 0, = 0, or > 0, according to the comparison
 */
 
 int
-strcmpic(uschar *s, uschar *t)
+strcmpic(const uschar *s, const uschar *t)
 {
 while (*s != 0)
   {
@@ -1052,7 +1052,7 @@ Returns:       TRUE if the result fitted in the buffer
 */
 
 BOOL
-string_format(uschar *buffer, int buflen, char *format, ...)
+string_format(uschar *buffer, int buflen, const char *format, ...)
 {
 BOOL yield;
 va_list ap;
@@ -1064,13 +1064,13 @@ return yield;
 
 
 BOOL
-string_vformat(uschar *buffer, int buflen, char *format, va_list ap)
+string_vformat(uschar *buffer, int buflen, const char *format, va_list ap)
 {
 enum { L_NORMAL, L_SHORT, L_LONG, L_LONGLONG, L_LONGDOUBLE };
 
 BOOL yield = TRUE;
 int width, precision;
-char *fp = format;             /* Deliberately not unsigned */
+const char *fp = format;       /* Deliberately not unsigned */
 uschar *p = buffer;
 uschar *last = buffer + buflen - 1;
 
@@ -1085,8 +1085,8 @@ while (*fp != 0)
   int length = L_NORMAL;
   int *nptr;
   int slen;
-  char *null = "NULL";         /* ) These variables */
-  char *item_start, *s;        /* ) are deliberately */
+  const char *null = "NULL";   /* ) These variables */
+  const char *item_start, *s;  /* ) are deliberately */
   char newformat[16];          /* ) not unsigned */
 
   /* Non-% characters just get copied verbatim */
@@ -1340,7 +1340,7 @@ Returns:        a message, in dynamic store
 */
 
 uschar *
-string_open_failed(int eno, char *format, ...)
+string_open_failed(int eno, const char *format, ...)
 {
 va_list ap;
 uschar buffer[1024];
index 504ef9e06aaa2f8fbd994d46dd1764655b192f58..1bf7ee5e069341b5e298e26886fb72b05f93020a 100644 (file)
@@ -324,7 +324,7 @@ Returns:      the yield of transport_write_block()
 */
 
 BOOL
-transport_write_string(int fd, char *format, ...)
+transport_write_string(int fd, const char *format, ...)
 {
 va_list ap;
 va_start(ap, format);
index 39dd4f8f07cb4a0a9e4effc4570001447ebe66ac..a399c600e64d0126a4aada1b5654041bf76600e9 100644 (file)
@@ -21,7 +21,7 @@ supported only if SUPPORT_MBX is set. */
 
 enum { mbf_unix, mbf_mbx, mbf_smail, mbf_maildir, mbf_mailstore };
 
-static char *mailbox_formats[] = {
+static const char *mailbox_formats[] = {
   "unix", "mbx", "smail", "maildir", "mailstore" };
 
 
index 433686d068dc7ffe4c93f173c0d8f07f5d823d28..f4d95fa8c3eec5082dc10216fa8d5754bb0c6c8a 100644 (file)
@@ -212,7 +212,7 @@ Returns:     TRUE if successful, FALSE if not, with errno set
 */
 
 static BOOL
-lmtp_write_command(int fd, char *format, ...)
+lmtp_write_command(int fd, const char *format, ...)
 {
 int count, rc;
 va_list ap;
index 472b0764dd41c90c750fad3e8e36a9177c0560bd..e6c8bef9435e42c14a2d3f31fb1fc700e1a88715 100644 (file)
@@ -48,7 +48,7 @@ BOOL maildir_ensure_directories(uschar *path, address_item *addr,
 {
 int i;
 struct stat statbuf;
-char *subdirs[] = { "/tmp", "/new", "/cur" };
+const char *subdirs[] = { "/tmp", "/new", "/cur" };
 
 DEBUG(D_transport)
   debug_printf("ensuring maildir directories exist in %s\n", path);
@@ -62,16 +62,16 @@ loop so that code can be shared. */
 for (i = 0; i < 4; i++)
   {
   int j;
-  uschar *dir, *mdir;
+  const uschar *dir, *mdir;
 
   if (i == 0)
     {
-    mdir = US"";
+    mdir = CUS"";
     dir = path;
     }
   else
     {
-    mdir = US subdirs[i-1];
+    mdir = CUS subdirs[i-1];
     dir = mdir + 1;
     }
 
index f653b6e0d27f8aef751d9afe04699de613f14a42..a702e92d6d0506dfadc2b9c180f866e91f1f226a 100644 (file)
@@ -885,7 +885,7 @@ Returns:
 */
 
 static void PRINTF_FUNCTION(2,3)
-respond_printf(FILE *f, char *format, ...)
+respond_printf(FILE *f, const char *format, ...)
 {
 va_list ap;