static void test_MsiRecordGetString(void) { MSIHANDLE rec; CHAR buf[MAX_PATH]; DWORD sz; UINT r; rec = MsiCreateRecord(2); ok(rec != 0, "Expected a valid handle\n"); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetString(rec, 1, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expected 0, got %d\n", sz); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetString(rec, 10, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expected 0, got %d\n", sz); MsiCloseHandle(rec); }
static void ReloadMyAvatar(LPVOID lpParam) { char *szProto = (char *)lpParam; mir_sleep(500); for (int i = 0; !g_shutDown && i < g_MyAvatars.getCount(); i++) { char *myAvatarProto = g_MyAvatars[i].szProtoname; if (szProto[0] == 0) { // Notify to all possibles if (lstrcmpA(myAvatarProto, szProto)) { if (!ProtoServiceExists( myAvatarProto, PS_SETMYAVATAR)) continue; if (!Proto_IsAvatarsEnabled( myAvatarProto )) continue; } } else if (lstrcmpA(myAvatarProto, szProto)) continue; if (g_MyAvatars[i].hbmPic) DeleteObject(g_MyAvatars[i].hbmPic); if (CreateAvatarInCache((HANDLE)-1, &g_MyAvatars[i], myAvatarProto) != -1) NotifyEventHooks(hMyAvatarChanged, (WPARAM)myAvatarProto, (LPARAM)&g_MyAvatars[i]); else NotifyEventHooks(hMyAvatarChanged, (WPARAM)myAvatarProto, 0); } free(lpParam); }
/* If you change something in these tests, please do the same * for GetWindowsDirectory tests. */ static void test_GetSystemDirectoryA(void) { UINT len, len_with_null; char buf[MAX_PATH]; len_with_null = GetSystemDirectoryA(NULL, 0); ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH\n"); lstrcpyA(buf, "foo"); len = GetSystemDirectoryA(buf, 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d\n", len, len_with_null); lstrcpyA(buf, "foo"); len = GetSystemDirectoryA(buf, len_with_null - 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d\n", len, len_with_null); lstrcpyA(buf, "foo"); len = GetSystemDirectoryA(buf, len_with_null); ok(lstrcmpA(buf, "foo") != 0, "should touch the buffer\n"); ok(len == strlen(buf), "returned length should be equal to the length of string\n"); ok(len == len_with_null-1, "GetSystemDirectoryW returned %d, expected %d\n", len, len_with_null-1); }
HRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret) { static const WCHAR trueW[] = {'t','r','u','e',0}; static const WCHAR falseW[] = {'f','a','l','s','e',0}; static const WCHAR true2W[] = {'#','T','R','U','E','#',0}; static const WCHAR false2W[] = {'#','F','A','L','S','E','#',0}; LONGLONG res; HRESULT hr; TRACE("%p,%p\n", propvarIn, ret); *ret = FALSE; switch (propvarIn->vt) { case VT_BOOL: *ret = propvarIn->u.boolVal == VARIANT_TRUE; return S_OK; case VT_LPWSTR: case VT_BSTR: if (!propvarIn->u.pwszVal) return DISP_E_TYPEMISMATCH; if (!lstrcmpiW(propvarIn->u.pwszVal, trueW) || !lstrcmpW(propvarIn->u.pwszVal, true2W)) { *ret = TRUE; return S_OK; } if (!lstrcmpiW(propvarIn->u.pwszVal, falseW) || !lstrcmpW(propvarIn->u.pwszVal, false2W)) { *ret = FALSE; return S_OK; } break; case VT_LPSTR: if (!propvarIn->u.pszVal) return DISP_E_TYPEMISMATCH; if (!lstrcmpiA(propvarIn->u.pszVal, "true") || !lstrcmpA(propvarIn->u.pszVal, "#TRUE#")) { *ret = TRUE; return S_OK; } if (!lstrcmpiA(propvarIn->u.pszVal, "false") || !lstrcmpA(propvarIn->u.pszVal, "#FALSE#")) { *ret = FALSE; return S_OK; } break; } hr = PROPVAR_ConvertNumber(propvarIn, 64, TRUE, &res); *ret = !!res; return hr; }
void CCommandLineInfo::ParseParamFlag(const char* pszParam) { // OLE command switches are case insensitive, while // shell command switches are case sensitive if (lstrcmpA(pszParam, "pt") == 0) m_nShellCommand = FilePrintTo; else if (lstrcmpA(pszParam, "p") == 0) m_nShellCommand = FilePrint; else if (::AfxInvariantStrICmp(pszParam, "Register") == 0 || ::AfxInvariantStrICmp(pszParam, "Regserver") == 0) m_nShellCommand = AppRegister; else if (::AfxInvariantStrICmp(pszParam, "RegisterPerUser") == 0 || ::AfxInvariantStrICmp(pszParam, "RegserverPerUser") == 0) { m_nShellCommand = AppRegister; m_bRegisterPerUser = TRUE; } else if (::AfxInvariantStrICmp(pszParam, "Unregister") == 0 || ::AfxInvariantStrICmp(pszParam, "Unregserver") == 0) m_nShellCommand = AppUnregister; else if (::AfxInvariantStrICmp(pszParam, "UnregisterPerUser") == 0 || ::AfxInvariantStrICmp(pszParam, "UnregserverPerUser") == 0) { m_nShellCommand = AppUnregister; m_bRegisterPerUser = TRUE; } else if (_strnicmp(pszParam, RESTART_COMMAND_LINE_ARG, _countof(RESTART_COMMAND_LINE_ARG) - 1) == 0) { CString strParam = pszParam; if (strParam.GetLength() == _countof(RESTART_COMMAND_LINE_ARG) + RESTART_IDENTIFIER_LEN) { m_nShellCommand = RestartByRestartManager; m_strRestartIdentifier = strParam.Right(RESTART_IDENTIFIER_LEN); } } else if (lstrcmpA(pszParam, "ddenoshow") == 0) { // AfxOleSetUserCtrl(FALSE); m_nShellCommand = FileDDENoShow; } else if (lstrcmpA(pszParam, "dde") == 0) { // AfxOleSetUserCtrl(FALSE); m_nShellCommand = FileDDE; } else if (::AfxInvariantStrICmp(pszParam, "Embedding") == 0) { // AfxOleSetUserCtrl(FALSE); m_bRunEmbedded = TRUE; m_bShowSplash = FALSE; } else if (::AfxInvariantStrICmp(pszParam, "Automation") == 0) { // AfxOleSetUserCtrl(FALSE); m_bRunAutomated = TRUE; m_bShowSplash = FALSE; } }
static void test_inffilelistA(void) { static const char inffile2[] = "test2.inf"; static const char *inf = "[Version]\n" "Signature=\"$Chicago$\""; char buffer[MAX_PATH] = { 0 }; char dir[MAX_PATH], *p; DWORD expected, outsize; BOOL ret; if(!pSetupGetInfFileListA) { win_skip("SetupGetInfFileListA not present\n"); return; } /* create a private directory, the temp directory may contain some * inf files left over from old installations */ if (!GetTempFileNameA(CURR_DIR, "inftest", 1, dir)) { win_skip("GetTempFileNameA failed with error %d\n", GetLastError()); return; } if (!CreateDirectoryA(dir, NULL )) { win_skip("CreateDirectoryA(%s) failed with error %d\n", dir, GetLastError()); return; } if (!SetCurrentDirectoryA(dir)) { win_skip("SetCurrentDirectoryA failed with error %d\n", GetLastError()); RemoveDirectoryA(dir); return; } create_inf_file(inffile, inf); create_inf_file(inffile2, inf); /* mixed style */ expected = 3 + strlen(inffile) + strlen(inffile2); ret = pSetupGetInfFileListA(dir, INF_STYLE_OLDNT | INF_STYLE_WIN4, buffer, MAX_PATH, &outsize); ok(ret, "expected SetupGetInfFileListA to succeed!\n"); ok(expected == outsize, "expected required buffersize to be %d, got %d\n", expected, outsize); for(p = buffer; lstrlenA(p) && (outsize > (p - buffer)); p+=lstrlenA(p) + 1) ok(!lstrcmpA(p,inffile2) || !lstrcmpA(p,inffile), "unexpected filename %s\n",p); DeleteFileA(inffile); DeleteFileA(inffile2); SetCurrentDirectoryA(CURR_DIR); RemoveDirectoryA(dir); }
// function to download webpage from the internet // szUrl = URL of the webpage to be retrieved // return value = 0 for success, 1 or HTTP error code for failure // global var used: szData, szInfo = containing the retrieved data int InternetDownloadFile (char *szUrl) { NETLIBHTTPREQUEST nlhr={0}; // initialize the netlib request nlhr.cbSize=sizeof(nlhr); nlhr.requestType=REQUEST_GET; nlhr.flags=NLHRF_DUMPASTEXT; nlhr.szUrl= szUrl; // change the header so the plugin is pretended to be IE 6 + WinXP nlhr.headersCount++; nlhr.headers=(NETLIBHTTPHEADER*)malloc(sizeof(NETLIBHTTPHEADER)*nlhr.headersCount); CopyMemory(nlhr.headers,nlhr.headers,sizeof(NETLIBHTTPHEADER)*nlhr.headersCount); nlhr.headers[nlhr.headersCount-1].szName="User-Agent"; nlhr.headers[nlhr.headersCount-1].szValue="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; // download the page NETLIBHTTPREQUEST *nlhrReply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)hNetlibUser,(LPARAM)&nlhr); if (nlhrReply) { // return error code if the recieved code is neither 200 OK or 302 Moved if (nlhrReply->resultCode != 200 && nlhrReply->resultCode != 302) return nlhrReply->resultCode; // if the recieved code is 200 OK else if (nlhrReply->resultCode == 200) { // allocate memory and save the retrieved data szData = (char *)malloc(lstrlenA(nlhrReply->pData)+2); lstrcpynA(szData, nlhrReply->pData, lstrlenA(nlhrReply->pData)); } // if the recieved code is 302 Moved, Found, etc else if (nlhrReply->resultCode == 302) { // page moved int i; // get the url for the new location and save it to szInfo // look for the reply header "Location" for (i=0; i<nlhrReply->headersCount; i++) { if (!lstrcmpA(nlhrReply->headers[i].szName, "Location")) { szData = (char *)malloc(512); // add "Moved/Location:" in front of the new URL for identification mir_snprintf(szData, 512, "Moved/Location: %s\n", nlhrReply->headers[i].szValue); break; } } // log the new url into netlib log CallService(MS_NETLIB_LOG,(WPARAM)hNetlibUser,(LPARAM)szData); } } // if the data does not downloaded successfully (ie. disconnected), then return 1 as error code else return 1; // make a copy of the retrieved data, then free the memory of the http reply szInfo = szData; CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)nlhrReply); // the recieved data is empty, data was not recieved, so return an error code of 1 if (!lstrcmpA(szInfo, "")) return 1; return 0; }
static void test_UDS_SETBUDDYINT(void) { HWND updown; DWORD style, ret; CHAR text[10]; /* cleanup buddy */ text[0] = '\0'; SetWindowTextA(g_edit, text); /* creating without UDS_SETBUDDYINT */ updown = create_updown_control(UDS_ALIGNRIGHT, g_edit); /* try to set UDS_SETBUDDYINT after creation */ style = GetWindowLongA(updown, GWL_STYLE); SetWindowLongA(updown, GWL_STYLE, style | UDS_SETBUDDYINT); style = GetWindowLongA(updown, GWL_STYLE); ok(style & UDS_SETBUDDYINT, "Expected UDS_SETBUDDY to be set\n"); SendMessageA(updown, UDM_SETPOS, 0, 20); GetWindowTextA(g_edit, text, ARRAY_SIZE(text)); ok(lstrlenA(text) == 0, "Expected empty string\n"); DestroyWindow(updown); /* creating with UDS_SETBUDDYINT */ updown = create_updown_control(UDS_SETBUDDYINT | UDS_ALIGNRIGHT, g_edit); GetWindowTextA(g_edit, text, ARRAY_SIZE(text)); /* 50 is initial value here */ ok(lstrcmpA(text, "50") == 0, "Expected '50', got '%s'\n", text); /* now remove style flag */ style = GetWindowLongA(updown, GWL_STYLE); SetWindowLongA(updown, GWL_STYLE, style & ~UDS_SETBUDDYINT); SendMessageA(updown, UDM_SETPOS, 0, 20); GetWindowTextA(g_edit, text, ARRAY_SIZE(text)); ok(lstrcmpA(text, "20") == 0, "Expected '20', got '%s'\n", text); /* set edit text directly, check position */ strcpy(text, "10"); SetWindowTextA(g_edit, text); ret = SendMessageA(updown, UDM_GETPOS, 0, 0); expect(10, ret); strcpy(text, "11"); SetWindowTextA(g_edit, text); ret = SendMessageA(updown, UDM_GETPOS, 0, 0); expect(11, LOWORD(ret)); expect(0, HIWORD(ret)); /* set to invalid value */ strcpy(text, "21st"); SetWindowTextA(g_edit, text); ret = SendMessageA(updown, UDM_GETPOS, 0, 0); expect(11, LOWORD(ret)); expect(TRUE, HIWORD(ret)); /* set style back */ style = GetWindowLongA(updown, GWL_STYLE); SetWindowLongA(updown, GWL_STYLE, style | UDS_SETBUDDYINT); SendMessageA(updown, UDM_SETPOS, 0, 30); GetWindowTextA(g_edit, text, ARRAY_SIZE(text)); ok(lstrcmpA(text, "30") == 0, "Expected '30', got '%s'\n", text); DestroyWindow(updown); }
static void test_negative_dest_length(void) { int len, i; static WCHAR bufW[LONGBUFLEN]; static char bufA[LONGBUFLEN]; static WCHAR originalW[LONGBUFLEN]; static char originalA[LONGBUFLEN]; DWORD theError; /* Test return on -1 dest length */ SetLastError( 0xdeadbeef ); memset(bufA,'x',sizeof(bufA)); len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, bufA, -1, NULL, NULL); ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "WideCharToMultiByte(destlen -1): len=%d error=%x\n", len, GetLastError()); SetLastError( 0xdeadbeef ); memset(bufW,'x',sizeof(bufW)); len = MultiByteToWideChar(CP_ACP, 0, foobarA, -1, bufW, -1); ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "MultiByteToWideChar(destlen -1): len=%d error=%x\n", len, GetLastError()); /* Test return on -1000 dest length */ SetLastError( 0xdeadbeef ); memset(bufA,'x',sizeof(bufA)); len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, bufA, -1000, NULL, NULL); ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "WideCharToMultiByte(destlen -1000): len=%d error=%x\n", len, GetLastError()); SetLastError( 0xdeadbeef ); memset(bufW,'x',sizeof(bufW)); len = MultiByteToWideChar(CP_ACP, 0, foobarA, -1000, bufW, -1); ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "MultiByteToWideChar(destlen -1000): len=%d error=%x\n", len, GetLastError()); /* Test return on INT_MAX dest length */ SetLastError( 0xdeadbeef ); memset(bufA,'x',sizeof(bufA)); len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, bufA, INT_MAX, NULL, NULL); ok(len == 7 && !lstrcmpA(bufA, "foobar") && GetLastError() == 0xdeadbeef, "WideCharToMultiByte(destlen INT_MAX): len=%d error=%x\n", len, GetLastError()); /* Test return on INT_MAX dest length and very long input */ SetLastError( 0xdeadbeef ); memset(bufA,'x',sizeof(bufA)); for (i=0; i < LONGBUFLEN - 1; i++) { originalW[i] = 'Q'; originalA[i] = 'Q'; } originalW[LONGBUFLEN-1] = 0; originalA[LONGBUFLEN-1] = 0; len = WideCharToMultiByte(CP_ACP, 0, originalW, -1, bufA, INT_MAX, NULL, NULL); theError = GetLastError(); ok(len == LONGBUFLEN && !lstrcmpA(bufA, originalA) && theError == 0xdeadbeef, "WideCharToMultiByte(srclen %d, destlen INT_MAX): len %d error=%x\n", LONGBUFLEN, len, theError); }
static void test_summary_binary(void) { const char *msifile = "winetest.msi"; MSIHANDLE hdb = 0, hsuminfo = 0; UINT r, type, count; INT ival; DWORD sz; char sval[20]; DeleteFile( msifile ); test_create_database_binary(); ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes(msifile), "file doesn't exist!\n"); /* just MsiOpenDatabase should not create a file */ r = MsiOpenDatabase(msifile, MSIDBOPEN_READONLY, &hdb); ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); r = MsiGetSummaryInformation(hdb, NULL, 0, &hsuminfo); ok(r == ERROR_SUCCESS, "MsiGetSummaryInformation failed\n"); /* * Check what reading PID_LASTPRINTED does... * The string value is written to the msi file * but it appears that we're not allowed to read it back again. * We can still read its type though...? */ sz = sizeof sval; sval[0] = 0; type = 0; r = MsiSummaryInfoGetProperty(hsuminfo, PID_LASTPRINTED, &type, NULL, NULL, sval, &sz); ok(r == ERROR_SUCCESS, "MsiSummaryInfoGetProperty failed\n"); ok(!lstrcmpA(sval, "") || !lstrcmpA(sval, "7"), "Expected empty string or \"7\", got \"%s\"\n", sval); todo_wine { ok(type == VT_LPSTR, "Expected VT_LPSTR, got %d\n", type); ok(sz == 0 || sz == 1, "Expected 0 or 1, got %d\n", sz); } ival = -1; r = MsiSummaryInfoGetProperty(hsuminfo, PID_WORDCOUNT, &type, &ival, NULL, NULL, NULL); ok(r == ERROR_SUCCESS, "MsiSummaryInfoGetProperty failed\n"); todo_wine ok( ival == 0, "value incorrect\n"); /* looks like msi adds some of its own values in here */ count = 0; r = MsiSummaryInfoGetPropertyCount( hsuminfo, &count ); ok(r == ERROR_SUCCESS, "getpropcount failed\n"); todo_wine ok(count == 10, "prop count incorrect\n"); MsiCloseHandle( hsuminfo ); MsiCloseHandle( hdb ); DeleteFile( msifile ); }
static int MessageSettingChanged(WPARAM wParam, LPARAM lParam) { DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *) lParam; char *szProto; szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); if (lstrcmpA(cws->szModule, "CList") && (szProto == NULL || lstrcmpA(cws->szModule, szProto))) return 0; WindowList_Broadcast(g_dat->hMessageWindowList, DM_UPDATETITLE, (WPARAM) cws, 0); return 0; }
int onContactSettingChanged(WPARAM wParam,LPARAM lParam) { DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam; char *proto = GetContactProto(wParam); if (!proto) return 0; if (!lstrcmpA(cws->szModule,proto)) if (!lstrcmpA(cws->szSetting, "MirVer")) ExtraIconsApply(wParam, 1); return 0; }
static int StatusSettingChanged(WPARAM wParam,LPARAM lParam) { if (currentWatcherType&SDWTF_STATUS) { DBCONTACTWRITESETTING *dbcws=(DBCONTACTWRITESETTING*)lParam; if ((HANDLE)wParam != NULL && dbcws->value.wVal==ID_STATUS_OFFLINE && !lstrcmpA(dbcws->szSetting,"Status")) { char *pszProto = GetContactProto((HANDLE)wParam); if (pszProto != NULL && !lstrcmpA(dbcws->szModule,pszProto)) if (CheckAllContactsOffline()) ShutdownAndStopWatcher(); } } return 0; }
//---------------------------------------------------------------------------- static FARPROC WINAPI delayFailureHook(/*dliNotification*/unsigned dliNotify, PDelayLoadInfo pdli) { if( dliNotify == /*dliFailGetProcAddress*/dliFailGetProc && pdli && pdli->cb == sizeof(*pdli) && pdli->hmodCur == GetModuleHandleA("kernel32") && pdli->dlp.fImportByName && pdli->dlp.szProcName && ( !lstrcmpA(pdli->dlp.szProcName, "EncodePointer") || !lstrcmpA(pdli->dlp.szProcName, "DecodePointer"))) { return (FARPROC)no_recode_pointer; } return nullptr; }
static void test_kerberos(void) { SecPkgInfoA *info; TimeStamp ttl; CredHandle cred; SECURITY_STATUS status; SEC_CHAR provider[] = {'K','e','r','b','e','r','o','s',0}; static const ULONG expected_flags = SECPKG_FLAG_INTEGRITY | SECPKG_FLAG_PRIVACY | SECPKG_FLAG_TOKEN_ONLY | SECPKG_FLAG_DATAGRAM | SECPKG_FLAG_CONNECTION | SECPKG_FLAG_MULTI_REQUIRED | SECPKG_FLAG_EXTENDED_ERROR | SECPKG_FLAG_IMPERSONATION | SECPKG_FLAG_ACCEPT_WIN32_NAME | SECPKG_FLAG_NEGOTIABLE | SECPKG_FLAG_GSS_COMPATIBLE | SECPKG_FLAG_LOGON | SECPKG_FLAG_MUTUAL_AUTH | SECPKG_FLAG_DELEGATION | SECPKG_FLAG_READONLY_WITH_CHECKSUM; static const ULONG optional_mask = SECPKG_FLAG_RESTRICTED_TOKENS | SECPKG_FLAG_APPCONTAINER_CHECKS; status = QuerySecurityPackageInfoA(provider, &info); ok(status == SEC_E_OK, "Kerberos package not installed, skipping test\n"); if(status != SEC_E_OK) return; ok( (info->fCapabilities & ~optional_mask) == expected_flags, "got %08x, expected %08x\n", info->fCapabilities, expected_flags ); ok( info->wVersion == 1, "got %u\n", info->wVersion ); ok( info->wRPCID == RPC_C_AUTHN_GSS_KERBEROS, "got %u\n", info->wRPCID ); ok( info->cbMaxToken >= 12000, "got %u\n", info->cbMaxToken ); ok( !lstrcmpA( info->Name, "Kerberos" ), "got %s\n", info->Name ); ok( !lstrcmpA( info->Comment, "Microsoft Kerberos V1.0" ), "got %s\n", info->Comment ); FreeContextBuffer( info ); status = AcquireCredentialsHandleA( NULL, provider, SECPKG_CRED_OUTBOUND, NULL, NULL, NULL, NULL, &cred, &ttl ); todo_wine ok( status == SEC_E_OK, "AcquireCredentialsHandleA returned %08x\n", status ); if(status == SEC_E_OK) FreeCredentialHandle( &cred ); }
static void test_assembly_name_props_line(IAssemblyName *name, const ASMPROP_RES *vals, int line) { HRESULT hr; DWORD i, size; WCHAR expect[MAX_PATH]; WCHAR str[MAX_PATH]; CHAR val[MAX_PATH]; for (i = 0; i < ASM_NAME_MAX_PARAMS; i++) { to_widechar(expect, vals[i].val); size = MAX_PATH; ZeroMemory(str, MAX_PATH); hr = IAssemblyName_GetProperty(name, i, str, &size); to_multibyte(val, str); ok(hr == vals[i].hr || broken(i >= ASM_NAME_CONFIG_MASK && hr == E_INVALIDARG) || /* .NET 1.1 */ broken(i >= ASM_NAME_FILE_MAJOR_VERSION && hr == E_INVALIDARG), /* .NET 1.0 */ "%d: prop %d: Expected %08x, got %08x\n", line, i, vals[i].hr, hr); if (hr != E_INVALIDARG) { if (i == ASM_NAME_PUBLIC_KEY_TOKEN) ok(!memcmp(vals[i].val, str, size), "Expected a correct ASM_NAME_PUBLIC_KEY_TOKEN\n"); else ok(!lstrcmpA(vals[i].val, val), "%d: prop %d: Expected \"%s\", got \"%s\"\n", line, i, vals[i].val, val); ok(size == vals[i].size, "%d: prop %d: Expected %d, got %d\n", line, i, vals[i].size, size); } } }
static int OnContactSettingChanged(MCONTACT hContact, DBCONTACTWRITESETTING* pdbcws) { if (hContact && pdbcws && (pdbcws->value.type <= DBVT_BYTE) && !lstrcmpA(pdbcws->szSetting, SET_CONTACT_GENDER)) OnCListApplyIcons(hContact, 0); return 0; }
static xmlParserInputPtr external_entity_loader(const char *URL, const char *ID, xmlParserCtxtPtr ctxt) { xmlParserInputPtr input; TRACE("(%s %s %p)\n", debugstr_a(URL), debugstr_a(ID), ctxt); assert(MSXML_hInstance != NULL); assert(datatypes_rsrc != NULL); assert(datatypes_handle != NULL); assert(datatypes_src != NULL); /* TODO: if the desired schema is in the cache, load it from there */ if (lstrcmpA(URL, "urn:schemas-microsoft-com:datatypes") == 0) { TRACE("loading built-in schema for %s\n", URL); input = xmlNewStringInputStream(ctxt, datatypes_src); } else { input = _external_entity_loader(URL, ID, ctxt); } return input; }
inline SYSTEMTIME ZLSignInfo::_ReadSigningTime(PCMSG_SIGNER_INFO pMsgSignerInfoOfTimestamp) { SYSTEMTIME st = {0}; for (DWORD n = 0; n < pMsgSignerInfoOfTimestamp->AuthAttrs.cAttr; ++n) { if (lstrcmpA(szOID_RSA_signingTime, pMsgSignerInfoOfTimestamp->AuthAttrs.rgAttr[n].pszObjId) == 0) { FILETIME ftSignInfo = {0}; DWORD dwSize = sizeof(FILETIME); if (::CryptDecodeObject( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_RSA_signingTime, pMsgSignerInfoOfTimestamp->AuthAttrs.rgAttr[n].rgValue[0].pbData, pMsgSignerInfoOfTimestamp->AuthAttrs.rgAttr[n].rgValue[0].cbData, 0, (PVOID)&ftSignInfo, &dwSize)) { FILETIME ftTmp = {0}; ::FileTimeToLocalFileTime(&ftSignInfo, &ftTmp); ::FileTimeToSystemTime(&ftTmp, &st); } break; } } return st; }
BOOL apxJavaStart(LPAPXJAVA_THREADARGS pArgs) { LPAPXJAVAVM lpJava; lpJava = APXHANDLE_DATA(pArgs->hJava); if (!lpJava) return FALSE; lpJava->dwWorkerStatus = 0; lpJava->hWorkerInit = CreateEvent(NULL, FALSE, FALSE, NULL); lpJava->hWorkerSync = CreateEvent(NULL, FALSE, FALSE, NULL); lpJava->hWorkerThread = CreateThread(NULL, lpJava->szStackSize, __apxJavaWorkerThread, pArgs, CREATE_SUSPENDED, &lpJava->iWorkerThread); if (IS_INVALID_HANDLE(lpJava->hWorkerThread)) { apxLogWrite(APXLOG_MARK_SYSERR); return FALSE; } ResumeThread(lpJava->hWorkerThread); /* Wait until the worker thread initializes */ WaitForSingleObject(lpJava->hWorkerInit, INFINITE); if (lpJava->dwWorkerStatus == 0) return FALSE; SetEvent(lpJava->hWorkerSync); if (lstrcmpA(lpJava->clWorker.sClazz, "java/lang/System")) { /* Give some time to initialize the thread * Unless we are calling System.exit(0). * This will be hanled by _onexit hook. */ Sleep(1000); } return TRUE; }
HANDLE CDatabase::FindContact(const wchar_t* uri) const { MTLASSERT(uri); HANDLE hContact = reinterpret_cast<HANDLE>(CallService(MS_DB_CONTACT_FINDFIRST, 0, 0)); while(hContact) { const char* protocol = reinterpret_cast<const char*>(CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)); if(protocol && !lstrcmpA(protocol, g_env.ProtocolName())) { if(DBGetContactSettingByte(hContact, g_env.ProtocolName(), "ChatRoom", 0) == 0) // Chat API support { DBVARIANT dbv; if(S_OK == DBGetContactSettingWString(hContact, g_env.ProtocolName(), "uri", &dbv)) { MTLASSERT(DBVT_WCHAR == dbv.type); bool found = 0 == lstrcmpiW(dbv.pwszVal, uri); DBFreeVariant(&dbv); if(found) { return hContact; } } } } hContact = reinterpret_cast<HANDLE>(CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)); } return 0; }
/* * Get the current sellection of the given combo box and set a DCB field to * the value matching that selection. */ static BOOL SERIALUI_GetConfItems(HWND hDlg, DWORD id, LPCPARAM2STR table, LPDWORD lpdwVal) { DWORD i; CHAR lpEntry[20]; HWND hControl = GetDlgItem(hDlg,id); if( (!hControl) || (!lpdwVal)) { TRACE("Couldn't get window handle for item %lx\n",id); return FALSE; } if(!GetWindowTextA(hControl, &lpEntry[0], sizeof(lpEntry))) { TRACE("Couldn't get window text for item %lx\n",id); return FALSE; } /* TRACE("%ld contains %s\n",id, lpEntry); */ for(i=0; i<table->dwSize; i++) { if(!lstrcmpA(table->data[i].name,lpEntry)) { *lpdwVal = table->data[i].val; return TRUE; } } return FALSE; }
static int SrmmMenu_ProcessIconClick(WPARAM hContact, LPARAM lParam) { StatusIconClickData *sicd = (StatusIconClickData *)lParam; if (lstrcmpA(sicd->szModule, MODULNAME)) return 0; if (!hContact) return 0; int mode = db_get_b(hContact, MODULNAME, "ShowMode", PU_SHOWMODE_AUTO); if (sicd->flags & MBCF_RIGHTBUTTON) { HMENU hMenu = CreatePopupMenu(); AppendMenu(hMenu, MF_STRING, 1+PU_SHOWMODE_AUTO, TranslateT("Auto")); AppendMenu(hMenu, MF_STRING, 1+PU_SHOWMODE_FAVORITE, TranslateT("Favorite")); AppendMenu(hMenu, MF_STRING, 1+PU_SHOWMODE_FULLSCREEN, TranslateT("Ignore fullscreen")); AppendMenu(hMenu, MF_STRING, 1+PU_SHOWMODE_BLOCK, TranslateT("Block")); CheckMenuItem(hMenu, 1+mode, MF_BYCOMMAND|MF_CHECKED); mode = TrackPopupMenu(hMenu, TPM_RETURNCMD, sicd->clickLocation.x, sicd->clickLocation.y, 0, WindowList_Find(hDialogsList, hContact), NULL); if (mode) { db_set_b(hContact, MODULNAME, "ShowMode", mode-1); SrmmMenu_UpdateIcon(hContact); } } else { db_set_b(hContact, MODULNAME, "ShowMode", (mode == PU_SHOWMODE_AUTO) ? PU_SHOWMODE_BLOCK : PU_SHOWMODE_AUTO); SrmmMenu_UpdateIcon(hContact); } return 0; }
void GetAvatarCache(LPTSTR szPath) { // Получить путь новым способом if ( ServiceExists( MS_UTILS_REPLACEVARS ) ) { LPTSTR szAvatarCache = Utils_ReplaceVarsT( _T("%miranda_avatarcache%\\") modname_t _T("\\") ); if ( szAvatarCache && szAvatarCache != (LPTSTR)0x80000000 ) { lstrcpyn( szPath, szAvatarCache, MAX_PATH ); // Создание пути до будущего файла аватара CallService( MS_UTILS_CREATEDIRTREET, 0, (LPARAM)szPath ); return; } } // Получить путь старым способом char szProfilePath[ MAX_PATH ], szProfileName[ MAX_PATH ]; CallService( MS_DB_GETPROFILEPATH, MAX_PATH, (LPARAM)szProfilePath ); CallService( MS_DB_GETPROFILENAME, MAX_PATH, (LPARAM)szProfileName ); char *pos = strrchr( szProfileName, '.' ); if ( lstrcmpA( pos, ".dat" ) == 0 ) *pos = 0; lstrcpy( szPath, CA2T( szProfilePath ) ); lstrcat( szPath, _T("\\") ); lstrcat( szPath, CA2T( szProfileName ) ); lstrcat( szPath, _T("\\AvatarCache\\") modname_t _T("\\") ); // Создание пути до будущего файла аватара CallService( MS_UTILS_CREATEDIRTREET, 0, (LPARAM)szPath ); return; }
void OptTree_SetOptions(HWND hwnd, int idcTree, OPTTREE_OPTION *options, int optionCount, DWORD dwOptions, char *szSettingName) { enum { IMG_GROUP, IMG_CHECK, IMG_NOCHECK, IMG_RCHECK, IMG_NORCHECK, IMG_GRPOPEN, IMG_GRPCLOSED }; HWND hwndTree = GetDlgItem(hwnd, idcTree); int i; for (i = 0; i < optionCount; ++i) { if ((!options[i].szSettingName && !szSettingName) || (options[i].szSettingName && szSettingName && !lstrcmpA(options[i].szSettingName, szSettingName))) { TVITEM tvi; tvi.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi.hItem = options[i].hItem; if (options[i].groupId == OPTTREE_CHECK) { tvi.iImage = tvi.iSelectedImage = (dwOptions & options[i].dwFlag) ? IMG_CHECK : IMG_NOCHECK; } else { tvi.iImage = tvi.iSelectedImage = (dwOptions & options[i].dwFlag) ? IMG_RCHECK : IMG_NORCHECK; } TreeView_SetItem(hwndTree, &tvi); } } }
int ContactSettingChanged(WPARAM wParam,LPARAM lParam) { MCONTACT hContact = (MCONTACT) wParam; DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam; logmsg("ContactSettingChanged1"); if(hContact==NULL || lstrcmpA(cws->szSetting,"Status")) return 0; WORD newStatus = cws->value.wVal; WORD oldStatus = DBGetContactSettingRangedWord(hContact,"UserOnline","OldStatus2",ID_STATUS_OFFLINE, ID_STATUS_MIN, ID_STATUS_MAX); if (oldStatus == newStatus) return 0; logmsg("ContactSettingChanged2"); db_set_w(hContact,"UserOnline","OldStatus2", newStatus); if(CallService(MS_IGNORE_ISIGNORED,wParam,IGNOREEVENT_USERONLINE)) return 0; DWORD dwStatuses = MAKELPARAM(oldStatus, newStatus); NotifyEventHooks(hHookContactStatusChanged, wParam, (LPARAM)dwStatuses); return 0; }
static void test_negative_source_length(void) { int len; char buf[10]; WCHAR bufW[10]; /* Test, whether any negative source length works as strlen() + 1 */ SetLastError( 0xdeadbeef ); memset(buf,'x',sizeof(buf)); len = WideCharToMultiByte(CP_ACP, 0, foobarW, -2002, buf, 10, NULL, NULL); ok(len == 7 && !lstrcmpA(buf, "foobar") && GetLastError() == 0xdeadbeef, "WideCharToMultiByte(-2002): len=%d error=%u\n", len, GetLastError()); SetLastError( 0xdeadbeef ); memset(bufW,'x',sizeof(bufW)); len = MultiByteToWideChar(CP_ACP, 0, "foobar", -2002, bufW, 10); ok(len == 7 && !mylstrcmpW(bufW, foobarW) && GetLastError() == 0xdeadbeef, "MultiByteToWideChar(-2002): len=%d error=%u\n", len, GetLastError()); SetLastError(0xdeadbeef); memset(bufW, 'x', sizeof(bufW)); len = MultiByteToWideChar(CP_ACP, 0, "foobar", -1, bufW, 6); ok(len == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "MultiByteToWideChar(-1): len=%d error=%u\n", len, GetLastError()); }
static void _check_string_transform(unsigned line, IUniformResourceLocatorA *urlA, LPCSTR input, DWORD flags, LPCSTR expectedOutput, BOOL is_todo) { CHAR *output; HRESULT hr; hr = urlA->lpVtbl->SetURL(urlA, input, flags); ok_(__FILE__,line)(hr == S_OK, "SetUrl failed, hr=0x%x\n", hr); if (FAILED(hr)) return; output = (void*)0xdeadbeef; hr = urlA->lpVtbl->GetURL(urlA, &output); if(expectedOutput) { if(is_todo) { todo_wine ok_(__FILE__,line)(hr == S_OK, "GetUrl failed, hr=0x%x\n", hr); }else { ok_(__FILE__,line)(hr == S_OK, "GetUrl failed, hr=0x%x\n", hr); } todo_wine ok_(__FILE__,line)(!lstrcmpA(output, expectedOutput), "unexpected URL change %s -> %s (expected %s)\n", input, output, expectedOutput); CoTaskMemFree(output); }else { todo_wine ok_(__FILE__,line)(hr == S_FALSE, "GetUrl failed, hr=0x%x\n", hr); todo_wine ok_(__FILE__,line)(!output, "GetUrl returned %s\n", output); } }
/** * returned function length can be somewhat different, more than real, due to other function code * not described in export table (for example: IsDebuggerPresent real length is 19, but * this function will return 173) */ int _scitGetExportedFunctionCodeLength(LPCSTR lpApiName, ScitApiDescriptor_t *aFunctions, DWORD nFunctions) { DWORD i; if (!lpApiName || !aFunctions || nFunctions <= 0) { return 0; } /* todo: fixme: implement better method to get code length */ for (i = 0; i < nFunctions; i++) { /* first - find function entry in sorted array */ if (!lstrcmpA(aFunctions[i].lpName, lpApiName)) { /* get next entry */ i++; if (i < nFunctions) { /* calculate function code length by next function */ return (DWORD)aFunctions[i].fAddr - (DWORD)aFunctions[i - 1].fAddr; } break; } } return 0; }
BOOL __stdcall ProcessRequest(HWND hwnd, LPARAM param) { char szBuf[MAX_PATH]; TEnumData *lParam = (TEnumData*)param; DWORD pid = 0; GetWindowThreadProcessId(hwnd, &pid); if (pid != 0) { // old system would get a window's pid and the module handle that created it // and try to OpenEvent() a event object name to it (prefixed with a string) // this was fine for most Oses (not the best way) but now actually compares // the class string (a bit slower) but should get rid of those bugs finally. HANDLE hMirandaWorkEvent = OpenEventA(EVENT_ALL_ACCESS, false, CreateProcessUID(pid, szBuf, sizeof(szBuf))); if (hMirandaWorkEvent != 0) { GetClassNameA(hwnd, szBuf, sizeof(szBuf)); if ( lstrcmpA(szBuf, MIRANDACLASS) != 0) { // opened but not valid. logA("ProcessRequest(%d, %p): class %s differs from %s\n", pid, hwnd, szBuf, MIRANDACLASS); CloseHandle(hMirandaWorkEvent); return true; } } // if the event object exists, a shlext.dll running in the instance must of created it. if (hMirandaWorkEvent != 0) { logA("ProcessRequest(%d, %p): window found\n", pid, hwnd); // prep the request ipcPrepareRequests(IPC_PACKET_SIZE, lParam->ipch, REQUEST_ICONS | REQUEST_GROUPS | REQUEST_CONTACTS | REQUEST_NEWICONS); // slots will be in the order of icon data, groups contacts, the first // slot will contain the profile name DWORD replyBits = ipcSendRequest(hMirandaWorkEvent, lParam->hWaitFor, lParam->ipch, 1000); // replyBits will be REPLY_FAIL if the wait timed out, or it'll be the request // bits as sent or a series of *_NOTIMPL bits where the request bit were, if there are no // contacts to speak of, don't bother showing this instance of Miranda } if (replyBits != REPLY_FAIL && lParam->ipch->ContactsBegin != NULL) { logA("ProcessRequest(%d, %p): IPC succeeded\n", pid, hwnd); // load the address again, the server side will always overwrite it lParam->ipch->pClientBaseAddress = lParam->ipch; // fixup all the pointers to be relative to the memory map // the base pointer of the client side version of the mapped file ipcFixupAddresses(lParam->ipch); // store the PID used to create the work event object // that got replied to -- this is needed since each contact // on the final menu maybe on a different instance and another OpenEvent() will be needed. lParam->pid = pid; // check out the user options from the server lParam->bShouldOwnerDraw = (lParam->ipch->dwFlags & HIPC_NOICONS) == 0; // process the icons BuildSkinIcons(lParam); // process other replies BuildMenus(lParam); } // close the work object CloseHandle(hMirandaWorkEvent); } } return true; }