changeset 847:7f41a4b33975 HEAD

t_strsplit() returns now const char **, which removes a few nasty casts. Removed a few unneded functions and did some small cleanups.
author Timo Sirainen <tss@iki.fi>
date Sun, 22 Dec 2002 10:18:29 +0200
parents 8144e1025bda
children b19889528486
files src/auth/auth-digest-md5.c src/auth/auth.c src/auth/auth.h src/auth/userinfo-passwd-file.c src/lib-index/mbox/mbox-lock.c src/lib-storage/index/index-fetch-section.c src/lib-storage/index/index-storage.c src/lib/strfuncs.c src/lib/strfuncs.h src/master/imap-process.c src/master/settings.c
diffstat 11 files changed, 44 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-digest-md5.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/auth/auth-digest-md5.c	Sun Dec 22 10:18:29 2002 +0200
@@ -59,7 +59,7 @@
 {
 	String *qoplist, *realms;
 	Buffer *buf;
-	char *const *tmp;
+	const char *const *tmp;
 	unsigned char nonce[16];
 	int i;
 
@@ -206,7 +206,7 @@
 
 static int verify_realm(const char *realm)
 {
-	char *const *tmp;
+	const char *const *tmp;
 
 	for (tmp = auth_realms; *tmp != NULL; tmp++) {
 		if (strcasecmp(realm, *tmp) == 0)
@@ -270,10 +270,9 @@
 }
 
 /* remove leading and trailing whitespace */
-static char *trim(char *str)
+static const char *trim(const char *str)
 {
-	/* @UNSAFE */
-	char *ret;
+	const char *ret;
 
 	while (IS_LWS(*str)) str++;
 	ret = str;
@@ -281,7 +280,7 @@
 	while (*str != '\0') str++;
 	if (str > ret) {
 		while (IS_LWS(str[-1])) str--;
-		*str = '\0';
+		ret = t_strdup_until(ret, str);
 	}
 
 	return ret;
@@ -383,7 +382,7 @@
 
 	if (strcmp(key, "digest-uri") == 0) {
 		/* type / host / serv-name */
-		char *const *uri = t_strsplit(value, "/");
+		const char *const *uri = t_strsplit(value, "/");
 
 		if (uri[0] == NULL || uri[1] == NULL) {
 			*error = "Invalid digest-uri";
--- a/src/auth/auth.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/auth/auth.c	Sun Dec 22 10:18:29 2002 +0200
@@ -15,7 +15,7 @@
 };
 
 AuthMethod auth_methods;
-char *const *auth_realms;
+const char *const *auth_realms;
 
 static AuthModuleList *auth_modules;
 static AuthReplyData failure_reply;
@@ -105,7 +105,7 @@
 
 void auth_init(void)
 {
-	char *const *methods;
+	const char *const *methods;
 	const char *env;
 
         auth_modules = NULL;
--- a/src/auth/auth.h	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/auth/auth.h	Sun Dec 22 10:18:29 2002 +0200
@@ -15,7 +15,7 @@
 } AuthModule;
 
 extern AuthMethod auth_methods;
-extern char *const *auth_realms;
+extern const char *const *auth_realms;
 
 void auth_register_module(AuthModule *module);
 void auth_unregister_module(AuthModule *module);
--- a/src/auth/userinfo-passwd-file.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/auth/userinfo-passwd-file.c	Sun Dec 22 10:18:29 2002 +0200
@@ -107,7 +107,7 @@
 				    AuthCookieReplyData *reply)
 {
 	PasswdUser *pu;
-	char *const *tmp;
+	const char *const *tmp;
 	unsigned char digest[16];
 	const char *str;
 
@@ -190,7 +190,7 @@
 }
 
 static void passwd_file_add(PasswdFile *pw, const char *username,
-			    const char *pass, char *const *args)
+			    const char *pass, const char *const *args)
 {
 	/* args = uid, gid, user info, home dir, shell, realm, mail, chroot */
 	PasswdUser *pu;
@@ -312,7 +312,7 @@
 static void passwd_file_parse_file(PasswdFile *pw)
 {
 	IStream *input;
-	char *const *args;
+	const char *const *args;
 	const char *line;
 
 	input = i_stream_create_file(pw->fd, default_pool, 2048, FALSE);
--- a/src/lib-index/mbox/mbox-lock.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/lib-index/mbox/mbox-lock.c	Sun Dec 22 10:18:29 2002 +0200
@@ -32,7 +32,7 @@
 static void mbox_init_lock_settings(void)
 {
 	const char *str;
-	char *const *lock;
+	const char *const *lock;
 
         use_dotlock = use_fcntl_lock = use_flock = fcntl_before_flock = FALSE;
 
--- a/src/lib-storage/index/index-fetch-section.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/lib-storage/index/index-fetch-section.c	Sun Dec 22 10:18:29 2002 +0200
@@ -12,6 +12,16 @@
 #include <ctype.h>
 #include <unistd.h>
 
+typedef struct {
+	String *dest;
+	OStream *output;
+	uoff_t dest_size;
+
+	uoff_t skip, max_size;
+	const char **fields;
+	int (*match_func) (const char **, const char *, size_t);
+} FetchHeaderFieldContext;
+
 /* For FETCH[HEADER.FIELDS*] we need to modify the header data before sending
    it. We can either save it in memory and then send it, or we can parse it
    twice, first calculating the size and then send it. This value specifies
@@ -67,16 +77,16 @@
 			    cr_skipped ? 1 : 0, sect->max_size);
 }
 
-static char *const *get_fields_array(const char *fields)
+static const char **get_fields_array(const char *fields)
 {
-	char **field_list, **field;
+	const char **field_list, **field;
 
 	while (*fields == ' ')
 		fields++;
 	if (*fields == '(')
 		fields++;
 
-	field_list = (char **) t_strsplit(fields, " )");
+	field_list = t_strsplit(fields, " )");
 
 	/* array ends at ")" element */
 	for (field = field_list; *field != NULL; field++) {
@@ -87,7 +97,7 @@
 	return field_list;
 }
 
-static int header_match(char *const *fields, const char *name, size_t size)
+static int header_match(const char **fields, const char *name, size_t size)
 {
 	const char *field, *name_start, *name_end;
 
@@ -120,12 +130,12 @@
 	return FALSE;
 }
 
-static int header_match_not(char *const *fields, const char *name, size_t size)
+static int header_match_not(const char **fields, const char *name, size_t size)
 {
 	return !header_match(fields, name, size);
 }
 
-static int header_match_mime(char *const *fields __attr_unused__,
+static int header_match_mime(const char **fields __attr_unused__,
 			     const char *name, size_t size)
 {
 	if (size > 8 && strncasecmp(name, "Content-", 8) == 0)
@@ -137,16 +147,6 @@
 	return FALSE;
 }
 
-typedef struct {
-	String *dest;
-	OStream *output;
-	uoff_t dest_size;
-
-	uoff_t skip, max_size;
-	char *const *fields;
-	int (*match_func) (char *const *, const char *, size_t);
-} FetchHeaderFieldContext;
-
 static int fetch_header_append(FetchHeaderFieldContext *ctx,
 			       const char *str, size_t size)
 {
--- a/src/lib-storage/index/index-storage.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/lib-storage/index/index-storage.c	Sun Dec 22 10:18:29 2002 +0200
@@ -90,7 +90,7 @@
 		NULL
 	};
 
-	char *const *arr;
+	const char *const *arr;
 	MailDataField ret;
 	int i;
 
--- a/src/lib/strfuncs.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/lib/strfuncs.c	Sun Dec 22 10:18:29 2002 +0200
@@ -267,6 +267,8 @@
 		}
 	} while (str != NULL);
 
+	i_assert(pos < bufsize);
+
 	temp[pos] = '\0';
         *ret_len = pos+1;
         return temp;
@@ -466,45 +468,17 @@
 	*dest = '\0';
 }
 
-int strarray_length(char *const array[])
-{
-	int len;
-
-	len = 0;
-	while (*array) {
-		len++;
-                array++;
-	}
-        return len;
-}
-
-int strarray_find(char *const array[], const char *item)
+const char **t_strsplit(const char *data, const char *separators)
 {
-	int index;
-
-	i_assert(item != NULL);
-
-	for (index = 0; *array != NULL; index++, array++) {
-		if (strcasecmp(*array, item) == 0)
-			return index;
-	}
-
-	return -1;
-}
-
-char *const *t_strsplit(const char *data, const char *separators)
-{
-        char **array;
+        const char **array;
 	char *str;
         size_t alloc_len, len;
 
         i_assert(*separators != '\0');
 
-	len = strlen(data)+1;
-	str = t_malloc(len);
-	memcpy(str, data, len);
+	str = t_strdup_noconst(data);
 
-        alloc_len = 20;
+        alloc_len = 32;
         array = t_buffer_get(sizeof(const char *) * alloc_len);
 
 	array[0] = str; len = 1;
@@ -512,7 +486,7 @@
 		if (strchr(separators, *str) != NULL) {
 			/* separator found */
 			if (len+1 >= alloc_len) {
-                                alloc_len *= 2;
+                                alloc_len = nearest_power(alloc_len+1);
 				array = t_buffer_reget(array,
 						       sizeof(const char *) *
 						       alloc_len);
@@ -524,10 +498,12 @@
 
                 str++;
 	}
+
+	i_assert(len < alloc_len);
         array[len] = NULL;
 
 	t_buffer_alloc(sizeof(const char *) * (len+1));
-        return (char *const *) array;
+        return array;
 }
 
 const char *dec2str(uintmax_t number)
@@ -543,6 +519,7 @@
 		buffer[--pos] = (number % 10) + '0';
 		number /= 10;
 	} while (number != 0 && pos >= 0);
+
 	i_assert(pos >= 0);
 	return buffer + pos;
 }
--- a/src/lib/strfuncs.h	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/lib/strfuncs.h	Sun Dec 22 10:18:29 2002 +0200
@@ -51,13 +51,8 @@
 char *str_lcase(char *str);
 void str_remove_escapes(char *str);
 
-/* returns number of items in array */
-int strarray_length(char *const array[]);
-/* return index of item in array, or -1 if not found */
-int strarray_find(char *const array[], const char *item);
-
 /* seprators is an array of separator characters, not a separator string. */
-char *const *t_strsplit(const char *data, const char *separators);
+const char **t_strsplit(const char *data, const char *separators);
 
 const char *dec2str(uintmax_t number);
 
--- a/src/master/imap-process.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/master/imap-process.c	Sun Dec 22 10:18:29 2002 +0200
@@ -45,7 +45,7 @@
 
 static int validate_chroot(const char *dir)
 {
-	char *const *chroot_dirs;
+	const char *const *chroot_dirs;
 
 	if (*dir == '\0')
 		return TRUE;
--- a/src/master/settings.c	Sun Dec 22 10:03:03 2002 +0200
+++ b/src/master/settings.c	Sun Dec 22 10:18:29 2002 +0200
@@ -189,7 +189,7 @@
 
 static void settings_verify(void)
 {
-	char *const *str;
+	const char *const *str;
 	const char *dir;
 	int dotlock_got, fcntl_got, flock_got;