Changeset 5791 for trunk/src/kernel32/hmfile.cpp
- Timestamp:
- May 24, 2001, 10:19:18 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmfile.cpp
r5715 r5791 1 /* $Id: hmfile.cpp,v 1.2 7 2001-05-15 17:01:15sandervl Exp $ */1 /* $Id: hmfile.cpp,v 1.28 2001-05-24 08:19:18 sandervl Exp $ */ 2 2 3 3 /* … … 160 160 UINT fuMode) 161 161 { 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 189 185 "\\\\.\\") == 0) 190 {186 { 191 187 lpFileName+=4; 192 }193 else194 if(!strchr(lpFileName, ':') && !strchr(lpFileName, '\\'))195 {196 //filename only; search for file in following order197 //1: dir from which the app loaded198 //2: current dir199 //3: windows system dir200 //4: windows dir201 //5: dirs in path path environment variable202 //SearchPath does exactly that203 LPSTR filenameinpath;204 205 if(SearchPathA(NULL, lpFileName, NULL, sizeof(filepath), filepath, &filenameinpath) == 0188 } 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 206 202 && !(fuMode & OF_CREATE) ) 207 203 { 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 OFSTRUCT220 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 { 229 225 //Needed for GetFileTime 230 226 pHMHandleData->hHMHandle = hFile; … … 239 235 memcpy(pOFStruct->reserved, filedatetime, sizeof(pOFStruct->reserved)); 240 236 241 if(fuMode & OF_DELETE)242 {237 if(fuMode & OF_DELETE) 238 { 243 239 OSLibDosClose(hFile); 244 240 OSLibDosDelete((LPSTR)lpFileName); 245 }246 else247 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 } 266 262 267 263 if((fuMode & OF_VERIFY)) … … 269 265 if(memcmp(pOFStruct->reserved, filedatetime, sizeof(pOFStruct->reserved))) 270 266 { 271 272 267 OSLibDosClose(hFile); 268 SetLastError(ERROR_FILE_NOT_FOUND); 273 269 } 274 hFile = HFILE_ERROR;270 hFile = HFILE_ERROR; 275 271 } 276 272 … … 279 275 280 276 if(hFile != HFILE_ERROR) { 281 pHMHandleData->dwUserData = (DWORD) new HMFileInfo((LPSTR)lpFileName, NULL);282 }277 pHMHandleData->dwUserData = (DWORD) new HMFileInfo((LPSTR)lpFileName, NULL); 278 } 283 279 return (NO_ERROR); 284 }285 else {280 } 281 else { 286 282 DWORD rc = GetLastError(); 287 283 … … 289 285 { 290 286 if(rc == ERROR_OPEN_FAILED) { 291 SetLastError(ERROR_FILE_NOT_FOUND); 287 SetLastError(ERROR_FILE_NOT_FOUND); 288 } 292 289 } 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); 303 299 } 304 300
Note:
See TracChangeset
for help on using the changeset viewer.