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/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//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.