diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-01 01:24:23 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-01 01:24:23 +0000 |
commit | 10bb9e6faba749c3e9656b9088da77b3f1146937 (patch) | |
tree | 75c147df0d9fd813cfb7dace70739c2b2b6dcccc | |
parent | ff113d52f799d433b6d5d96f86944d2d761e3530 (diff) |
missing.h: explicit_bzero by memset_s
* include/ruby/missing.h (explicit_bzero_by_memset_s): call
memset_s directly if available.
* missing/explicit_bzero.c: optimization is not a matter if
memset_s is available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | include/ruby/missing.h | 9 | ||||
-rw-r--r-- | missing/explicit_bzero.c | 4 |
2 files changed, 13 insertions, 0 deletions
diff --git a/include/ruby/missing.h b/include/ruby/missing.h index 24156bf343..a06cea2ba4 100644 --- a/include/ruby/missing.h +++ b/include/ruby/missing.h @@ -244,6 +244,15 @@ RUBY_EXTERN void setproctitle(const char *fmt, ...); #ifndef HAVE_EXPLICIT_BZERO RUBY_EXTERN void explicit_bzero(void *b, size_t len); +# ifdef HAVE_MEMSET_S +# include <string.h> +static inline void +explicit_bzero_by_memset_s(void *b, size_t len) +{ + memset_s(b, len, 0, len); +} +# define explicit_bzero(b, len) explicit_bzero_by_memset_s(b, len) +# endif #endif RUBY_SYMBOL_EXPORT_END diff --git a/missing/explicit_bzero.c b/missing/explicit_bzero.c index e7bb11e69f..c1933bf1ff 100644 --- a/missing/explicit_bzero.c +++ b/missing/explicit_bzero.c @@ -19,7 +19,11 @@ #ifndef HAVE_EXPLICIT_BZERO /* Similar to bzero(), but have a guarantee not to be eliminated from compiler optimization. */ + +#ifndef HAVE_MEMSET_S FUNC_UNOPTIMIZED(void explicit_bzero(void *b, size_t len)); +#endif +#undef explicit_bzero void explicit_bzero(void *b, size_t len) |