diff options
author | Ivan Zhakov <ivan@apache.org> | 2022-06-29 14:46:27 +0000 |
---|---|---|
committer | Ivan Zhakov <ivan@apache.org> | 2022-06-29 14:46:27 +0000 |
commit | 166a06a11e80a5479a806ebb5a213d1c3e547fc7 (patch) | |
tree | 020cb3a94ba821cb6147bd6810ddc4cbe3e08aaf /strings/apr_strings.c | |
parent | 9aab4125498301f37c769e761cdababdab196b63 (diff) | |
parent | 4000041d0ea6f7fccea67d2ac3d8205270b1cf1a (diff) | |
download | apr-166a06a11e80a5479a806ebb5a213d1c3e547fc7.tar.gz |
On 'thread-name' branch: Merge changes from trunk.thread-name
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/thread-name@1902353 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'strings/apr_strings.c')
-rw-r--r-- | strings/apr_strings.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/strings/apr_strings.c b/strings/apr_strings.c index beca6d480..2519f95b9 100644 --- a/strings/apr_strings.c +++ b/strings/apr_strings.c @@ -212,6 +212,38 @@ APR_DECLARE(char *) apr_pstrcatv(apr_pool_t *a, const struct iovec *vec, return res; } +#if defined(HAVE_WEAK_SYMBOLS) +void apr__memzero_explicit(void *buffer, apr_size_t size); + +__attribute__ ((weak)) +void apr__memzero_explicit(void *buffer, apr_size_t size) +{ + memset(buffer, 0, size); +} +#endif + +APR_DECLARE(apr_status_t) apr_memzero_explicit(void *buffer, apr_size_t size) +{ +#if defined(WIN32) + SecureZeroMemory(buffer, size); +#elif defined(HAVE_EXPLICIT_BZERO) + explicit_bzero(buffer, size); +#elif defined(HAVE_MEMSET_S) + if (size) { + return memset_s(buffer, (rsize_t)size, 0, (rsize_t)size); + } +#elif defined(HAVE_WEAK_SYMBOLS) + apr__memzero_explicit(buffer, size); +#else + apr_size_t i; + volatile unsigned char *volatile ptr = buffer; + for (i = 0; i < size; ++i) { + ptr[i] = 0; + } +#endif + return APR_SUCCESS; +} + #if (!APR_HAVE_MEMCHR) void *memchr(const void *s, int c, size_t n) { |