Changeset 4753 for trunk/src/kernel32/disk.cpp
- Timestamp:
- Dec 4, 2000, 1:42:22 PM (25 years ago)
- File:
-
- 1 edited
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; 66 DWORD dwBytesPerSector; 67 DWORD dwNumberOfFreeClusters; 68 DWORD dwTotalNumberOfClusters; 69 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; 177 DWORD dwBytesPerSector; 178 DWORD dwNumberOfFreeClusters; 179 DWORD dwTotalNumberOfClusters; 177 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 186 187 188 189 190 191 192 193 194 195 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 265 265 GetCurrentDirectoryA(sizeof(tmpstring), tmpstring); 266 lpRootPathName = tmpstring; 266 267 } 267 268 268 269 if('A' <= *lpRootPathName && *lpRootPathName <= 'Z') { 269 270 } 271 else 270 drive = *lpRootPathName - 'A' + 1; 271 } 272 else 272 273 if('a' <= *lpRootPathName && *lpRootPathName <= 'z') { 273 274 drive = *lpRootPathName - 'a' + 1; 274 275 } 275 276 else { 276 277 277 SetLastError(ERROR_INVALID_PARAMETER); 278 return FALSE; 278 279 } 279 280 280 281 if(lpVolumeSerialNumber || lpVolumeNameBuffer) { 281 282 rc = OSLibDosQueryVolumeSerialAndName(drive, lpVolumeSerialNumber, lpVolumeNameBuffer, nVolumeNameSize); 282 283 if(lpVolumeSerialNumber) { 283 284 284 dprintf2(("Volume serial number: %x", *lpVolumeSerialNumber)); 285 } 285 286 if(lpVolumeNameBuffer) { 286 287 287 dprintf2(("Volume name: %s", lpVolumeNameBuffer)); 288 } 288 289 } 289 290 if(lpFileSystemNameBuffer || lpMaximumComponentLength) { 290 291 292 293 294 291 if(!lpFileSystemNameBuffer) { 292 lpFileSystemNameBuffer = tmpstring; 293 nFileSystemNameSize = sizeof(tmpstring); 294 } 295 rc = OSLibDosQueryVolumeFS(drive, lpFileSystemNameBuffer, nFileSystemNameSize); 295 296 if(lpFileSystemNameBuffer) { 296 297 297 dprintf2(("File system name: %s", lpFileSystemNameBuffer)); 298 } 298 299 } 299 300 if(lpMaximumComponentLength) { 300 301 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 307 308 309 310 311 312 313 314 315 316 317 else*lpFileSystemFlags = 0;318 319 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 324 324 SetLastError(rc); 325 return FALSE; 325 326 } 326 327 SetLastError(ERROR_SUCCESS);
Note:
See TracChangeset
for help on using the changeset viewer.