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