blob: 7cba7b51bdce25cb4befbb25810205115ea93221 [file] [log] [blame]
Dennis Syrovatsky110e7ee2005-10-19 07:01:41 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
2 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 *
18 * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
19 *
20 */
21
22// -=- FolderManager.cxx
23
24#include <rfb_win32/FolderManager.h>
25
26using namespace rfb;
27using namespace rfb::win32;
28
29FolderManager::FolderManager()
30{
31
32}
33
34FolderManager::~FolderManager()
35{
36
37}
38
39bool
40FolderManager::createDir(char *pFullPath)
41{
Dennis Syrovatsky514c3072005-10-19 07:34:40 +000042 if (CreateDirectory(pFullPath, NULL) == 0) return false;
43
44 return true;
Dennis Syrovatsky110e7ee2005-10-19 07:01:41 +000045}
46
47bool
48FolderManager::renameDir(char *pOldName, char *pNewName)
49{
Dennis Syrovatsky514c3072005-10-19 07:34:40 +000050 if (MoveFile(pOldName, pNewName)) return true;
51
Dennis Syrovatsky110e7ee2005-10-19 07:01:41 +000052 return false;
53}
54
55bool
56FolderManager::deleteDir(char *pFullPath)
57{
58 return false;
59}
60
61bool
Dennis Syrovatsky84ea20f2005-10-19 07:46:31 +000062FolderManager::getFolderInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly)
Dennis Syrovatsky110e7ee2005-10-19 07:01:41 +000063{
Dennis Syrovatsky84ea20f2005-10-19 07:46:31 +000064 if (strlen(pPath) == 0) return getDrivesInfo(pFileInfo);
65
66 char path[FT_FILENAME_SIZE];
67 sprintf(path, "%s\\*", pPath);
68
69 WIN32_FIND_DATA FindFileData;
70 SetErrorMode(SEM_FAILCRITICALERRORS);
71 HANDLE handle = FindFirstFile(path, &FindFileData);
72 DWORD lastError = GetLastError();
73 SetErrorMode(0);
74
75 if (handle != INVALID_HANDLE_VALUE) {
76 do {
77 if (strcmp(FindFileData.cFileName, ".") != 0 &&
78 strcmp(FindFileData.cFileName, "..") != 0) {
79 LARGE_INTEGER li;
80 li.LowPart = FindFileData.ftLastWriteTime.dwLowDateTime;
81 li.HighPart = FindFileData.ftLastWriteTime.dwHighDateTime;
82 li.QuadPart = (li.QuadPart - 116444736000000000) / 10000000;
83 if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
84 pFileInfo->add(FindFileData.cFileName, 0, li.LowPart, FT_ATTR_FOLDER);
85 } else {
86 if (!dirOnly)
87 pFileInfo->add(FindFileData.cFileName, FindFileData.nFileSizeLow, li.LowPart, FT_ATTR_FILE);
88 }
89 }
90
91 } while (FindNextFile(handle, &FindFileData));
92 } else {
93 return false;
94 }
95 FindClose(handle);
96 return true;
97}
98
99bool
100FolderManager::getDrivesInfo(FileInfo *pFileInfo)
101{
102 TCHAR szDrivesList[256];
103 if (GetLogicalDriveStrings(255, szDrivesList) == 0)
104 return false;
105
106 int i = 0;
107 while (szDrivesList[i] != '\0') {
108 char *drive = strdup(&szDrivesList[i]);
109 char *backslash = strrchr(drive, '\\');
110 if (backslash != NULL)
111 *backslash = '\0';
112 pFileInfo->add(drive, 0, 0, FT_ATTR_FOLDER);
113 free(drive);
114 i += strcspn(&szDrivesList[i], "\0") + 1;
115 }
116 return true;
Dennis Syrovatsky110e7ee2005-10-19 07:01:41 +0000117}