]> git.mxchange.org Git - simgear.git/commitdiff
Much shorter version of Dir::isEmpty()
authorErik Hofman <erik@ehofman.com>
Sun, 3 Jul 2016 07:35:03 +0000 (09:35 +0200)
committerRoland Haeder <roland@mxchange.org>
Sat, 13 Aug 2016 08:21:16 +0000 (10:21 +0200)
simgear/misc/sg_dir.cxx

index ca324c2f7604a70e764f8df9cfd38acfd19e34c4..8323e3f93dec3a32ad0868dc0343801cce20f2e8 100644 (file)
@@ -271,54 +271,20 @@ PathList Dir::children(int types, const std::string& nameFilter) const
 
 bool Dir::isEmpty() const
 {
-  bool empty= true;
   std::string ps = _path.local8BitStr();
 #ifdef _WIN32 
-  ps += "\\*";
-  WIN32_FIND_DATA fData;
-  HANDLE find = FindFirstFile(ps.c_str(), &fData);
-  if (find == INVALID_HANDLE_VALUE) {
-    return true;
-  }
-  
-// since an empty dir will still have . and .. children, we need
-// watch for those - anything else means the dir is really non-empty
-  bool done = false;
-  for (; !done; done = (FindNextFile(find, &fData) == 0)) {
-    if (fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-                 if (!strcmp(fData.cFileName,".") || !strcmp(fData.cFileName,"..")) {
-                   continue;
-                 }
-         }
-    
-    empty = false;
-    break;
-  }
-    
-  FindClose(find);
+  return PathIsDirectoryEmpty( ps.c_str() );
 #else
+  DIR* dp = opendir( ps.c_str() );
+  if (!dp) return true;
 
-  DIR* dp = opendir(ps.c_str());
-  if (!dp) {
-    return true;
-  }
-    
-  while (true) {
-    struct dirent* entry = readdir(dp);
-    if (!entry) {
-      break; // done iteration
-    }
-    
-    if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
-      continue;
-    }
-      
-    empty = false;
-    break;
-  }
+  int n = 0;
+  dirent* d;
+  while( (d = readdir(dp)) !=NULL ) n++;
   closedir(dp);
+
+  return (n == 2); // '.' and '..' always exist
 #endif
-  return empty;
 }
 
 bool Dir::exists() const