summaryrefslogtreecommitdiff
path: root/strings/apr_strings.c
diff options
context:
space:
mode:
authorIvan Zhakov <ivan@apache.org>2022-06-29 14:46:27 +0000
committerIvan Zhakov <ivan@apache.org>2022-06-29 14:46:27 +0000
commit166a06a11e80a5479a806ebb5a213d1c3e547fc7 (patch)
tree020cb3a94ba821cb6147bd6810ddc4cbe3e08aaf /strings/apr_strings.c
parent9aab4125498301f37c769e761cdababdab196b63 (diff)
parent4000041d0ea6f7fccea67d2ac3d8205270b1cf1a (diff)
downloadapr-thread-name.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.c32
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)
{