From: Brian Behlendorf Date: Mon, 28 Jan 2013 17:53:51 +0000 (-0800) Subject: Use strerror() not strerror_r() X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=commitdiff_plain;h=14ee71efbc28086406bb255f2292b9535d845625;p=zfs.git Use strerror() not strerror_r() The differ() function used strerror_r() instead of strerror() because it allowed the error message to be directly copied in to a buffer. This causes two issues under Linux. * There are two versions of strerror_r() available an XSI-compliant version which returns an 'int' error code. And a GNU-specific version which return a 'char *' to the resulting error string. int strerror_r(int errnum, char *buf, size_t buflen); /* XSI */ char *strerror_r(int errnum, char *buf, size_t buflen); /* GNU */ * The most recent versions of strerror_r() are annotated with the warn_unused_result attribute. This causes the following warning since the upstream implementation casts the result to void. warning: ignoring return value of 'strerror_r', declared with attribute warn_unused_result [-Wunused-result] The cleanest way to resolve both of these problems is just to use strerror() and make a copy of the result in to the buffer. This resolves both issues and this is the only instance of strerror_r() in the code base. Signed-off-by: Brian Behlendorf Closes #1231 --- diff --git a/lib/libzfs/libzfs_diff.c b/lib/libzfs/libzfs_diff.c index eb05f4d..77d5a09 100644 --- a/lib/libzfs/libzfs_diff.c +++ b/lib/libzfs/libzfs_diff.c @@ -430,7 +430,7 @@ differ(void *arg) if ((ofp = fdopen(di->outputfd, "w")) == NULL) { di->zerr = errno; - (void) strerror_r(errno, di->errbuf, sizeof (di->errbuf)); + strncpy(di->errbuf, strerror(errno), sizeof (di->errbuf)); (void) close(di->datafd); return ((void *)-1); }