Changeset 5791 for trunk/src


Ignore:
Timestamp:
May 24, 2001, 10:19:18 AM (24 years ago)
Author:
sandervl
Message:

OpenFile fixes

Location:
trunk/src/kernel32
Files:
2 edited

Legend:

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

    r5587 r5791  
    1 /* $Id: HandleManager.cpp,v 1.63 2001-04-26 13:22:42 sandervl Exp $ */
     1/* $Id: HandleManager.cpp,v 1.64 2001-05-24 08:19:17 sandervl Exp $ */
    22
    33/*
     
    10821082  DWORD           rc;                                     /* API return code */
    10831083
    1084 
    1085   pDeviceHandler = _HMDeviceFind((LPSTR)lpFileName);          /* find device */
     1084  if(fuMode & OF_REOPEN) {
     1085       pDeviceHandler = _HMDeviceFind((LPSTR)pOFStruct->szPathName);          /* find device */
     1086  }
     1087  else pDeviceHandler = _HMDeviceFind((LPSTR)lpFileName);          /* find device */
    10861088  if (NULL == pDeviceHandler)                  /* this name is unknown to us */
    10871089  {
     
    10921094    pHMHandleData  = NULL;
    10931095
    1094   pDevData       = _HMDeviceGetData((LPSTR)lpFileName);
     1096  if(fuMode & OF_REOPEN) {
     1097       pDevData       = _HMDeviceGetData((LPSTR)pOFStruct->szPathName);
     1098  }
     1099  else pDevData       = _HMDeviceGetData((LPSTR)lpFileName);
     1100 
    10951101
    10961102  if(pDeviceHandler == HMGlobals.pHMOpen32) {
  • trunk/src/kernel32/hmfile.cpp

    r5715 r5791  
    1 /* $Id: hmfile.cpp,v 1.27 2001-05-15 17:01:15 sandervl Exp $ */
     1/* $Id: hmfile.cpp,v 1.28 2001-05-24 08:19:18 sandervl Exp $ */
    22
    33/*
     
    160160                                   UINT          fuMode)
    161161{
    162   HFILE hFile;
    163   FILETIME filetime;
    164   WORD filedatetime[2];
    165   char filepath[260];
    166   LPSTR lpFileName = (LPSTR)lpszFileName;
    167 
    168   SetLastError(ERROR_SUCCESS);
    169 
    170   dprintf(("KERNEL32: HMDeviceFileClass::OpenFile %s(%s,%08x,%08x,%08x)",
    171            lpHMDeviceName,
    172            lpFileName,
    173            pHMHandleData,
    174            pOFStruct,
    175            fuMode));
    176 
    177   //Re-open using name in OFSTRUCT
    178   if(fuMode & OF_REOPEN)
    179         lpFileName = (LPSTR)pOFStruct->szPathName;
    180   else  memset(pOFStruct, 0, sizeof(OFSTRUCT));
    181 
    182   if(lpFileName == NULL) {
    183       dprintf(("Invalid name (NULL)!"));
    184       SetLastError(ERROR_INVALID_NAME);
    185       return HFILE_ERROR;
    186   }
    187 
    188   if(strcmp(lpFileName,       // "support" for local unc names
     162    HFILE hFile;
     163    FILETIME filetime;
     164    WORD filedatetime[2];
     165    char filepath[260];
     166    LPSTR lpFileName = (LPSTR)lpszFileName;
     167
     168    SetLastError(ERROR_SUCCESS);
     169
     170    //Re-open using name in OFSTRUCT
     171    if(fuMode & OF_REOPEN)
     172         lpFileName = (LPSTR)pOFStruct->szPathName;
     173    else memset(pOFStruct, 0, sizeof(OFSTRUCT));
     174
     175    dprintf(("KERNEL32: HMDeviceFileClass::OpenFile %s(%s,%08x,%08x,%08x)", lpHMDeviceName,
     176             lpFileName, pHMHandleData, pOFStruct, fuMode));
     177
     178    if(lpFileName == NULL) {
     179        dprintf(("Invalid name (NULL)!"));
     180        SetLastError(ERROR_INVALID_NAME);
     181        return HFILE_ERROR;
     182    }
     183
     184    if(strcmp(lpFileName,       // "support" for local unc names
    189185             "\\\\.\\") == 0)
    190   {
     186    {
    191187        lpFileName+=4;
    192   }
    193   else
    194   if(!strchr(lpFileName, ':') && !strchr(lpFileName, '\\'))
    195   {
    196     //filename only; search for file in following order
    197     //1: dir from which the app loaded
    198     //2: current dir
    199     //3: windows system dir
    200     //4: windows dir
    201     //5: dirs in path path environment variable
    202     //SearchPath does exactly that
    203     LPSTR filenameinpath;
    204 
    205     if(SearchPathA(NULL, lpFileName, NULL, sizeof(filepath), filepath, &filenameinpath) == 0
     188    }
     189    else
     190    if(!strchr(lpFileName, ':') && !strchr(lpFileName, '\\'))
     191    {
     192        //filename only; search for file in following order
     193        //1: dir from which the app loaded
     194        //2: current dir
     195        //3: windows system dir
     196        //4: windows dir
     197        //5: dirs in path path environment variable
     198        //SearchPath does exactly that
     199        LPSTR filenameinpath;
     200
     201        if(SearchPathA(NULL, lpFileName, NULL, sizeof(filepath), filepath, &filenameinpath) == 0
    206202           && !(fuMode & OF_CREATE) )
    207203        {
    208         pOFStruct->nErrCode = ERROR_FILE_NOT_FOUND;
    209         SetLastError(ERROR_FILE_NOT_FOUND);
    210         return HFILE_ERROR;
    211     }
    212     lpFileName = filepath;
    213   }
    214   else {
    215     ParsePath(lpFileName, filepath, sizeof(filepath));
    216     lpFileName = filepath;
    217   }
    218 
    219   // filling OFSTRUCT
    220   pOFStruct->cBytes = sizeof(OFSTRUCT);
    221   pOFStruct->nErrCode = 0;
    222   strncpy((char *)pOFStruct->szPathName, lpFileName, OFS_MAXPATHNAME);
    223   pOFStruct->szPathName[OFS_MAXPATHNAME-1] = 0;
    224 
    225   hFile = OSLibDosOpenFile((LPSTR)lpFileName, fuMode);
    226 
    227   if(hFile != INVALID_HANDLE_ERROR)
    228   {
     204            pOFStruct->nErrCode = ERROR_FILE_NOT_FOUND;
     205            SetLastError(ERROR_FILE_NOT_FOUND);
     206            return HFILE_ERROR;
     207        }
     208        lpFileName = filepath;
     209    }
     210    else {
     211        ParsePath(lpFileName, filepath, sizeof(filepath));
     212        lpFileName = filepath;
     213    }
     214
     215    // filling OFSTRUCT
     216    pOFStruct->cBytes = sizeof(OFSTRUCT);
     217    pOFStruct->nErrCode = 0;
     218    strncpy((char *)pOFStruct->szPathName, lpFileName, OFS_MAXPATHNAME);
     219    pOFStruct->szPathName[OFS_MAXPATHNAME-1] = 0;
     220
     221    hFile = OSLibDosOpenFile((LPSTR)lpFileName, fuMode);
     222
     223    if(hFile != INVALID_HANDLE_ERROR)
     224    {
    229225        //Needed for GetFileTime
    230226        pHMHandleData->hHMHandle = hFile;
     
    239235        memcpy(pOFStruct->reserved, filedatetime, sizeof(pOFStruct->reserved));
    240236
    241     if(fuMode & OF_DELETE)
    242     {
     237        if(fuMode & OF_DELETE)
     238        {
    243239            OSLibDosClose(hFile);
    244240            OSLibDosDelete((LPSTR)lpFileName);
    245     }
    246     else
    247     if(fuMode & OF_EXIST)
    248     {
    249         OSLibDosClose(hFile);
    250         hFile = HFILE_ERROR;
    251     }
    252     if(fuMode & OF_PARSE)
    253     {
    254       CHAR drive[4];
    255 
    256         drive[0] = pOFStruct->szPathName[0];
    257         drive[1] = pOFStruct->szPathName[1];
    258         drive[2] = pOFStruct->szPathName[2];
    259         drive[3] = 0;
    260 
    261         pOFStruct->fFixedDisk = (GetDriveTypeA(drive) != DRIVE_REMOVABLE);
    262 
    263         OSLibDosClose(hFile);
    264         hFile = HFILE_ERROR;
    265     }
     241        }
     242        else
     243        if(fuMode & OF_EXIST)
     244        {
     245            OSLibDosClose(hFile);
     246            hFile = HFILE_ERROR;
     247        }
     248        if(fuMode & OF_PARSE)
     249        {
     250            CHAR drive[4];
     251
     252            drive[0] = pOFStruct->szPathName[0];
     253            drive[1] = pOFStruct->szPathName[1];
     254            drive[2] = pOFStruct->szPathName[2];
     255            drive[3] = 0;
     256
     257            pOFStruct->fFixedDisk = (GetDriveTypeA(drive) != DRIVE_REMOVABLE);
     258
     259            OSLibDosClose(hFile);
     260            hFile = HFILE_ERROR;
     261        }
    266262
    267263        if((fuMode & OF_VERIFY))
     
    269265            if(memcmp(pOFStruct->reserved, filedatetime, sizeof(pOFStruct->reserved)))
    270266            {
    271                     OSLibDosClose(hFile);
    272                     SetLastError(ERROR_FILE_NOT_FOUND);
     267                OSLibDosClose(hFile);
     268                SetLastError(ERROR_FILE_NOT_FOUND);
    273269            }
    274         hFile = HFILE_ERROR;
     270            hFile = HFILE_ERROR;
    275271        }
    276272
     
    279275
    280276        if(hFile != HFILE_ERROR) {
    281         pHMHandleData->dwUserData = (DWORD) new HMFileInfo((LPSTR)lpFileName, NULL);
    282     }
     277            pHMHandleData->dwUserData = (DWORD) new HMFileInfo((LPSTR)lpFileName, NULL);
     278        }
    283279        return (NO_ERROR);
    284   }
    285   else {
     280    }
     281    else {
    286282        DWORD rc = GetLastError();
    287283
     
    289285        {
    290286            if(rc == ERROR_OPEN_FAILED) {
    291             SetLastError(ERROR_FILE_NOT_FOUND);
     287                SetLastError(ERROR_FILE_NOT_FOUND);
     288            }
    292289        }
    293     }
    294     //todo: OF_PROMPT handling (pop up message box)
    295   }
    296   // error branch
    297   pOFStruct->nErrCode = GetLastError();
    298   dprintf(("KERNEL32: HMDeviceFileClass::OpenFile Error %08xh\n",
    299             pOFStruct->nErrCode));
    300 
    301   // return != NO_ERROR => error code
    302   return(hFile);
     290        //todo: OF_PROMPT handling (pop up message box)
     291    }
     292    // error branch
     293    pOFStruct->nErrCode = GetLastError();
     294    dprintf(("KERNEL32: HMDeviceFileClass::OpenFile Error %08xh\n",
     295             pOFStruct->nErrCode));
     296
     297    // return != NO_ERROR => error code
     298    return(hFile);
    303299}
    304300
Note: See TracChangeset for help on using the changeset viewer.