From bc34a5a774095b639bef86ca3b9383b8082c8b87 Mon Sep 17 00:00:00 2001 From: Chip Turner Date: Mon, 11 May 2015 15:39:21 -0700 Subject: [PATCH] Make strlcpy available in folly Summary: strncpy is bad. strlcpy is somewhat less bad. We already had this function, but let's move it somewhere more reasonable. Test Plan: runtests Reviewed By: ldbrandy@fb.com Subscribers: trunkagent, lins, anca, folly-diffs@, yfeldblum, chalfant FB internal diff: D2062632 Signature: t1:2062632:1431969926:cc7f7283073d0242fe8f361efac2557aa0b0a481 --- folly/Demangle.cpp | 20 +++----------------- folly/String.cpp | 10 ++++++++++ folly/String.h | 3 +++ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/folly/Demangle.cpp b/folly/Demangle.cpp index ee587268..b6cadfe7 100644 --- a/folly/Demangle.cpp +++ b/folly/Demangle.cpp @@ -20,6 +20,7 @@ #include #include +#include #if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK # include @@ -55,21 +56,6 @@ extern "C" int cplus_demangle_v3_callback( #endif -namespace { - -// glibc doesn't have strlcpy -size_t my_strlcpy(char* dest, const char* src, size_t size) { - size_t len = strlen(src); - if (size != 0) { - size_t n = std::min(len, size - 1); // always null terminate! - memcpy(dest, src, n); - dest[n] = '\0'; - } - return len; -} - -} // namespace - namespace folly { #if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK @@ -119,7 +105,7 @@ size_t demangle(const char* name, char* out, size_t outSize) { demangleCallback, &dbuf); if (status == 0) { // failed, return original - return my_strlcpy(out, name, outSize); + return folly::strlcpy(out, name, outSize); } if (outSize != 0) { *dbuf.dest = '\0'; @@ -134,7 +120,7 @@ fbstring demangle(const char* name) { } size_t demangle(const char* name, char* out, size_t outSize) { - return my_strlcpy(out, name, outSize); + return folly::strlcpy(out, name, outSize); } #endif diff --git a/folly/String.cpp b/folly/String.cpp index 337b7e37..b1f0a856 100644 --- a/folly/String.cpp +++ b/folly/String.cpp @@ -492,6 +492,16 @@ void toLowerAscii(char* str, size_t length) { } } +size_t strlcpy(char* dest, const char* const src, size_t size) { + size_t len = strlen(src); + if (size != 0) { + size_t n = std::min(len, size - 1); // always null terminate! + memcpy(dest, src, n); + dest[n] = '\0'; + } + return len; +} + namespace detail { size_t hexDumpLine(const void* ptr, size_t offset, size_t size, diff --git a/folly/String.h b/folly/String.h index ef0ef3f6..9ce4be65 100644 --- a/folly/String.h +++ b/folly/String.h @@ -569,6 +569,9 @@ inline void toLowerAscii(MutableStringPiece str) { toLowerAscii(str.begin(), str.size()); } +// glibc doesn't have strlcpy +size_t strlcpy(char* dest, const char* const src, size_t size); + } // namespace folly // Hook into boost's type traits -- 2.34.1