aboutsummaryrefslogtreecommitdiffstats
path: root/rfb_win32
diff options
context:
space:
mode:
authorDennis Syrovatsky <dennis@tightvnc.com>2005-10-19 07:46:31 +0000
committerDennis Syrovatsky <dennis@tightvnc.com>2005-10-19 07:46:31 +0000
commit84ea20fbd67d760b1fb214cb4413258ecf8b24bd (patch)
tree6df699679069c28d40473bb31e946a3ddfd77244 /rfb_win32
parent514c3073848d84131555d41793b31ab780ce5b76 (diff)
downloadtigervnc-84ea20fbd67d760b1fb214cb4413258ecf8b24bd.tar.gz
tigervnc-84ea20fbd67d760b1fb214cb4413258ecf8b24bd.zip
Added getFolderInfo and getDrivesInfo methods to FolderManager class.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@353 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'rfb_win32')
-rw-r--r--rfb_win32/FolderManager.cxx56
-rw-r--r--rfb_win32/FolderManager.h3
2 files changed, 56 insertions, 3 deletions
diff --git a/rfb_win32/FolderManager.cxx b/rfb_win32/FolderManager.cxx
index 98f70961..7cba7b51 100644
--- a/rfb_win32/FolderManager.cxx
+++ b/rfb_win32/FolderManager.cxx
@@ -59,7 +59,59 @@ FolderManager::deleteDir(char *pFullPath)
}
bool
-FolderManager::getDirInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly)
+FolderManager::getFolderInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly)
{
- return false;
+ if (strlen(pPath) == 0) return getDrivesInfo(pFileInfo);
+
+ char path[FT_FILENAME_SIZE];
+ sprintf(path, "%s\\*", pPath);
+
+ WIN32_FIND_DATA FindFileData;
+ SetErrorMode(SEM_FAILCRITICALERRORS);
+ HANDLE handle = FindFirstFile(path, &FindFileData);
+ DWORD lastError = GetLastError();
+ SetErrorMode(0);
+
+ if (handle != INVALID_HANDLE_VALUE) {
+ do {
+ if (strcmp(FindFileData.cFileName, ".") != 0 &&
+ strcmp(FindFileData.cFileName, "..") != 0) {
+ LARGE_INTEGER li;
+ li.LowPart = FindFileData.ftLastWriteTime.dwLowDateTime;
+ li.HighPart = FindFileData.ftLastWriteTime.dwHighDateTime;
+ li.QuadPart = (li.QuadPart - 116444736000000000) / 10000000;
+ if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ pFileInfo->add(FindFileData.cFileName, 0, li.LowPart, FT_ATTR_FOLDER);
+ } else {
+ if (!dirOnly)
+ pFileInfo->add(FindFileData.cFileName, FindFileData.nFileSizeLow, li.LowPart, FT_ATTR_FILE);
+ }
+ }
+
+ } while (FindNextFile(handle, &FindFileData));
+ } else {
+ return false;
+ }
+ FindClose(handle);
+ return true;
+}
+
+bool
+FolderManager::getDrivesInfo(FileInfo *pFileInfo)
+{
+ TCHAR szDrivesList[256];
+ if (GetLogicalDriveStrings(255, szDrivesList) == 0)
+ return false;
+
+ int i = 0;
+ while (szDrivesList[i] != '\0') {
+ char *drive = strdup(&szDrivesList[i]);
+ char *backslash = strrchr(drive, '\\');
+ if (backslash != NULL)
+ *backslash = '\0';
+ pFileInfo->add(drive, 0, 0, FT_ATTR_FOLDER);
+ free(drive);
+ i += strcspn(&szDrivesList[i], "\0") + 1;
+ }
+ return true;
}
diff --git a/rfb_win32/FolderManager.h b/rfb_win32/FolderManager.h
index ad23c3de..15aa238f 100644
--- a/rfb_win32/FolderManager.h
+++ b/rfb_win32/FolderManager.h
@@ -40,7 +40,8 @@ namespace rfb {
bool renameDir(char *pOldName, char *pNewName);
bool deleteDir(char *pFullPath);
- bool getDirInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly);
+ bool getFolderInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly);
+ bool getDrivesInfo(FileInfo *pFI);
};
}
}