[dovecot-cvs] dovecot/src/lib imem.c,1.5,1.6 imem.h,1.5,1.6 istream-data.c,1.1,1.2 istream.h,1.1,1.2 str.c,1.5,1.6 str.h,1.1,1.2 strescape.c,1.1,1.2 strescape.h,1.1,1.2 strfuncs.c,1.26,1.27 strfuncs.h,1.14,1.15

cras at procontrol.fi cras at procontrol.fi
Sat Jan 4 19:26:32 EET 2003


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv386/lib

Modified Files:
	imem.c imem.h istream-data.c istream.h str.c str.h strescape.c 
	strescape.h strfuncs.c strfuncs.h 
Log Message:
Use unsigned char* when accessing non-NUL terminating strings. Compiler
warnings would then notify about accidentally passing them to functions which
require them NUL-terminated. Changed a few functions to use void* to avoid
unneeded casting.



Index: imem.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/imem.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- imem.c	22 Dec 2002 07:06:16 -0000	1.5
+++ imem.c	4 Jan 2003 17:26:29 -0000	1.6
@@ -52,12 +52,12 @@
         return p_strdup_empty(default_pool, str);
 }
 
-char *i_strdup_until(const char *str, const char *end)
+char *i_strdup_until(const void *str, const void *end)
 {
 	return p_strdup_until(default_pool, str, end);
 }
 
-char *i_strndup(const char *str, size_t max_chars)
+char *i_strndup(const void *str, size_t max_chars)
 {
         return p_strndup(default_pool, str, max_chars);
 }

Index: imem.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/imem.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- imem.h	22 Dec 2002 07:06:16 -0000	1.5
+++ imem.h	4 Jan 2003 17:26:29 -0000	1.6
@@ -13,8 +13,8 @@
 /* string functions */
 char *i_strdup(const char *str);
 char *i_strdup_empty(const char *str); /* like i_strdup(), but if str == "", return NULL */
-char *i_strdup_until(const char *str, const char *end); /* *end isn't included */
-char *i_strndup(const char *str, size_t max_chars);
+char *i_strdup_until(const void *str, const void *end); /* *end isn't included */
+char *i_strndup(const void *str, size_t max_chars);
 char *i_strdup_printf(const char *format, ...) __attr_format__(1, 2);
 char *i_strdup_vprintf(const char *format, va_list args);
 

Index: istream-data.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream-data.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- istream-data.c	6 Dec 2002 01:09:22 -0000	1.1
+++ istream-data.c	4 Jan 2003 17:26:29 -0000	1.2
@@ -63,8 +63,7 @@
 	stream->istream.v_offset += count;
 }
 
-IStream *i_stream_create_from_data(Pool pool, const unsigned char *data,
-				   size_t size)
+IStream *i_stream_create_from_data(Pool pool, const void *data, size_t size)
 {
 	_IStream *stream;
 

Index: istream.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- istream.h	6 Dec 2002 01:09:22 -0000	1.1
+++ istream.h	4 Jan 2003 17:26:29 -0000	1.2
@@ -16,8 +16,7 @@
 IStream *i_stream_create_mmap(int fd, Pool pool, size_t block_size,
 			      uoff_t start_offset, uoff_t v_size,
 			      int autoclose_fd);
-IStream *i_stream_create_from_data(Pool pool, const unsigned char *data,
-				   size_t size);
+IStream *i_stream_create_from_data(Pool pool, const void *data, size_t size);
 
 /* Reference counting. References start from 1, so calling i_stream_unref()
    destroys the stream if i_stream_ref() is never used. */

Index: str.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/str.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- str.c	27 Dec 2002 16:02:25 -0000	1.5
+++ str.c	4 Jan 2003 17:26:29 -0000	1.6
@@ -67,6 +67,11 @@
 	return buffer_get_data(str, NULL);
 }
 
+const unsigned char *str_data(const String *str)
+{
+	return buffer_get_data(str, NULL);
+}
+
 char *str_c_modifyable(String *str)
 {
 	if (!str_add_nul(str))
@@ -85,12 +90,12 @@
 	buffer_append(str, cstr, strlen(cstr));
 }
 
-void str_append_n(String *str, const char *cstr, size_t max_len)
+void str_append_n(String *str, const void *cstr, size_t max_len)
 {
 	size_t len;
 
 	len = 0;
-	while (len < max_len && cstr[len] != '\0')
+	while (len < max_len && ((const char *)cstr)[len] != '\0')
 		len++;
 
 	buffer_append(str, cstr, len);

Index: str.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/str.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- str.h	21 Dec 2002 22:02:58 -0000	1.1
+++ str.h	4 Jan 2003 17:26:29 -0000	1.2
@@ -5,12 +5,13 @@
 String *t_str_new(size_t initial_size);
 
 const char *str_c(String *str);
+const unsigned char *str_data(const String *str);
 char *str_c_modifyable(String *str);
 size_t str_len(const String *str);
 
 /* Append string/character */
 void str_append(String *str, const char *cstr);
-void str_append_n(String *str, const char *cstr, size_t max_len);
+void str_append_n(String *str, const void *cstr, size_t max_len);
 void str_append_c(String *str, char chr);
 void str_append_str(String *dest, const String *src);
 

Index: strescape.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strescape.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- strescape.c	3 Jan 2003 15:57:12 -0000	1.1
+++ strescape.c	4 Jan 2003 17:26:29 -0000	1.2
@@ -51,20 +51,21 @@
 	return ret;
 }
 
