Replace the use of strncpy() and sprintf() with std::string and LLVM streams.
authorDmitri Gribenko <gribozavr@gmail.com>
Fri, 28 Sep 2012 14:15:28 +0000 (14:15 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Fri, 28 Sep 2012 14:15:28 +0000 (14:15 +0000)
Patch by Martinez, Javier E.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164822 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Errno.cpp

index dd218f60990e5ef40f9767062acdc6a78e99e64c..00be43b75037cdb67c996ae0fefaac0ee8938bbf 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "llvm/Support/Errno.h"
 #include "llvm/Config/config.h"     // Get autoconf configuration settings
+#include "llvm/Support/raw_ostream.h"
 
 #if HAVE_STRING_H
 #include <string.h>
@@ -39,7 +40,7 @@ std::string StrError(int errnum) {
   const int MaxErrStrLen = 2000;
   char buffer[MaxErrStrLen];
   buffer[0] = '\0';
-  char* str = buffer;
+  std::string str;
 #ifdef HAVE_STRERROR_R
   // strerror_r is thread-safe.
   if (errnum)
@@ -49,6 +50,7 @@ std::string StrError(int errnum) {
     str = strerror_r(errnum,buffer,MaxErrStrLen-1);
 # else
     strerror_r(errnum,buffer,MaxErrStrLen-1);
+    str = buffer;
 # endif
 #elif HAVE_DECL_STRERROR_S // "Windows Secure API"
     if (errnum)
@@ -58,12 +60,13 @@ std::string StrError(int errnum) {
   // the buffer as fast as possible to minimize impact
   // of collision of strerror in multiple threads.
   if (errnum)
-    strncpy(buffer,strerror(errnum),MaxErrStrLen-1);
-  buffer[MaxErrStrLen-1] = '\0';
+    str = strerror(errnum);
 #else
   // Strange that this system doesn't even have strerror
   // but, oh well, just use a generic message
-  sprintf(buffer, "Error #%d", errnum);
+  raw_string_ostream stream(str);
+  stream << "Error #" << errnum;
+  stream.flush();
 #endif
   return str;
 }