int csync_fnmatch(const char *pattern, const char *name, int flags) { BOOL match; (void) flags; match = PathMatchSpecA(name, pattern); if(match) return 0; else return 1; }
/* 从输入表查找CRT版本 */ BOOL WINAPI find_msvcrt(char *crt_name,int len) { BOOL ret = FALSE; IMAGE_DOS_HEADER *pDos; IMAGE_OPTIONAL_HEADER *pOptHeader; IMAGE_IMPORT_DESCRIPTOR *pImport ; HMODULE hMod=GetModuleHandleW(NULL); if (!hMod) { #ifdef _LOGDEBUG logmsg("GetModuleHandleW false,hMod = 0\n"); #endif return ret; } pDos = (IMAGE_DOS_HEADER *)hMod; pOptHeader = (IMAGE_OPTIONAL_HEADER *)( (BYTE *)hMod + pDos->e_lfanew + SIZE_OF_NT_SIGNATURE + sizeof(IMAGE_FILE_HEADER) ); pImport = (IMAGE_IMPORT_DESCRIPTOR * )( (BYTE *)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress ) ; while( TRUE ) { char* pszDllName = NULL; char name[CRT_LEN+1] = {0}; IMAGE_THUNK_DATA *pThunk = (PIMAGE_THUNK_DATA)(pImport->Characteristics); IMAGE_THUNK_DATA *pThunkIAT = (PIMAGE_THUNK_DATA)(pImport->FirstThunk); if(pThunk == 0 && pThunkIAT == 0) break; pszDllName = (char*)((BYTE*)hMod+pImport->Name); #ifdef _LOGDEBUG logmsg("dllname: [%s]\n",(const char *)pszDllName); #endif if ( PathMatchSpecA(pszDllName,"msvcr*.dll") ) { strncpy(name,pszDllName,CRT_LEN); strncpy(crt_name,CharLowerA(name),len); ret = TRUE; break; } pImport++; } return ret; }
/************************************************************************* * PathMatchSpec [SHELL32.46] */ BOOL WINAPI PathMatchSpecAW(LPVOID name, LPVOID mask) { if (SHELL_OsIsUnicode()) return PathMatchSpecW( name, mask ); return PathMatchSpecA( name, mask ); }