dovecot-2.2-pigeonhole: lib-sieve: Made binary code functions ca...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Wed Jul 30 11:50:58 UTC 2014


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/cd971c1c21e2
changeset: 1899:cd971c1c21e2
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Wed Jul 30 13:49:24 2014 +0200
description:
lib-sieve: Made binary code functions capable of skipping data.

diffstat:

 src/lib-sieve/sieve-binary-code.c |  19 ++++++++++++-------
 src/lib-sieve/sieve-binary.h      |  17 +++++++++--------
 2 files changed, 21 insertions(+), 15 deletions(-)

diffs (112 lines):

diff -r 6bdcdfeaf5d7 -r cd971c1c21e2 src/lib-sieve/sieve-binary-code.c
--- a/src/lib-sieve/sieve-binary-code.c	Wed Jul 30 00:15:08 2014 +0200
+++ b/src/lib-sieve/sieve-binary-code.c	Wed Jul 30 13:49:24 2014 +0200
@@ -233,7 +233,8 @@
 		return TRUE;
 	}
 
-	*byte_r = 0;
+	if ( byte_r != NULL )
+		*byte_r = 0;
 	return FALSE;
 }
 
@@ -250,7 +251,8 @@
 		return TRUE;
 	}
 
-	*code_r = 0;
+	if ( code_r != NULL )
+		*code_r = 0;
 	return FALSE;
 }
 
@@ -283,7 +285,7 @@
 (struct sieve_binary_block *sblock, sieve_size_t *address, sieve_number_t *int_r)
 {
 	int bits = sizeof(sieve_number_t) * 8;
-	*int_r = 0;
+	sieve_number_t integer = 0;
 
 	ADDR_CODE_READ(sblock);
 
@@ -293,11 +295,11 @@
 	/* Read first integer bytes [1xxxxxxx] */
 	while ( (ADDR_DATA_AT(address) & 0x80) > 0 ) {
 		if ( ADDR_BYTES_LEFT(address) > 0 && bits > 0) {
-			*int_r |= ADDR_DATA_AT(address) & 0x7F;
+			integer |= ADDR_DATA_AT(address) & 0x7F;
 			ADDR_JUMP(address, 1);
 
 			/* Each byte encodes 7 bits of the integer */
-			*int_r <<= 7;
+			integer <<= 7;
 			bits -= 7;
 		} else {
 			/* This is an error */
@@ -306,9 +308,11 @@
 	}
 
 	/* Read last byte [0xxxxxxx] */
-	*int_r |= ADDR_DATA_AT(address) & 0x7F;
+	integer |= ADDR_DATA_AT(address) & 0x7F;
 	ADDR_JUMP(address, 1);
 
+	if ( int_r != NULL )
+		*int_r = integer;
 	return TRUE;
 }
 
@@ -363,7 +367,8 @@
 			return FALSE;
 	}
 
-	(*ext_r) = ext;
+	if ( ext_r != NULL )
+		(*ext_r) = ext;
 
 	return TRUE;
 }
diff -r 6bdcdfeaf5d7 -r cd971c1c21e2 src/lib-sieve/sieve-binary.h
--- a/src/lib-sieve/sieve-binary.h	Wed Jul 30 00:15:08 2014 +0200
+++ b/src/lib-sieve/sieve-binary.h	Wed Jul 30 13:49:24 2014 +0200
@@ -206,30 +206,31 @@
 
 bool sieve_binary_read_byte
 	(struct sieve_binary_block *sblock, sieve_size_t *address,
-		unsigned int *byte_r);
+		unsigned int *byte_r) ATTR_NULL(3);
 bool sieve_binary_read_code
 	(struct sieve_binary_block *sblock, sieve_size_t *address,
-		signed int *code_r);
+		signed int *code_r) ATTR_NULL(3);
 bool sieve_binary_read_offset
 	(struct sieve_binary_block *sblock, sieve_size_t *address,
-		sieve_offset_t *offset_r);
+		sieve_offset_t *offset_r) ATTR_NULL(3);
 bool sieve_binary_read_integer
   (struct sieve_binary_block *sblock, sieve_size_t *address,
-		sieve_number_t *int_r);
+		sieve_number_t *int_r) ATTR_NULL(3);
 bool sieve_binary_read_string
   (struct sieve_binary_block *sblock, sieve_size_t *address,
-		string_t **str_r);
+		string_t **str_r) ATTR_NULL(3);
 
 static inline bool sieve_binary_read_unsigned
 (struct sieve_binary_block *sblock, sieve_size_t *address,
-	unsigned int *count_r)
+	unsigned int *count_r) ATTR_NULL(3)
 {
-	sieve_number_t integer;
+	sieve_number_t integer = 0;
 
 	if ( !sieve_binary_read_integer(sblock, address, &integer) )
 		return FALSE;
 
-	*count_r = integer;
+	if ( count_r != NULL )
+		*count_r = integer;
 
 	return TRUE;
 }


More information about the dovecot-cvs mailing list