Gitweb:
http://git.exim.org/exim.git/commitdiff/1ba28e2b955b005ce4825fec792df17f75a8de1e
Commit: 1ba28e2b955b005ce4825fec792df17f75a8de1e
Parent: 5d758a462abebb9885f2e596f7892479812de125
Author: Phil Pennock <pdp@???>
AuthorDate: Tue Mar 22 05:36:24 2011 -0400
Committer: Phil Pennock <pdp@???>
CommitDate: Tue Mar 22 05:36:24 2011 -0400
Compiler masochism compliance.
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.
---
src/src/buildconfig.c | 15 +++++------
src/src/debug.c | 4 +-
src/src/directory.c | 8 ++++--
src/src/drtables.c | 2 +-
src/src/exim.c | 22 ++++++++++-------
src/src/exim_dbmbuild.c | 2 +-
src/src/exim_lock.c | 3 +-
src/src/expand.c | 12 +++++-----
src/src/filter.c | 16 ++++++------
src/src/functions.h | 30 ++++++++++++------------
src/src/globals.c | 4 +-
src/src/globals.h | 4 +-
src/src/header.c | 13 +++++-----
src/src/local_scan.h | 26 ++++++++++----------
src/src/log.c | 2 +-
src/src/lookups/dnsdb.c | 2 +-
src/src/lookups/lf_check_file.c | 2 +-
src/src/lookups/lf_functions.h | 4 +-
src/src/malware.c | 8 +++---
src/src/mime.c | 4 +-
src/src/moan.c | 6 ++--
src/src/os.c | 8 +++---
src/src/osfunctions.h | 10 ++++----
src/src/pdkim/bignum.c | 2 +-
src/src/pdkim/bignum.h | 2 +-
src/src/pdkim/pdkim.c | 48 +++++++++++++++++++-------------------
src/src/rewrite.c | 26 ++++++++++----------
src/src/smtp_in.c | 6 ++--
src/src/smtp_out.c | 2 +-
src/src/string.c | 18 +++++++-------
src/src/transport.c | 2 +-
src/src/transports/appendfile.c | 2 +-
src/src/transports/lmtp.c | 2 +-
src/src/transports/tf_maildir.c | 8 +++---
src/src/verify.c | 2 +-
35 files changed, 167 insertions(+), 160 deletions(-)
diff --git a/src/src/buildconfig.c b/src/src/buildconfig.c
index 49d8c41..c012fb7 100644
--- a/src/src/buildconfig.c
+++ b/src/src/buildconfig.c
@@ -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)
diff --git a/src/src/debug.c b/src/src/debug.c
index 71e8c42..4b08f65 100644
--- a/src/src/debug.c
+++ b/src/src/debug.c
@@ -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;
diff --git a/src/src/directory.c b/src/src/directory.c
index 7aa137c..d6cac2c 100644
--- a/src/src/directory.c
+++ b/src/src/directory.c
@@ -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
{
diff --git a/src/src/drtables.c b/src/src/drtables.c
index 183edf3..85b6efb 100644
--- a/src/src/drtables.c
+++ b/src/src/drtables.c
@@ -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) {
diff --git a/src/src/exim.c b/src/src/exim.c
index c368e59..f086a00 100644
--- a/src/src/exim.c
+++ b/src/src/exim.c
@@ -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);
diff --git a/src/src/exim_dbmbuild.c b/src/src/exim_dbmbuild.c
index 4ff724c..386c9b4 100644
--- a/src/src/exim_dbmbuild.c
+++ b/src/src/exim_dbmbuild.c
@@ -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
diff --git a/src/src/exim_lock.c b/src/src/exim_lock.c
index 0c60ce1..f783a2b 100644
--- a/src/src/exim_lock.c
+++ b/src/src/exim_lock.c
@@ -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];
diff --git a/src/src/expand.c b/src/src/expand.c
index 1fd4335..bf425ae 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -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 };
diff --git a/src/src/filter.c b/src/src/filter.c
index b1fcd40..fd2f7ce 100644
--- a/src/src/filter.c
+++ b/src/src/filter.c
@@ -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:
diff --git a/src/src/functions.h b/src/src/functions.h
index 2408872..079e8ad 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -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 *);
diff --git a/src/src/globals.c b/src/src/globals.c
index fe3a2ee..7b5a525 100644
--- a/src/src/globals.c
+++ b/src/src/globals.c
@@ -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;
diff --git a/src/src/globals.h b/src/src/globals.h
index b0c26c4..c1806f0 100644
--- a/src/src/globals.h
+++ b/src/src/globals.h
@@ -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;
diff --git a/src/src/header.c b/src/src/header.c
index 1b6bf56..36a48b4 100644
--- a/src/src/header.c
+++ b/src/src/header.c
@@ -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;
diff --git a/src/src/local_scan.h b/src/src/local_scan.h
index 1f86c72..ffde0e3 100644
--- a/src/src/local_scan.h
+++ b/src/src/local_scan.h
@@ -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 */
diff --git a/src/src/log.c b/src/src/log.c
index 0995621..a2c1d44 100644
--- a/src/src/log.c
+++ b/src/src/log.c
@@ -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;
diff --git a/src/src/lookups/dnsdb.c b/src/src/lookups/dnsdb.c
index 5e7c158..f3aaf52 100644
--- a/src/src/lookups/dnsdb.c
+++ b/src/src/lookups/dnsdb.c
@@ -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",
diff --git a/src/src/lookups/lf_check_file.c b/src/src/lookups/lf_check_file.c
index b1919a2..1d45259 100644
--- a/src/src/lookups/lf_check_file.c
+++ b/src/src/lookups/lf_check_file.c
@@ -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;
diff --git a/src/src/lookups/lf_functions.h b/src/src/lookups/lf_functions.h
index 64cd097..9490b81 100644
--- a/src/src/lookups/lf_functions.h
+++ b/src/src/lookups/lf_functions.h
@@ -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 **,
diff --git a/src/src/malware.c b/src/src/malware.c
index eb0c33c..de8d08d 100644
--- a/src/src/malware.c
+++ b/src/src/malware.c
@@ -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)
diff --git a/src/src/mime.c b/src/src/mime.c
index 7678345..8a3d033 100644
--- a/src/src/mime.c
+++ b/src/src/mime.c
@@ -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;
}
diff --git a/src/src/moan.c b/src/src/moan.c
index f03eb8d..ff6c368 100644
--- a/src/src/moan.c
+++ b/src/src/moan.c
@@ -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;
diff --git a/src/src/os.c b/src/src/os.c
index b8d3693..4fa9324 100644
--- a/src/src/os.c
+++ b/src/src/os.c
@@ -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)
{
diff --git a/src/src/osfunctions.h b/src/src/osfunctions.h
index 67f7b0e..19b5808 100644
--- a/src/src/osfunctions.h
+++ b/src/src/osfunctions.h
@@ -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 */
diff --git a/src/src/pdkim/bignum.c b/src/src/pdkim/bignum.c
index e4fc92d..d7b67a5 100644
--- a/src/src/pdkim/bignum.c
+++ b/src/src/pdkim/bignum.c
@@ -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;
diff --git a/src/src/pdkim/bignum.h b/src/src/pdkim/bignum.h
index aaca67f..5b355f2 100644
--- a/src/src/pdkim/bignum.h
+++ b/src/src/pdkim/bignum.h
@@ -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
diff --git a/src/src/pdkim/pdkim.c b/src/src/pdkim/pdkim.c
index 0147f5f..b0430ea 100644
--- a/src/src/pdkim/pdkim.c
+++ b/src/src/pdkim/pdkim.c
@@ -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;
diff --git a/src/src/rewrite.c b/src/src/rewrite.c
index 8a64056..e6face1 100644
--- a/src/src/rewrite.c
+++ b/src/src/rewrite.c
@@ -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++)
{
diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c
index 0fcedc8..2ef6977 100644
--- a/src/src/smtp_in.c
+++ b/src/src/smtp_in.c
@@ -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;
diff --git a/src/src/smtp_out.c b/src/src/smtp_out.c
index 4847350..da1d322 100644
--- a/src/src/smtp_out.c
+++ b/src/src/smtp_out.c
@@ -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;
diff --git a/src/src/string.c b/src/src/string.c
index 49ffc96..d501453 100644
--- a/src/src/string.c
+++ b/src/src/string.c
@@ -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];
diff --git a/src/src/transport.c b/src/src/transport.c
index 504ef9e..1bf7ee5 100644
--- a/src/src/transport.c
+++ b/src/src/transport.c
@@ -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);
diff --git a/src/src/transports/appendfile.c b/src/src/transports/appendfile.c
index 39dd4f8..a399c60 100644
--- a/src/src/transports/appendfile.c
+++ b/src/src/transports/appendfile.c
@@ -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" };
diff --git a/src/src/transports/lmtp.c b/src/src/transports/lmtp.c
index 433686d..f4d95fa 100644
--- a/src/src/transports/lmtp.c
+++ b/src/src/transports/lmtp.c
@@ -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;
diff --git a/src/src/transports/tf_maildir.c b/src/src/transports/tf_maildir.c
index 472b076..e6c8bef 100644
--- a/src/src/transports/tf_maildir.c
+++ b/src/src/transports/tf_maildir.c
@@ -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;
}
diff --git a/src/src/verify.c b/src/src/verify.c
index f653b6e..a702e92 100644
--- a/src/src/verify.c
+++ b/src/src/verify.c
@@ -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;