Mercurial > dovecot > core-2.2
annotate src/lib/safe-memset.c @ 23007:36e01285b5b8
lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author | Stephan Bosch <stephan.bosch@dovecot.fi> |
---|---|
date | Mon, 18 Mar 2019 00:52:37 +0100 |
parents | cb108f786fb4 |
children |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21390
diff
changeset
|
1 /* Copyright (c) 2002-2018 Dovecot authors, see the included COPYING file */ |
804
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "safe-memset.h" |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 void safe_memset(void *data, int c, size_t size) |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 { |
17247
09c114091c88
safe_memset() wasn't safe with modern compilers anymore.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
8 volatile unsigned int volatile_zero_idx = 0; |
804
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 volatile unsigned char *p = data; |
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 |
17265
eae44873dbc2
safe_memset(size=0) triggered read access to data[0], possibly crashing.
Timo Sirainen <tss@iki.fi>
parents:
17247
diff
changeset
|
11 if (size == 0) |
eae44873dbc2
safe_memset(size=0) triggered read access to data[0], possibly crashing.
Timo Sirainen <tss@iki.fi>
parents:
17247
diff
changeset
|
12 return; |
eae44873dbc2
safe_memset(size=0) triggered read access to data[0], possibly crashing.
Timo Sirainen <tss@iki.fi>
parents:
17247
diff
changeset
|
13 |
17247
09c114091c88
safe_memset() wasn't safe with modern compilers anymore.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
14 do { |
09c114091c88
safe_memset() wasn't safe with modern compilers anymore.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
15 memset(data, c, size); |
09c114091c88
safe_memset() wasn't safe with modern compilers anymore.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
16 } while (p[volatile_zero_idx] != c); |
804
bf38c8f30a4c
Added safe_memset() which guarantees that compiler optimizations don't
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 } |