volume_info.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "volume_info.h"
  2. #include "debug.h"
  3. #include "general.h"
  4. unsigned MxfsGetFreeSpace(MINIX_FS *FileSys)
  5. {
  6. unsigned UsedZones = MxfsCountBitsSet(&FileSys->ZoneMap);
  7. unsigned TotalZones = FileSys->Super.s_zones;
  8. unsigned FreeBlocks = (TotalZones - UsedZones) << FileSys->Super.s_log_zone_size;
  9. return FreeBlocks * MINIX_BLOCK_SIZE;
  10. }
  11. int DOKAN_CALLBACK MxfsGetDiskFreeSpace(
  12. PULONGLONG FreeBytesAvailable,
  13. PULONGLONG TotalNumberOfBytes,
  14. PULONGLONG TotalNumberOfFreeBytes,
  15. PDOKAN_FILE_INFO FileInfo)
  16. {
  17. TRACE("");
  18. MINIX_FS *FileSys = (MINIX_FS*)(ULONG_PTR)FileInfo->DokanOptions->GlobalContext;
  19. ASSERT(FileSys);
  20. unsigned FreeBytes = 0;
  21. if(FreeBytesAvailable || TotalNumberOfFreeBytes)
  22. FreeBytes = MxfsGetFreeSpace(FileSys);
  23. if(FreeBytesAvailable)
  24. *FreeBytesAvailable = FreeBytes;
  25. if(TotalNumberOfBytes)
  26. *TotalNumberOfBytes = FileSys->cbLen;
  27. if(TotalNumberOfFreeBytes)
  28. *TotalNumberOfFreeBytes = FreeBytes;
  29. return 0;
  30. }
  31. // see Win32 API GetVolumeInformation
  32. int DOKAN_CALLBACK MxfsGetVolumeInformation(
  33. LPWSTR VolumeNameBuffer,
  34. DWORD VolumeNameSize, // in num of chars
  35. LPDWORD VolumeSerialNumber,
  36. LPDWORD MaximumComponentLength, // in num of chars
  37. LPDWORD FileSystemFlags,
  38. LPWSTR FileSystemNameBuffer,
  39. DWORD FileSystemNameSize, // in num of chars (this is not true?)
  40. PDOKAN_FILE_INFO FileInfo)
  41. {
  42. TRACE("");
  43. if(VolumeNameSize > 0 && VolumeNameBuffer)
  44. wcscpy_s(VolumeNameBuffer, VolumeNameSize, L"");
  45. if(VolumeSerialNumber)
  46. *VolumeSerialNumber = MINIX_VOLUME_ID;
  47. if(MaximumComponentLength)
  48. *MaximumComponentLength = MAX_NAME_LEN;
  49. if(FileSystemFlags)
  50. *FileSystemFlags = FILE_CASE_SENSITIVE_SEARCH;
  51. if(FileSystemNameSize > 0 && FileSystemNameBuffer)
  52. wcscpy_s(FileSystemNameBuffer, FileSystemNameSize, L"Minix");
  53. return 0;
  54. }