strerror_r is XSI compliant on Apple/FreeBSD
authorSean Cannella <seanc@fb.com>
Mon, 1 Jul 2013 15:06:12 +0000 (08:06 -0700)
committerSara Golemon <sgolemon@fb.com>
Mon, 1 Jul 2013 19:57:43 +0000 (12:57 -0700)
Summary:
- Noticed this due to an -fpermissive compiler warning while compiling
HHVM for OSX (complaint of trying to cast int to char*)

Test Plan:
- Compiled
- Confirmed the build warning is fixed by this on the Mac OS X build

Reviewed By: tudorb@fb.com

FB internal diff: D865169

folly/String.cpp

index 4f1303eeaa9f44c643d4b15b404e46f4880d1a17..aae439fc1616d6037093b867ca94627bf448aa31 100644 (file)
@@ -241,12 +241,15 @@ fbstring errnoStr(int err) {
 
   fbstring result;
 
+  // https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/strerror_r.3.html
   // http://www.kernel.org/doc/man-pages/online/pages/man3/strerror.3.html
-#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE
+#if defined(__APPLE__) || defined(__FreeBSD__) || \
+    ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE)
   // Using XSI-compatible strerror_r
   int r = strerror_r(err, buf, sizeof(buf));
 
-  if (r == -1) {
+  // OSX/FreeBSD use EINVAL and Linux uses -1 so just check for non-zero
+  if (r != 0) {
     result = to<fbstring>(
       "Unknown error ", err,
       " (strerror_r failed with error ", errno, ")");