- Timestamp:
- Dec 4, 2000, 1:42:22 PM (25 years ago)
- File:
-
- 1 edited
-
trunk/src/kernel32/disk.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/disk.cpp
r4749 r4753 1 /* $Id: disk.cpp,v 1.2 1 2000-12-03 22:20:31 sandervlExp $ */1 /* $Id: disk.cpp,v 1.22 2000-12-04 12:42:22 bird Exp $ */ 2 2 3 3 /* … … 22 22 #include "oslibdos.h" 23 23 #include "exceptutil.h" 24 #include "profile.h" 24 25 25 26 #define DBG_LOCALLOG DBG_disk … … 56 57 //****************************************************************************** 57 58 ODINFUNCTION5(BOOL, GetDiskFreeSpaceA, 58 LPCSTR, arg1, 59 LPCSTR, arg1, 59 60 PDWORD, arg2, 60 61 PDWORD, arg3, … … 63 64 { 64 65 BOOL rc; 65 DWORD dwSectorsPerCluster; // address of sectors per cluster ter66 DWORD dwBytesPerSector; // address of bytes per sector67 DWORD dwNumberOfFreeClusters; // address of number of free clusters68 DWORD dwTotalNumberOfClusters; // address of total number of clusters69 66 DWORD dwSectorsPerCluster; // address of sectors per cluster ter 67 DWORD dwBytesPerSector; // address of bytes per sector 68 DWORD dwNumberOfFreeClusters; // address of number of free clusters 69 DWORD dwTotalNumberOfClusters; // address of total number of clusters 70 70 71 dprintf(("KERNEL32: GetDiskFreeSpaceA %s, 0x%08X, 0x%08X, 0x%08X, 0x%08X,\n", 71 72 arg1!=NULL?arg1:"NULL", arg2,arg3,arg4,arg5)); … … 87 88 a TVFS drive. This fakes the clustersizes to 32. The following 88 89 entry must be present in ODIN.INI: 89 90 90 91 [DRIVESPACE] 91 92 TVFSTOHPFS = 1 … … 103 104 104 105 } 105 106 106 107 return rc; 107 108 } … … 174 175 { 175 176 BOOL rc; 176 DWORD dwSectorsPerCluster; // address of sectors per cluster ter177 DWORD dwBytesPerSector; // address of bytes per sector178 DWORD dwNumberOfFreeClusters; // address of number of free clusters179 DWORD dwTotalNumberOfClusters; // address of total number of clusters177 DWORD dwSectorsPerCluster; // address of sectors per cluster ter 178 DWORD dwBytesPerSector; // address of bytes per sector 179 DWORD dwNumberOfFreeClusters; // address of number of free clusters 180 DWORD dwTotalNumberOfClusters; // address of total number of clusters 180 181 181 182 rc = GetDiskFreeSpaceA(lpDirectoryName, &dwSectorsPerCluster, &dwBytesPerSector, … … 183 184 if(rc) 184 185 { 185 if(lpFreeBytesAvailableToCaller!=NULL) {186 Mul32x32to64(lpFreeBytesAvailableToCaller, dwNumberOfFreeClusters, (dwSectorsPerCluster*dwBytesPerSector));187 dprintf(("lpFreeBytesAvailableToCaller %x%x", lpFreeBytesAvailableToCaller->LowPart, lpFreeBytesAvailableToCaller->HighPart));188 }189 if(lpTotalNumberOfBytes!=NULL) {190 Mul32x32to64(lpTotalNumberOfBytes, dwTotalNumberOfClusters, (dwSectorsPerCluster*dwBytesPerSector));191 dprintf(("lpTotalNumberOfBytes %x%x", lpTotalNumberOfBytes->LowPart, lpTotalNumberOfBytes->HighPart));192 }193 if(lpTotalNumberOfFreeBytes!=NULL) {194 memcpy(lpTotalNumberOfFreeBytes, lpFreeBytesAvailableToCaller, sizeof(*lpFreeBytesAvailableToCaller));195 dprintf(("lpTotalNumberOfFreeBytes %x%x", lpTotalNumberOfFreeBytes->LowPart, lpTotalNumberOfFreeBytes->HighPart));196 }186 if(lpFreeBytesAvailableToCaller!=NULL) { 187 Mul32x32to64(lpFreeBytesAvailableToCaller, dwNumberOfFreeClusters, (dwSectorsPerCluster*dwBytesPerSector)); 188 dprintf(("lpFreeBytesAvailableToCaller %x%x", lpFreeBytesAvailableToCaller->LowPart, lpFreeBytesAvailableToCaller->HighPart)); 189 } 190 if(lpTotalNumberOfBytes!=NULL) { 191 Mul32x32to64(lpTotalNumberOfBytes, dwTotalNumberOfClusters, (dwSectorsPerCluster*dwBytesPerSector)); 192 dprintf(("lpTotalNumberOfBytes %x%x", lpTotalNumberOfBytes->LowPart, lpTotalNumberOfBytes->HighPart)); 193 } 194 if(lpTotalNumberOfFreeBytes!=NULL) { 195 memcpy(lpTotalNumberOfFreeBytes, lpFreeBytesAvailableToCaller, sizeof(*lpFreeBytesAvailableToCaller)); 196 dprintf(("lpTotalNumberOfFreeBytes %x%x", lpTotalNumberOfFreeBytes->LowPart, lpTotalNumberOfFreeBytes->HighPart)); 197 } 197 198 } 198 199 return rc; … … 235 236 236 237 if(lpszDrive == (LPCWSTR)-1) { 237 return DRIVE_CANNOTDETERMINE;//NT 4, SP6 returns this (VERIFIED)238 return DRIVE_CANNOTDETERMINE; //NT 4, SP6 returns this (VERIFIED) 238 239 } 239 240 astring = UnicodeToAsciiString((LPWSTR)lpszDrive); … … 262 263 263 264 if(lpRootPathName == NULL) { 264 GetCurrentDirectoryA(sizeof(tmpstring), tmpstring);265 lpRootPathName = tmpstring;265 GetCurrentDirectoryA(sizeof(tmpstring), tmpstring); 266 lpRootPathName = tmpstring; 266 267 } 267 268 268 269 if('A' <= *lpRootPathName && *lpRootPathName <= 'Z') { 269 drive = *lpRootPathName - 'A' + 1;270 } 271 else 270 drive = *lpRootPathName - 'A' + 1; 271 } 272 else 272 273 if('a' <= *lpRootPathName && *lpRootPathName <= 'z') { 273 drive = *lpRootPathName - 'a' + 1;274 drive = *lpRootPathName - 'a' + 1; 274 275 } 275 276 else { 276 SetLastError(ERROR_INVALID_PARAMETER);277 return FALSE;277 SetLastError(ERROR_INVALID_PARAMETER); 278 return FALSE; 278 279 } 279 280 280 281 if(lpVolumeSerialNumber || lpVolumeNameBuffer) { 281 rc = OSLibDosQueryVolumeSerialAndName(drive, lpVolumeSerialNumber, lpVolumeNameBuffer, nVolumeNameSize);282 rc = OSLibDosQueryVolumeSerialAndName(drive, lpVolumeSerialNumber, lpVolumeNameBuffer, nVolumeNameSize); 282 283 if(lpVolumeSerialNumber) { 283 dprintf2(("Volume serial number: %x", *lpVolumeSerialNumber));284 }284 dprintf2(("Volume serial number: %x", *lpVolumeSerialNumber)); 285 } 285 286 if(lpVolumeNameBuffer) { 286 dprintf2(("Volume name: %s", lpVolumeNameBuffer));287 }287 dprintf2(("Volume name: %s", lpVolumeNameBuffer)); 288 } 288 289 } 289 290 if(lpFileSystemNameBuffer || lpMaximumComponentLength) { 290 if(!lpFileSystemNameBuffer) {291 lpFileSystemNameBuffer = tmpstring;292 nFileSystemNameSize = sizeof(tmpstring);293 }294 rc = OSLibDosQueryVolumeFS(drive, lpFileSystemNameBuffer, nFileSystemNameSize);291 if(!lpFileSystemNameBuffer) { 292 lpFileSystemNameBuffer = tmpstring; 293 nFileSystemNameSize = sizeof(tmpstring); 294 } 295 rc = OSLibDosQueryVolumeFS(drive, lpFileSystemNameBuffer, nFileSystemNameSize); 295 296 if(lpFileSystemNameBuffer) { 296 dprintf2(("File system name: %s", lpFileSystemNameBuffer));297 }297 dprintf2(("File system name: %s", lpFileSystemNameBuffer)); 298 } 298 299 } 299 300 if(lpMaximumComponentLength) { 300 if(!strcmp(lpFileSystemNameBuffer, "FAT")) {301 *lpMaximumComponentLength = 12;302 }303 else*lpMaximumComponentLength = 255; //TODO: Always correct? (CDFS?)301 if(!strcmp(lpFileSystemNameBuffer, "FAT")) { 302 *lpMaximumComponentLength = 12; 303 } 304 else *lpMaximumComponentLength = 255; //TODO: Always correct? (CDFS?) 304 305 } 305 306 if(lpFileSystemFlags) { 306 if(strcmp(lpFileSystemNameBuffer, "FAT")) {307 *lpFileSystemFlags = FS_CASE_IS_PRESERVED;308 }309 else310 if(!strcmp(lpFileSystemNameBuffer, "CDFS")) {311 *lpFileSystemFlags = FS_CASE_SENSITIVE; //NT4 returns this312 }313 else314 if(!strcmp(lpFileSystemNameBuffer, "UDF")) {//TODO: correct?315 *lpFileSystemFlags = FS_CASE_SENSITIVE | FS_UNICODE_STORED_ON_DISK;316 }317 else*lpFileSystemFlags = 0;318 319 dprintf2(("File system flags: %x", lpFileSystemFlags));307 if(strcmp(lpFileSystemNameBuffer, "FAT")) { 308 *lpFileSystemFlags = FS_CASE_IS_PRESERVED; 309 } 310 else 311 if(!strcmp(lpFileSystemNameBuffer, "CDFS")) { 312 *lpFileSystemFlags = FS_CASE_SENSITIVE; //NT4 returns this 313 } 314 else 315 if(!strcmp(lpFileSystemNameBuffer, "UDF")) {//TODO: correct? 316 *lpFileSystemFlags = FS_CASE_SENSITIVE | FS_UNICODE_STORED_ON_DISK; 317 } 318 else *lpFileSystemFlags = 0; 319 320 dprintf2(("File system flags: %x", lpFileSystemFlags)); 320 321 } 321 322 322 323 if(rc) { 323 SetLastError(rc);324 return FALSE;324 SetLastError(rc); 325 return FALSE; 325 326 } 326 327 SetLastError(ERROR_SUCCESS);
Note:
See TracChangeset
for help on using the changeset viewer.
