diff options
| author | Jonas Suhr Christensen <jsc@umbraculum.org> | 2014-09-23 20:23:14 +0200 | 
|---|---|---|
| committer | Jonas Suhr Christensen <jsc@umbraculum.org> | 2014-09-23 20:23:14 +0200 | 
| commit | 256c76213d44c158577707a3ffd394bf0e94e65a (patch) | |
| tree | 1b32022971872d13ec8f67d021eac0b74d73f956 /plugingui/directory.cc | |
| parent | 32d9c872e7abdaedb497e7403a44470676838ecb (diff) | |
Added config parse.
Diffstat (limited to 'plugingui/directory.cc')
| -rw-r--r-- | plugingui/directory.cc | 40 | 
1 files changed, 29 insertions, 11 deletions
diff --git a/plugingui/directory.cc b/plugingui/directory.cc index 9ebfe70..1465c86 100644 --- a/plugingui/directory.cc +++ b/plugingui/directory.cc @@ -34,9 +34,7 @@  #include <string.h>  #ifdef WIN32 -#ifdef __MINGW32__  #include <direct.h> -#endif  #include <windows.h>  #endif @@ -153,7 +151,7 @@ Directory::EntryList Directory::listFiles(std::string path, unsigned char filter      if(Directory::isRoot(path) && name == "..") continue;      unsigned char entryinfo = 0; -    if(isHidden(name)) { +    if(isHidden(path + SEP + name)) {        entryinfo |= DIRECTORY_HIDDEN;      } @@ -183,8 +181,8 @@ Directory::EntryList Directory::listFiles(std::string path, unsigned char filter  #ifdef WIN32 -	DEBUG(directory, "root is %s\n", Directory::root(path).c_str());  -	DEBUG(directory, "current path %s is root? %d", path.c_str(), Directory::isRoot(path));  +	DEBUG(directory, "Root is %s\n", Directory::root(path).c_str());  +	DEBUG(directory, "Current path %s is root? %d", path.c_str(), Directory::isRoot(path));   if(Directory::isRoot(path)) entries.push_back("..");   #endif @@ -291,15 +289,15 @@ bool Directory::isDir()  bool Directory::isDir(std::string path)  { -  DEBUG(directory, "Is '%s' dir?\n", path.c_str()); +  DEBUG(directory, "Is '%s' a directory?\n", path.c_str());    struct stat st;    if(stat(path.c_str(), &st) == 0) {      if((st.st_mode & S_IFDIR) != 0) { -      DEBUG(directory, "Yes\n"); +      DEBUG(directory, "\t...yes!\n");        return true;      }    } -  DEBUG(directory, "No\n"); +  DEBUG(directory, "\t...no!\n");    return false;  } @@ -320,19 +318,39 @@ bool Directory::exists(std::string path)  bool Directory::isHidden(std::string path)   { -  // TODO: Handle hidden and system files in windows +  DEBUG(directory, "Is '%s' hidden?\n", path.c_str());  #ifdef WIN32 -  return false; -#else +  // We dont want to filter out '..' pointing to root of a partition    unsigned pos = path.find_last_of("/\\");    std::string entry = path.substr(pos+1); +  if(entry == "..") { +    return false; +  } +  DWORD fattribs = GetFileAttributes(path.c_str()); +  if(fattribs & FILE_ATTRIBUTE_HIDDEN) { +    DEBUG(directory, "\t...yes!\n"); +    return true; +  } +  else if(fattribs & FILE_ATTRIBUTE_SYSTEM) { +    DEBUG(directory, "\t...yes!\n"); +    return true; +  } +  else { +    DEBUG(directory, "\t...no!\n"); +    return false; +  } +#else +  unsigned pos = path.find_last_of("/\\"); +  std::string entry = path.substr(pos+1);    if(entry.size() > 1 &&       entry.at(0) == '.' &&       entry.at(1) != '.') { +    DEBUG(directory, "\t...yes!\n");      return true;    }    else { +    DEBUG(directory, "\t...no!\n");      return false;    }  #endif  | 
