Ignore:
Timestamp:
May 23, 2000, 8:45:13 PM (25 years ago)
Author:
sandervl
Message:

some bugfixes + GetVolumeInformation rewrite

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/disk.cpp

    r3577 r3593  
    1 /* $Id: disk.cpp,v 1.11 2000-05-20 13:30:27 sandervl Exp $ */
     1/* $Id: disk.cpp,v 1.12 2000-05-23 18:45:12 sandervl Exp $ */
    22
    33/*
     
    2020#include <string.h>
    2121#include "unicode.h"
     22#include "oslibdos.h"
    2223
    2324#define DBG_LOCALLOG  DBG_disk
     
    220221              DWORD,   nFileSystemNameSize)
    221222{
     223   CHAR   tmpstring[256];
     224   ULONG  drive;
     225   BOOL   rc;
     226
    222227   dprintf(("GetVolumeInformationA %s", lpRootPathName));
    223    return O32_GetVolumeInformation(lpRootPathName,
    224                                    lpVolumeNameBuffer,
    225                                    nVolumeNameSize,
    226                                    lpVolumeSerialNumber,
    227                                    lpMaximumComponentLength,
    228                                    lpFileSystemFlags,
    229                                    lpFileSystemNameBuffer,
    230                                    nFileSystemNameSize);
    231 }
    232 //******************************************************************************
    233 //******************************************************************************
    234 
     228
     229   if(lpRootPathName == NULL) {
     230        GetCurrentDirectoryA(sizeof(tmpstring), tmpstring);
     231        lpRootPathName = tmpstring;
     232   }
     233
     234   if('A' <= *lpRootPathName && *lpRootPathName <= 'Z') {
     235        drive = *lpRootPathName - 'A' + 1;
     236   }
     237   else
     238   if('a' <= *lpRootPathName && *lpRootPathName <= 'z') {
     239        drive = *lpRootPathName - 'a' + 1;
     240   }
     241   else {
     242        SetLastError(ERROR_INVALID_PARAMETER);
     243        return FALSE;
     244   }
     245
     246   if(lpVolumeSerialNumber || lpVolumeNameBuffer) {
     247        rc = OSLibDosQueryVolumeSerialAndName(drive, lpVolumeSerialNumber, lpVolumeNameBuffer, nVolumeNameSize);
     248   }
     249   if(lpFileSystemNameBuffer || lpMaximumComponentLength) {
     250        if(!lpFileSystemNameBuffer) {
     251                lpFileSystemNameBuffer = tmpstring;
     252        }
     253        rc = OSLibDosQueryVolumeFS(drive, lpFileSystemNameBuffer, nFileSystemNameSize);
     254   }
     255   if(lpMaximumComponentLength) {
     256        if(!strcmp(lpFileSystemNameBuffer, "FAT")) {
     257                *lpMaximumComponentLength = 11;
     258        }
     259        else    *lpMaximumComponentLength = 255; //TODO: Always correct? (CDFS?)
     260   }
     261   if(lpFileSystemFlags) {
     262        if(strcmp(lpFileSystemNameBuffer, "FAT")) {
     263                *lpFileSystemFlags = FS_CASE_IS_PRESERVED;
     264        }
     265        else
     266        if(!strcmp(lpFileSystemNameBuffer, "CDFS")) {
     267                *lpFileSystemFlags = FS_CASE_SENSITIVE; //NT4 returns this
     268        }
     269        else
     270        if(!strcmp(lpFileSystemNameBuffer, "UDF")) {//TODO: correct?
     271                *lpFileSystemFlags = FS_CASE_SENSITIVE | FS_UNICODE_STORED_ON_DISK;
     272        }
     273        else    *lpFileSystemFlags = 0;
     274   }
     275
     276   if(rc) {
     277        SetLastError(rc);
     278        return FALSE;
     279   }
     280   return TRUE;
     281}
     282//******************************************************************************
     283//******************************************************************************
    235284ODINFUNCTION8(BOOL,    GetVolumeInformationW,
    236285              LPCWSTR, lpRootPathName,
     
    261310    asciiroot = NULL;
    262311
    263   // @@@PH switch to ODIN_
    264   rc = GetVolumeInformationA(asciiroot,
     312  rc = ODIN_GetVolumeInformationA(asciiroot,
    265313                             asciivol,
    266314                             nVolumeNameSize,
Note: See TracChangeset for help on using the changeset viewer.