Changeset 7555 for trunk/src/kernel32/Fileio.cpp
- Timestamp:
- Dec 6, 2001, 11:14:45 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/Fileio.cpp
r7550 r7555 1 /* $Id: Fileio.cpp,v 1. 59 2001-12-05 18:05:58sandervl Exp $ */1 /* $Id: Fileio.cpp,v 1.60 2001-12-06 10:14:45 sandervl Exp $ */ 2 2 3 3 /* … … 7 7 * Copyright 1998 Patrick Haller 8 8 * 9 * Some parts copied from Wine (CopyFileExA/W )9 * Some parts copied from Wine (CopyFileExA/W, FindFirstFileExW) 10 10 * 11 11 * Copyright 1993 John Burton 12 * Copyright 1993 Erik Bos 12 13 * Copyright 1996 Alexandre Julliard 13 14 * … … 227 228 //****************************************************************************** 228 229 //****************************************************************************** 229 ODINFUNCTION2(HANDLE, FindFirstFileA, 230 LPCSTR, lpFileName, 231 WIN32_FIND_DATAA *, lpFindFileData) 232 { 230 HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, WIN32_FIND_DATAA *lpFindFileData) 231 { 232 return FindFirstFileExA(lpFileName, FindExInfoStandard, lpFindFileData, 233 FindExSearchNameMatch, NULL, 0); 234 } 235 /***************************************************************************** 236 * Name : HANDLE WIN32API FindFirstFileExA 237 * Purpose : The FindFirstFileExA function searches a directory for a file 238 * whose name and attributes match those specified in the 239 * function call. 240 * Parameters: LPCSTR lpFileName pointer to the name of the file 241 * to search for 242 * FINDEX_INFO_LEVELS fInfoLevelId information level of the returned data 243 * LPVOID lpFindFileData pointer to the returned information 244 * FINDEX_SEARCH_OPS fSearchOp type of filtering to perform 245 * LPVOID lpSearchFilter pointer to search criteria 246 * DWORD dwAdditionalFlags additional search control flags 247 * Variables : 248 * Result : If the function succeeds, the return value is a search handle 249 * that can be used in a subsequent call to the FindNextFile or 250 * FindClose functions. 251 * If the function fails, the return value is INVALID_HANDLE_VALUE 252 * Remark : 253 * Status : 254 * 255 * Author : SvL 256 *****************************************************************************/ 257 ODINFUNCTION6(HANDLE, FindFirstFileExA, LPCSTR, lpFileName, 258 FINDEX_INFO_LEVELS, fInfoLevelId, 259 LPVOID, lpFindFileData, 260 FINDEX_SEARCH_OPS, fSearchOp, 261 LPVOID, lpSearchFilter, 262 DWORD, dwAdditionalFlags) 263 { 233 264 HANDLE hFind; 234 265 char *filename; 235 266 int namelen; 236 267 237 dprintf(("FindFirstFileA %s", lpFileName)); 238 239 if(lpFileName == NULL || lpFindFileData == NULL) 240 { 241 SetLastError(ERROR_INVALID_PARAMETER); 242 return -1; 243 } 244 245 namelen = strlen(lpFileName); 246 if(lpFileName[namelen-1] == '\\') 247 { 248 filename = (char *)alloca(namelen+1); 249 strcpy(filename, lpFileName); 250 filename[namelen-1] = 0; 251 } 252 else 253 filename = (char *)lpFileName; 254 255 return (HANDLE)OSLibDosFindFirst(filename,lpFindFileData); 268 if(lpFileName == NULL || lpFindFileData == NULL) 269 { 270 SetLastError(ERROR_INVALID_PARAMETER); 271 return INVALID_HANDLE_VALUE; 272 } 273 274 if ((fSearchOp != FindExSearchNameMatch) || (dwAdditionalFlags != 0)) 275 { 276 dprintf(("!ERROR!: options not implemented 0x%08x 0x%08lx\n", fSearchOp, dwAdditionalFlags )); 277 SetLastError(ERROR_INVALID_PARAMETER); 278 return INVALID_HANDLE_VALUE; 279 } 280 281 dprintf(("FindFirstFileExA %s %x %x %x %x %x", lpFileName, fInfoLevelId, lpFindFileData, fSearchOp, lpSearchFilter, dwAdditionalFlags)); 282 283 switch(fInfoLevelId) 284 { 285 case FindExInfoStandard: 286 namelen = strlen(lpFileName); 287 if(lpFileName[namelen-1] == '\\') 288 { 289 filename = (char *)alloca(namelen+1); 290 strcpy(filename, lpFileName); 291 filename[namelen-1] = 0; 292 } 293 else 294 filename = (char *)lpFileName; 295 296 return (HANDLE)OSLibDosFindFirst(filename, (WIN32_FIND_DATAA *)lpFindFileData); 297 298 default: //TODO 299 dprintf(("!ERROR! unsupported fInfoLevelId")); 300 SetLastError(ERROR_INVALID_PARAMETER); 301 break; 302 } 303 return INVALID_HANDLE_VALUE; 304 } 305 //****************************************************************************** 306 //****************************************************************************** 307 HANDLE WINAPI FindFirstFileW(LPCWSTR lpFileName, WIN32_FIND_DATAW *lpFindFileData) 308 { 309 return FindFirstFileExW(lpFileName, FindExInfoStandard, lpFindFileData, 310 FindExSearchNameMatch, NULL, 0); 311 } 312 /***************************************************************************** 313 * Name : HANDLE WIN32API FindFirstFileExW 314 * Purpose : The FindFirstFileExW function searches a directory for a file 315 * whose name and attributes match those specified in the 316 * function call. 317 * Parameters: LPCWSTR lpFileName pointer to the name of the file 318 * to search for 319 * FINDEX_INFO_LEVELS fInfoLevelId information level of the returned data 320 * LPVOID lpFindFileData pointer to the returned information 321 * FINDEX_SEARCH_OPS fSearchOp type of filtering to perform 322 * LPVOID lpSearchFilter pointer to search criteria 323 * DWORD dwAdditionalFlags additional search control flags 324 * Variables : 325 * Result : If the function succeeds, the return value is a search handle 326 * that can be used in a subsequent call to the FindNextFile or 327 * FindClose functions. 328 * If the function fails, the return value is INVALID_HANDLE_VALUE 329 * Remark : 330 * Status : 331 * 332 * Author : Wine 333 *****************************************************************************/ 334 ODINFUNCTION6(HANDLE, FindFirstFileExW, LPCWSTR, lpFileName, 335 FINDEX_INFO_LEVELS, fInfoLevelId, 336 LPVOID, lpFindFileData, 337 FINDEX_SEARCH_OPS, fSearchOp, 338 LPVOID, lpSearchFilter, 339 DWORD, dwAdditionalFlags) 340 { 341 HANDLE handle; 342 WIN32_FIND_DATAA dataA; 343 LPVOID _lpFindFileData; 344 LPSTR pathA; 345 346 switch(fInfoLevelId) 347 { 348 case FindExInfoStandard: 349 { 350 _lpFindFileData = &dataA; 351 } 352 break; 353 default: 354 dprintf(("!ERROR! unsupported fInfoLevelId")); 355 SetLastError(ERROR_INVALID_PARAMETER); 356 break; 357 } 358 359 pathA = HEAP_strdupWtoA( GetProcessHeap(), 0, lpFileName ); 360 handle = FindFirstFileExA(pathA, fInfoLevelId, _lpFindFileData, fSearchOp, lpSearchFilter, dwAdditionalFlags); 361 HeapFree( GetProcessHeap(), 0, pathA ); 362 if (handle == INVALID_HANDLE_VALUE) return handle; 363 364 switch(fInfoLevelId) 365 { 366 case FindExInfoStandard: 367 { 368 WIN32_FIND_DATAW *dataW = (WIN32_FIND_DATAW*) lpFindFileData; 369 dataW->dwFileAttributes = dataA.dwFileAttributes; 370 dataW->ftCreationTime = dataA.ftCreationTime; 371 dataW->ftLastAccessTime = dataA.ftLastAccessTime; 372 dataW->ftLastWriteTime = dataA.ftLastWriteTime; 373 dataW->nFileSizeHigh = dataA.nFileSizeHigh; 374 dataW->nFileSizeLow = dataA.nFileSizeLow; 375 MultiByteToWideChar( CP_ACP, 0, dataA.cFileName, -1, 376 dataW->cFileName, sizeof(dataW->cFileName)/sizeof(WCHAR) ); 377 MultiByteToWideChar( CP_ACP, 0, dataA.cAlternateFileName, -1, 378 dataW->cAlternateFileName, 379 sizeof(dataW->cAlternateFileName)/sizeof(WCHAR) ); 380 } 381 break; 382 } 383 return handle; 256 384 } 257 385 //****************************************************************************** … … 264 392 { 265 393 return (HANDLE)OSLibDosFindFirstMulti(lpFileName,lpFindFileData,count); 266 }267 //******************************************************************************268 //******************************************************************************269 ODINFUNCTION2(HANDLE, FindFirstFileW,270 LPCWSTR, lpFileName,271 WIN32_FIND_DATAW *, lpFindFileData)272 {273 HANDLE rc;274 char *astring;275 WIN32_FIND_DATAA wfda;276 277 astring = UnicodeToAsciiString((LPWSTR)lpFileName);278 dprintf(("FindFirstFileW %s", astring));279 rc = (HANDLE)OSLibDosFindFirst(astring,&wfda);280 281 if(rc == -1) {282 memset(lpFindFileData, 0, sizeof(WIN32_FIND_DATAW));283 }284 else {285 // convert back the result structure286 memcpy(lpFindFileData,287 &wfda,288 sizeof(WIN32_FIND_DATAA));289 290 lstrcpynAtoW (lpFindFileData->cFileName,291 wfda.cFileName,292 sizeof(wfda.cFileName));293 294 lstrcpynAtoW (lpFindFileData->cAlternateFileName,295 wfda.cAlternateFileName,296 sizeof(wfda.cAlternateFileName));297 }298 FreeAsciiString(astring);299 return(rc);300 394 } 301 395 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.