[lvm-devel] master - tests: GLIBC decided to obsolete readdir_r
Zdenek Kabelac
zkabelac at fedoraproject.org
Thu Apr 21 15:48:50 UTC 2016
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=11dd36245450ed664c4a6bd177f17a8077c820a1
Commit: 11dd36245450ed664c4a6bd177f17a8077c820a1
Parent: 1134ab63240de66850c30fe1576bbb8b4f3e7052
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Thu Apr 21 15:30:14 2016 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Apr 21 17:48:19 2016 +0200
tests: GLIBC decided to obsolete readdir_r
Keep the code compilatible without warnings on newer glibc.
---
test/lib/brick-shelltest.h | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/test/lib/brick-shelltest.h b/test/lib/brick-shelltest.h
index be7c3fe..b48253b 100644
--- a/test/lib/brick-shelltest.h
+++ b/test/lib/brick-shelltest.h
@@ -122,11 +122,17 @@ inline Listing listdir( std::string p, bool recurse = false, std::string prefix
Listing r;
dir d( p );
+#if !defined(__GLIBC__) || (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 23))
+ /* readdir_r is deprecated with newer GLIBC */
struct dirent entry, *iter = 0;
- int readerr;
-
- while ( (readerr = readdir_r( d.d, &entry, &iter )) == 0 && iter ) {
+ while ( (errno = readdir_r( d.d, &entry, &iter )) == 0 && iter ) {
std::string ename( entry.d_name );
+#else
+ struct dirent *entry;
+ errno = 0;
+ while ( (entry = readdir( d.d )) ) {
+ std::string ename( entry->d_name );
+#endif
if ( ename == "." || ename == ".." )
continue;
@@ -134,8 +140,10 @@ inline Listing listdir( std::string p, bool recurse = false, std::string prefix
if ( recurse ) {
struct stat64 stat;
std::string s = p + "/" + ename;
- if ( ::stat64( s.c_str(), &stat ) == -1 )
+ if ( ::stat64( s.c_str(), &stat ) == -1 ) {
+ errno = 0;
continue;
+ }
if ( S_ISDIR(stat.st_mode) ) {
Listing sl = listdir( s, true, prefix + ename + "/" );
for ( Listing::iterator i = sl.begin(); i != sl.end(); ++i )
@@ -146,7 +154,7 @@ inline Listing listdir( std::string p, bool recurse = false, std::string prefix
r.push_back( ename );
};
- if ( readerr != 0 )
+ if ( errno != 0 )
throw syserr( "error reading directory", p );
return r;
More information about the lvm-devel
mailing list