Changeset 3593 for trunk/src/kernel32/oslibdos.cpp
- Timestamp:
- May 23, 2000, 8:45:13 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/oslibdos.cpp
r3588 r3593 1 /* $Id: oslibdos.cpp,v 1.2 7 2000-05-22 19:07:58sandervl Exp $ */1 /* $Id: oslibdos.cpp,v 1.28 2000-05-23 18:45:12 sandervl Exp $ */ 2 2 /* 3 3 * Wrappers for OS/2 Dos* API … … 15 15 #define INCL_DOSMEMMGR 16 16 #define INCL_DOSPROCESS 17 #define INCL_DOSFILEMGR 17 18 #define INCL_DOSERRORS 18 19 #define INCL_NPIPES … … 1217 1218 return TRUE; 1218 1219 } 1220 //****************************************************************************** 1221 #define FSATTACH_SIZE 256 1222 //****************************************************************************** 1223 DWORD 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 //****************************************************************************** 1260 typedef struct _FSINFOBUF 1261 { 1262 ULONG ulVolser; /* Volume serial number */ 1263 VOLUMELABEL vol; /* Volume lable */ 1264 } FSINFOBUF; 1265 //****************************************************************************** 1266 DWORD 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.