Changeset 7202 for trunk/src


Ignore:
Timestamp:
Oct 25, 2001, 3:19:05 PM (24 years ago)
Author:
sandervl
Message:

No longer use DosError; IOCTL_DISK_GET_DRIVE_GEOMETRY must return ERROR_MEDIA_CHANGED when floppy has been changed

Location:
trunk/src/kernel32
Files:
5 edited

Legend:

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

    r7109 r7202  
    1 /* $Id: exceptions.cpp,v 1.56 2001-10-18 13:27:39 sandervl Exp $ */
     1/* $Id: exceptions.cpp,v 1.57 2001-10-25 13:19:04 sandervl Exp $ */
    22
    33/*
     
    8282//Global Process Unhandled exception filter
    8383static LPTOP_LEVEL_EXCEPTION_FILTER CurrentUnhExceptionFlt = NULL;
    84 static UINT                         CurrentErrorMode = SEM_FAILCRITICALERRORS;
     84static UINT                         CurrentErrorMode = 0;
    8585static PEXCEPTION_HANDLER           StartupCodeHandler = NULL;
    8686
  • trunk/src/kernel32/hmcomm.cpp

    r5587 r7202  
    1 /* $Id: hmcomm.cpp,v 1.10 2001-04-26 13:22:43 sandervl Exp $ */
     1/* $Id: hmcomm.cpp,v 1.11 2001-10-25 13:19:05 sandervl Exp $ */
    22
    33/*
     
    187187
    188188  //AH: TODO parse Win32 security handles
    189   OSLibDosDisableHardError(TRUE);
     189  ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
    190190  pHMHandleData->hHMHandle = OSLibDosOpen(comname,
    191191                                          OSLIB_ACCESS_READWRITE |
    192192                                          OSLIB_ACCESS_SHAREDENYREAD |
    193193                                          OSLIB_ACCESS_SHAREDENYWRITE);
    194   OSLibDosDisableHardError(FALSE);
     194  SetErrorMode(oldmode);
    195195  if (pHMHandleData->hHMHandle != 0)
    196196  {
  • trunk/src/kernel32/hmdisk.cpp

    r6987 r7202  
    1 /* $Id: hmdisk.cpp,v 1.17 2001-10-10 15:06:06 phaller Exp $ */
     1/* $Id: hmdisk.cpp,v 1.18 2001-10-25 13:19:05 sandervl Exp $ */
    22
    33/*
     
    104104    //Disable error popus. NT allows an app to open a cdrom/dvd drive without a disk inside
    105105    //OS/2 fails in that case with error ERROR_NOT_READY
    106     OSLibDosDisableHardError(TRUE);
     106    ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
    107107    hFile = OSLibDosCreateFile((LPSTR)lpFileName,
    108108                               pHMHandleData->dwAccess,
     
    112112                               pHMHandleData->dwFlags,
    113113                               hTemplate);
    114     OSLibDosDisableHardError(FALSE);
     114    SetErrorMode(oldmode);
    115115
    116116    if (hFile != INVALID_HANDLE_ERROR || GetLastError() == ERROR_NOT_READY)
     
    503503            *lpBytesReturned = 0;
    504504        }
     505
     506        char   temp;
     507        ULONG  bytesread, oldmode;
     508        APIRET rc;
     509
     510        //Applications can use this IOCTL to check if the floppy has been changed
     511        //OSLibDosGetDiskGeometry won't fail when that happens so we read one
     512        //byte from the disk and return ERROR_MEDIA_CHANGED if it fails with
     513        //ERROR_WRONG_DISK
     514        oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
     515        rc = OSLibDosRead(pHMHandleData->hHMHandle, (PVOID)&temp,
     516                          1, &bytesread);
     517        SetErrorMode(oldmode);
     518        if(rc == FALSE) {
     519            dprintf(("IOCTL_DISK_GET_DRIVE_GEOMETRY: DosRead failed with rc %d", GetLastError()));
     520            if(GetLastError() == ERROR_WRONG_DISK) {
     521                SetLastError(ERROR_MEDIA_CHANGED);
     522                return FALSE;
     523            }
     524        }
     525        else OSLibDosSetFilePtr(pHMHandleData->hHMHandle, -1, OSLIB_SETPTR_FILE_CURRENT);
     526
    505527        if(OSLibDosGetDiskGeometry(pHMHandleData->hHMHandle, drvInfo->driveLetter, pGeom) == FALSE) {
    506528            return FALSE;
  • trunk/src/kernel32/oslibdos.cpp

    r7060 r7202  
    1 /* $Id: oslibdos.cpp,v 1.79 2001-10-15 05:51:34 phaller Exp $ */
     1/* $Id: oslibdos.cpp,v 1.80 2001-10-25 13:19:05 sandervl Exp $ */
    22/*
    33 * Wrappers for OS/2 Dos* API
     
    15501550}
    15511551//******************************************************************************
    1552 //******************************************************************************
    1553 void OSLibDosDisableHardError(BOOL fTurnOff)
    1554 {
    1555    DosError((fTurnOff) ? FERR_DISABLEHARDERR : FERR_ENABLEHARDERR);
    1556 }
    1557 //******************************************************************************
    15581552//Returns time spent in kernel & user mode in milliseconds
    15591553//******************************************************************************
     
    21902184  result.achName[0] = 0;
    21912185
    2192   DosError(FERR_DISABLEHARDERR | FERR_DISABLEEXCEPTION);
     2186  ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS_W);
    21932187  APIRET rc = DosFindFirst((PSZ)lpFileName,&hDir,attrs,&result,sizeof(result),&searchCount,FIL_STANDARD);
    2194   //PH: DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION);
    21952188
    21962189  //check root: skip "." and ".." (HPFS, not on FAT)
     
    22022195    {
    22032196      result.achName[0] = 0;
    2204       //PH: DosError(FERR_DISABLEHARDERR | FERR_DISABLEEXCEPTION);
    22052197      searchCount = 1;
    22062198      APIRET rc = DosFindNext(hDir,&result,sizeof(result),&searchCount);
    2207       //PH: DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION);
    22082199      if (rc)
    22092200      {
     
    22112202        SetLastError(error2WinError(rc));
    22122203
    2213         DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION);
     2204        SetErrorMode(oldmode);
    22142205        return INVALID_HANDLE_VALUE_W;
    22152206      }
     
    22182209
    22192210  // enable i/o kernel exceptions again
    2220   DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION);
     2211  SetErrorMode(oldmode);
    22212212
    22222213  if(rc)
     
    22432234  result = (FILEFINDBUF3*)malloc(searchCount*sizeof(FILEFINDBUF3));
    22442235
    2245   DosError(FERR_DISABLEHARDERR | FERR_DISABLEEXCEPTION);
     2236  ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS_W);
    22462237  APIRET rc = DosFindFirst((PSZ)lpFileName,&hDir,attrs,result,searchCount*sizeof(FILEFINDBUF3),&searchCount,FIL_STANDARD);
    2247   DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION);
     2238  SetErrorMode(oldmode);
    22482239  if (rc)
    22492240  {
     
    23472338   drv[0] = (char)('A' + drive - 1);
    23482339
    2349    DosError(FERR_DISABLEHARDERR);
     2340   ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS_W);
    23502341   rc = DosQueryFSAttach(drv, 1, FSAIL_QUERYNAME, fsinfo, &cb);
    2351    DosError(FERR_ENABLEHARDERR);
     2342   SetErrorMode(oldmode);
    23522343
    23532344   switch(rc) {
     
    23912382 APIRET    rc;
    23922383
    2393    DosError(FERR_DISABLEHARDERR);
     2384   ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS_W);
    23942385   rc = DosQueryFSInfo(drive, FSIL_VOLSER, &fsi, sizeof(fsi));
    2395    DosError(FERR_ENABLEHARDERR);
     2386   SetErrorMode(oldmode);
    23962387
    23972388   switch(rc) {
     
    24402431      diskNum = 0;
    24412432
    2442    DosError(FERR_DISABLEHARDERR);
     2433   ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS_W);
    24432434   rc = DosQueryFSInfo(diskNum, FSIL_ALLOC, &fsAlloc, sizeof(fsAlloc));
    2444    DosError(FERR_ENABLEHARDERR);
     2435   SetErrorMode(oldmode);
    24452436
    24462437   if(rc == 0)
     
    24672458   APIRET rc;
    24682459
     2460   dprintf(("OSLibDosGetDiskGeometry %x %d %x", hDisk, cDisk, pdiskgeom));
    24692461   param[1] = cDisk - 'A';
    24702462   rc = DosDevIOCtl((hDisk) ? hDisk : -1, IOCTL_DISK, DSK_GETDEVICEPARAMS, param, 2, &parsize, &bpb, sizeof(bpb), &datasize);
     
    25092501        return TRUE;
    25102502   }
     2503   dprintf(("OSLibDosGetDiskGeometry: error %d -> %d", rc, error2WinError(rc)));
    25112504   SetLastError(error2WinError(rc));
    25122505   return FALSE;
  • trunk/src/kernel32/oslibdos.h

    r6397 r7202  
    1 /* $Id: oslibdos.h,v 1.35 2001-07-28 18:03:38 sandervl Exp $ */
     1/* $Id: oslibdos.h,v 1.36 2001-10-25 13:19:05 sandervl Exp $ */
    22
    33/*
     
    149149#endif
    150150
    151 void OSLibDosDisableHardError(BOOL fTurnOff);
    152151BOOL OSLibDosQueryProcTimes(DWORD procid, ULONG *kerneltime, ULONG *usertime);
    153152
Note: See TracChangeset for help on using the changeset viewer.