Changeset 3593 for trunk/src


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

some bugfixes + GetVolumeInformation rewrite

Location:
trunk/src/kernel32
Files:
5 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,
  • trunk/src/kernel32/hmopen32.cpp

    r3588 r3593  
    1 /* $Id: hmopen32.cpp,v 1.22 2000-05-22 19:07:56 sandervl Exp $ */
     1/* $Id: hmopen32.cpp,v 1.23 2000-05-23 18:45:12 sandervl Exp $ */
    22
    33/*
     
    786786    pHMHandleData->hHMHandle = hFile;
    787787
    788     ::GetFileTime(hFile,
    789                   NULL,
    790                   NULL,
    791                   &filetime );
     788    GetFileTime(pHMHandleData,
     789                NULL,
     790                NULL,
     791                &filetime );
    792792    FileTimeToDosDateTime(&filetime,
    793793                          &filedatetime[0],
  • trunk/src/kernel32/lang.cpp

    r3588 r3593  
    1 /* $Id: lang.cpp,v 1.20 2000-05-22 19:07:57 sandervl Exp $ */
     1/* $Id: lang.cpp,v 1.21 2000-05-23 18:45:12 sandervl Exp $ */
    22/*
    33 * Win32 language API functions for OS/2
     
    154154LANGID WIN32API GetUserDefaultLangID()
    155155{
    156   dprintf(("KERNEL32:  OS2GetUserDefaultLangID, returns %x", GetLanguageId()));
     156  dprintf2(("KERNEL32:  GetUserDefaultLangID, returns %x", GetLanguageId()));
    157157  return(GetLanguageId());
    158158}
     
    161161LANGID WIN32API GetSystemDefaultLangID(void)
    162162{
    163   dprintf(("KERNEL32:  OS2GetSystemDefaultLangID returns %x", MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)));
     163  dprintf2(("KERNEL32:  GetSystemDefaultLangID returns %x", MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)));
    164164  return(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
    165165}
  • trunk/src/kernel32/oslibdos.cpp

    r3588 r3593  
    1 /* $Id: oslibdos.cpp,v 1.27 2000-05-22 19:07:58 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.28 2000-05-23 18:45:12 sandervl Exp $ */
    22/*
    33 * Wrappers for OS/2 Dos* API
     
    1515#define INCL_DOSMEMMGR
    1616#define INCL_DOSPROCESS
     17#define INCL_DOSFILEMGR
    1718#define INCL_DOSERRORS
    1819#define INCL_NPIPES
     
    12171218  return TRUE;
    12181219}
     1220//******************************************************************************
     1221#define FSATTACH_SIZE   256
     1222//******************************************************************************
     1223DWORD OSLibDosQueryVolumeFS(int drive, LPSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize)
     1224{
     1225 PFSQBUFFER2 fsinfo = (PFSQBUFFER2) alloca(FSATTACH_SIZE);
     1226 ULONG       cb     = FSATTACH_SIZE;
     1227 char        drv[3] = "A:";
     1228 char       *fsname;
     1229 APIRET      rc;
     1230
     1231   if(lpFileSystemNameBuffer == NULL) {
     1232        DebugInt3();
     1233        return ERROR_INVALID_PARAMETER_W;
     1234   }
     1235   drv[0] = (char)('A' + drive - 1);
     1236
     1237   DosError(FERR_DISABLEHARDERR);
     1238   rc = DosQueryFSAttach(drv, 1, FSAIL_QUERYNAME, fsinfo, &cb);
     1239   DosError(FERR_ENABLEHARDERR);
     1240
     1241   switch(rc) {
     1242   case ERROR_INVALID_DRIVE:
     1243        return ERROR_INVALID_DRIVE_W;
     1244   case ERROR_NO_VOLUME_LABEL:
     1245        return ERROR_NO_VOLUME_LABEL_W;
     1246   case NO_ERROR:
     1247        break;
     1248   default:
     1249        return ERROR_NOT_ENOUGH_MEMORY; //whatever
     1250   }
     1251
     1252   fsname = (char *)&fsinfo->szName[0] + fsinfo->cbName + 1;
     1253   if(strlen(fsname) < nFileSystemNameSize) {
     1254        strcpy(lpFileSystemNameBuffer, fsname);
     1255   }
     1256   else return ERROR_BUFFER_OVERFLOW_W;
     1257   return 0;
     1258}
     1259//******************************************************************************
     1260typedef struct _FSINFOBUF
     1261{
     1262        ULONG           ulVolser;          /* Volume serial number            */
     1263        VOLUMELABEL     vol;               /* Volume lable                    */
     1264} FSINFOBUF;
     1265//******************************************************************************
     1266DWORD OSLibDosQueryVolumeSerialAndName(int drive, LPDWORD lpVolumeSerialNumber,
     1267                                       LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize)
     1268{
     1269 FSINFOBUF fsi;
     1270 APIRET    rc;
     1271
     1272   DosError(FERR_DISABLEHARDERR);
     1273   rc = DosQueryFSInfo(drive, FSIL_VOLSER, &fsi, sizeof(fsi));
     1274   DosError(FERR_ENABLEHARDERR);
     1275
     1276   switch(rc) {
     1277   case ERROR_INVALID_DRIVE:
     1278        return ERROR_INVALID_DRIVE_W;
     1279   case ERROR_NO_VOLUME_LABEL:
     1280        return ERROR_NO_VOLUME_LABEL_W;
     1281   case NO_ERROR:
     1282        break;
     1283   default:
     1284        return ERROR_NOT_ENOUGH_MEMORY; //whatever
     1285   }
     1286
     1287   if(lpVolumeSerialNumber) {
     1288         *lpVolumeSerialNumber = fsi.ulVolser;
     1289   }
     1290   if(lpVolumeNameBuffer)
     1291   {
     1292        if(nVolumeNameSize > fsi.vol.cch) {
     1293             strcpy(lpVolumeNameBuffer, (PCHAR)fsi.vol.szVolLabel);
     1294        }
     1295        else return ERROR_BUFFER_OVERFLOW_W;
     1296   }
     1297
     1298   return ERROR_SUCCESS_W;
     1299}
     1300//******************************************************************************
     1301//******************************************************************************
  • trunk/src/kernel32/oslibdos.h

    r3588 r3593  
    1 /* $Id: oslibdos.h,v 1.14 2000-05-22 19:07:59 sandervl Exp $ */
     1/* $Id: oslibdos.h,v 1.15 2000-05-23 18:45:13 sandervl Exp $ */
    22
    33/*
     
    152152BOOL  OSLibDosFindClose(DWORD hFindFile);
    153153
     154DWORD OSLibDosQueryVolumeFS(int drive, LPSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize);
     155DWORD OSLibDosQueryVolumeSerialAndName(int drive, LPDWORD lpVolumeSerialNumber, LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize);
     156
     157
    154158#endif
Note: See TracChangeset for help on using the changeset viewer.