dovecot-2.0: Avoid casting away const qualifiers wherever possible.

dovecot at dovecot.org dovecot at dovecot.org
Sat Mar 27 01:54:39 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/be5b93c18203
changeset: 10998:be5b93c18203
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Mar 27 01:54:31 2010 +0200
description:
Avoid casting away const qualifiers wherever possible.

diffstat:

 src/lib-index/mail-index-modseq.c  |   2 +-
 src/lib-index/mail-index-sync.c    |   5 +++--
 src/lib-otp/otp-parse.c            |   3 ++-
 src/lib-settings/settings-parser.c |   9 +++++----
 src/lib/execv-const.c              |  17 +++++++++++++++--
 src/lib/fdpass.c                   |   6 +++---
 6 files changed, 29 insertions(+), 13 deletions(-)

diffs (146 lines):

diff -r 961ded33ca0a -r be5b93c18203 src/lib-index/mail-index-modseq.c
--- a/src/lib-index/mail-index-modseq.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib-index/mail-index-modseq.c	Sat Mar 27 01:54:31 2010 +0200
@@ -285,7 +285,7 @@
 			 uint32_t seq1, uint32_t seq2)
 {
 	const struct mail_index_ext *ext;
-	const struct mail_index_record *rec;
+	struct mail_index_record *rec;
 	uint32_t ext_map_idx;
 	uint64_t *modseqp;
 
diff -r 961ded33ca0a -r be5b93c18203 src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib-index/mail-index-sync.c	Sat Mar 27 01:54:31 2010 +0200
@@ -251,13 +251,14 @@
 	for (i = 0; i < keyword_count; i++) {
 		if (array_is_created(&keyword_updates[i].add_seq)) {
 			synclist = array_append_space(&ctx->sync_list);
-			synclist->array = (void *)&keyword_updates[i].add_seq;
+			synclist->array =
+				(const void *)&keyword_updates[i].add_seq;
 			synclist->keyword_idx = i;
 		}
 		if (array_is_created(&keyword_updates[i].remove_seq)) {
 			synclist = array_append_space(&ctx->sync_list);
 			synclist->array =
-				(void *)&keyword_updates[i].remove_seq;
+				(const void *)&keyword_updates[i].remove_seq;
 			synclist->keyword_idx = i;
 			synclist->keyword_remove = TRUE;
 		}
diff -r 961ded33ca0a -r be5b93c18203 src/lib-otp/otp-parse.c
--- a/src/lib-otp/otp-parse.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib-otp/otp-parse.c	Sat Mar 27 01:54:31 2010 +0200
@@ -150,6 +150,7 @@
 			struct otp_state *state)
 {
 	const char *p, *s;
+	char *end;
 	unsigned int i = 0;
 	int algo;
 
@@ -165,7 +166,7 @@
 	state->algo = algo;
 
 	s = p;
-	state->seq = strtol(s, (char **) &p, 10);
+	state->seq = strtol(s, &end, 10); p = end;
 	if ((p == s) || !IS_LWS(*p))
 		return -3;
 	p++;
diff -r 961ded33ca0a -r be5b93c18203 src/lib-settings/settings-parser.c
--- a/src/lib-settings/settings-parser.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib-settings/settings-parser.c	Sat Mar 27 01:54:31 2010 +0200
@@ -537,7 +537,8 @@
 	       const struct setting_define *def,
 	       const char *key, const char *value)
 {
-        void *ptr, *ptr2, *change_ptr;
+	void *ptr, *change_ptr;
+	const void *ptr2;
 	const char *error;
 
 	while (def->type == SET_ALIAS) {
@@ -589,9 +590,9 @@
 	case SET_ENUM:
 		/* get the available values from default string */
 		i_assert(link->info->defaults != NULL);
-		ptr2 = STRUCT_MEMBER_P(link->info->defaults, def->offset);
+		ptr2 = CONST_STRUCT_MEMBER_P(link->info->defaults, def->offset);
 		if (get_enum(ctx, value, (char **)ptr,
-			     *(const char **)ptr2) < 0)
+			     *(const char *const *)ptr2) < 0)
 			return -1;
 		break;
 	case SET_DEFLIST:
@@ -1346,7 +1347,7 @@
 		case SET_STR:
 		case SET_ENUM:
 		case SET_STRLIST:
-			*((char *)dest) = *((char *)src);
+			*((char *)dest) = *((const char *)src);
 			break;
 		case SET_DEFLIST:
 		case SET_DEFLIST_UNIQUE: {
diff -r 961ded33ca0a -r be5b93c18203 src/lib/execv-const.c
--- a/src/lib/execv-const.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib/execv-const.c	Sat Mar 27 01:54:31 2010 +0200
@@ -5,16 +5,29 @@
 
 #include <unistd.h>
 
+static char **argv_drop_const(const char *const argv[])
+{
+	char **ret;
+	unsigned int i, count;
+
+	for (count = 0; argv[count] != NULL; count++) ;
+
+	ret = t_new(char *, count + 1);
+	for (i = 0; i < count; i++)
+		ret[i] = t_strdup_noconst(argv[i]);
+	return ret;
+}
+
 void execv_const(const char *path, const char *const argv[])
 {
-	(void)execv(path, (void *)argv);
+	(void)execv(path, argv_drop_const(argv));
 	i_fatal_status(errno == ENOMEM ? FATAL_OUTOFMEM : FATAL_EXEC,
 		       "execv(%s) failed: %m", path);
 }
 
 void execvp_const(const char *file, const char *const argv[])
 {
-	(void)execvp(file, (void *)argv);
+	(void)execvp(file, argv_drop_const(argv));
 	i_fatal_status(errno == ENOMEM ? FATAL_OUTOFMEM : FATAL_EXEC,
 		       "execvp(%s) failed: %m", file);
 }
diff -r 961ded33ca0a -r be5b93c18203 src/lib/fdpass.c
--- a/src/lib/fdpass.c	Sat Mar 27 01:40:04 2010 +0200
+++ b/src/lib/fdpass.c	Sat Mar 27 01:54:31 2010 +0200
@@ -97,7 +97,7 @@
 ssize_t fd_send(int handle, int send_fd, const void *data, size_t size)
 {
         struct msghdr msg;
-        struct iovec iov;
+        struct const_iovec iov;
         struct cmsghdr *cmsg;
 	char buf[CMSG_SPACE(sizeof(int))];
 
@@ -106,10 +106,10 @@
 
 	memset(&msg, 0, sizeof(struct msghdr));
 
-        iov.iov_base = (void *) data;
+        iov.iov_base = data;
         iov.iov_len = size;
 
-        msg.msg_iov = &iov;
+        msg.msg_iov = (void *)&iov;
 	msg.msg_iovlen = 1;
 
 	if (send_fd != -1) {


More information about the dovecot-cvs mailing list