-void str_append_unescaped(String *dest, const char *src, size_t src_size)
+void str_append_unescaped(String *dest, const void *src, size_t src_size)
 {
+	const unsigned char *src_c = src;
 	size_t start = 0, i = 0;
 
 	while (i < src_size) {
 		start = i;
 		for (; i < src_size; i++) {
-			if (src[i] == '\\')
+			if (src_c[i] == '\\')
 				break;
 		}
 
-		str_append_n(dest, src + start, i-start);
+		str_append_n(dest, src_c + start, i-start);
 
-		if (src[i] == '\\')
+		if (src_c[i] == '\\')
 			i++;
 		start = i;
 	}

Index: strescape.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strescape.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- strescape.h	3 Jan 2003 15:57:12 -0000	1.1
+++ strescape.h	4 Jan 2003 17:26:29 -0000	1.2
@@ -7,7 +7,7 @@
 const char *str_escape(const char *str);
 
 /* remove all '\' characters, append to given string */
-void str_append_unescaped(String *dest, const char *src, size_t src_size);
+void str_append_unescaped(String *dest, const void *src, size_t src_size);
 
 /* remove all '\' characters */
 void str_unescape(char *str);

Index: strfuncs.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strfuncs.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- strfuncs.c	3 Jan 2003 15:57:12 -0000	1.26
+++ strfuncs.c	4 Jan 2003 17:26:29 -0000	1.27
@@ -167,21 +167,21 @@
 	return p_strdup(pool, str);
 }
 
-char *p_strdup_until(Pool pool, const char *start, const char *end)
+char *p_strdup_until(Pool pool, const void *start, const void *end)
 {
 	size_t size;
 	char *mem;
 
-	i_assert(start <= end);
+	i_assert((const char *) start <= (const char *) end);
 
-	size = (size_t) (end-start);
+	size = (size_t) ((const char *) end - (const char *) start);
 
 	mem = p_malloc(pool, size + 1);
 	memcpy(mem, start, size);
 	return mem;
 }
 
-char *p_strndup(Pool pool, const char *str, size_t max_chars)
+char *p_strndup(Pool pool, const void *str, size_t max_chars)
 {
 	char *mem;
 	size_t len;
@@ -192,7 +192,7 @@
 		return NULL;
 
 	len = 0;
-	while (str[len] != '\0' && len < max_chars)
+	while (((const char *) str)[len] != '\0' && len < max_chars)
 		len++;
 
 	mem = pool->malloc(pool, len+1);
@@ -316,12 +316,12 @@
 	return p_strdup_empty(data_stack_pool, str);
 }
 
-const char *t_strdup_until(const char *start, const char *end)
+const char *t_strdup_until(const void *start, const void *end)
 {
 	return p_strdup_until(data_stack_pool, start, end);
 }
 
-const char *t_strndup(const char *str, size_t max_chars)
+const char *t_strndup(const void *str, size_t max_chars)
 {
 	return p_strndup(data_stack_pool, str, max_chars);
 }
@@ -460,6 +460,23 @@
 	for (p = str; *p != '\0'; p++)
 		*p = i_tolower(*p);
         return str;
+}
+
+int memcasecmp(const void *p1, const void *p2, size_t size)
+{
+	const unsigned char *s1 = p1;
+	const unsigned char *s2 = p2;
+	int ret;
+
+	while (size > 0) {
+		ret = i_toupper(*s1) - i_toupper(*s2);
+		if (ret != 0)
+			return ret;
+
+		s1++; s2++; size--;
+	}
+
+        return 0;
 }
 
 const char **t_strsplit(const char *data, const char *separators)

Index: strfuncs.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strfuncs.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- strfuncs.h	3 Jan 2003 15:57:12 -0000	1.14
+++ strfuncs.h	4 Jan 2003 17:26:29 -0000	1.15
@@ -14,8 +14,8 @@
 
 char *p_strdup(Pool pool, const char *str);
 char *p_strdup_empty(Pool pool, const char *str); /* return NULL if str = "" */
-char *p_strdup_until(Pool pool, const char *start, const char *end); /* *end isn't included */
-char *p_strndup(Pool pool, const char *str, size_t max_chars);
+char *p_strdup_until(Pool pool, const void *start, const void *end); /* *end isn't included */
+char *p_strndup(Pool pool, const void *str, size_t max_chars);
 char *p_strdup_printf(Pool pool, const char *format, ...) __attr_format__(2, 3);
 char *p_strdup_vprintf(Pool pool, const char *format, va_list args);
 char *p_strconcat(Pool pool, const char *str1, ...); /* NULL terminated */
@@ -24,8 +24,8 @@
 const char *t_strdup(const char *str);
 char *t_strdup_noconst(const char *str);
 const char *t_strdup_empty(const char *str); /* return NULL if str = "" */
-const char *t_strdup_until(const char *start, const char *end); /* *end isn't included */
-const char *t_strndup(const char *str, size_t max_chars);
+const char *t_strdup_until(const void *start, const void *end); /* *end isn't included */
+const char *t_strndup(const void *str, size_t max_chars);
 const char *t_strdup_printf(const char *format, ...) __attr_format__(1, 2);
 const char *t_strdup_vprintf(const char *format, va_list args);
 const char *t_strconcat(const char *str1, ...); /* NULL terminated */
@@ -49,6 +49,8 @@
 
 char *str_ucase(char *str);
 char *str_lcase(char *str);
+
+int memcasecmp(const void *p1, const void *p2, size_t size);
 
 /* seprators is an array of separator characters, not a separator string. */
 const char **t_strsplit(const char *data, const char *separators);




More information about the dovecot-cvs mailing list