void CFontDialog::GetCharFormat(CHARFORMAT& cf) const { USES_CONVERSION; cf.dwEffects = 0; cf.dwMask = 0; if ((m_cf.Flags & CF_NOSTYLESEL) == 0) { cf.dwMask |= CFM_BOLD | CFM_ITALIC; cf.dwEffects |= (IsBold()) ? CFE_BOLD : 0; cf.dwEffects |= (IsItalic()) ? CFE_ITALIC : 0; } if ((m_cf.Flags & CF_NOSIZESEL) == 0) { cf.dwMask |= CFM_SIZE; //GetSize() returns in tenths of points so mulitply by 2 to get twips cf.yHeight = GetSize()*2; } if ((m_cf.Flags & CF_NOFACESEL) == 0) { cf.dwMask |= CFM_FACE; cf.bPitchAndFamily = m_cf.lpLogFont->lfPitchAndFamily; lstrcpyA(cf.szFaceName, T2A((LPTSTR)(LPCTSTR)GetFaceName())); } if (m_cf.Flags & CF_EFFECTS) { cf.dwMask |= CFM_UNDERLINE | CFM_STRIKEOUT | CFM_COLOR; cf.dwEffects |= (IsUnderline()) ? CFE_UNDERLINE : 0; cf.dwEffects |= (IsStrikeOut()) ? CFE_STRIKEOUT : 0; cf.crTextColor = GetColor(); } if ((m_cf.Flags & CF_NOSCRIPTSEL) == 0) { cf.bCharSet = m_cf.lpLogFont->lfCharSet; cf.dwMask |= CFM_CHARSET; } cf.yOffset = 0; }
static void test_StrRetToBSTR(void) { static const WCHAR szTestW[] = { 'T','e','s','t','\0' }; ITEMIDLIST iidl[10]; BSTR bstr; STRRET strret; HRESULT ret; if (!pStrRetToBSTR) { win_skip("StrRetToBSTR() is not available\n"); return; } strret.uType = STRRET_WSTR; U(strret).pOleStr = CoDupStrW("Test"); bstr = 0; ret = pStrRetToBSTR(&strret, NULL, &bstr); ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), "STRRET_WSTR: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); SysFreeString(bstr); strret.uType = STRRET_CSTR; lstrcpyA(U(strret).cStr, "Test"); ret = pStrRetToBSTR(&strret, NULL, &bstr); ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), "STRRET_CSTR: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); SysFreeString(bstr); strret.uType = STRRET_OFFSET; U(strret).uOffset = 1; strcpy((char*)&iidl, " Test"); ret = pStrRetToBSTR(&strret, iidl, &bstr); ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), "STRRET_OFFSET: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); SysFreeString(bstr); /* Native crashes if str is NULL */ }
static char *StatusModeToDbSetting(int status,const char *suffix) { char *prefix; static char str[64]; switch(status) { case ID_STATUS_AWAY: prefix="Away"; break; case ID_STATUS_NA: prefix="Na"; break; case ID_STATUS_DND: prefix="Dnd"; break; case ID_STATUS_OCCUPIED: prefix="Occupied"; break; case ID_STATUS_FREECHAT: prefix="FreeChat"; break; case ID_STATUS_ONLINE: prefix="On"; break; case ID_STATUS_OFFLINE: prefix="Off"; break; case ID_STATUS_INVISIBLE: prefix="Inv"; break; case ID_STATUS_ONTHEPHONE: prefix="Otp"; break; case ID_STATUS_OUTTOLUNCH: prefix="Otl"; break; case ID_STATUS_IDLE: prefix="Idl"; break; default: return NULL; } lstrcpyA(str,prefix); lstrcatA(str,suffix); return str; }
MODULEINFO* MM_AddModule(const char* pszModule) { if (!pszModule) return NULL; if (!MM_FindModule(pszModule)) { MODULEINFO *node = (MODULEINFO*) mir_alloc(sizeof(MODULEINFO)); ZeroMemory(node, sizeof(MODULEINFO)); node->pszModule = (char*)mir_alloc(lstrlenA(pszModule) + 1); lstrcpyA(node->pszModule, pszModule); node->idleTimeStamp = time(0); if (m_ModList == NULL) { // list is empty m_ModList = node; node->next = NULL; } else { node->next = m_ModList; m_ModList = node; } return node; } return FALSE; }
HRESULT WINAPI D3DXCreateFontA(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight, UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily, const char *facename, struct ID3DXFont **font) { D3DXFONT_DESCA desc; if( !device || !font ) return D3DERR_INVALIDCALL; desc.Height=height; desc.Width=width; desc.Weight=weight; desc.MipLevels=miplevels; desc.Italic=italic; desc.CharSet=charset; desc.OutputPrecision=precision; desc.Quality=quality; desc.PitchAndFamily=pitchandfamily; if(facename != NULL) lstrcpyA(desc.FaceName, facename); else desc.FaceName[0] = '\0'; return D3DXCreateFontIndirectA(device, &desc, font); }
static INT_PTR CALLBACK WarnIniChangeDlgProc(HWND hwndDlg,UINT message,WPARAM wParam,LPARAM lParam) { static struct warnSettingChangeInfo_t *warnInfo; switch(message) { case WM_INITDIALOG: { char szSettingName[256]; const TCHAR *pszSecurityInfo; warnInfo = (warnSettingChangeInfo_t*)lParam; TranslateDialogDefault(hwndDlg); SetDlgItemText(hwndDlg, IDC_ININAME, warnInfo->szIniPath); lstrcpyA(szSettingName, warnInfo->szSection); lstrcatA(szSettingName," / "); lstrcatA(szSettingName,warnInfo->szName); SetDlgItemTextA(hwndDlg,IDC_SETTINGNAME,szSettingName); SetDlgItemTextA(hwndDlg,IDC_NEWVALUE,warnInfo->szValue); if(IsInSpaceSeparatedList(warnInfo->szSection,warnInfo->szSafeSections)) pszSecurityInfo=LPGENT("This change is known to be safe."); else if(IsInSpaceSeparatedList(warnInfo->szSection,warnInfo->szUnsafeSections)) pszSecurityInfo=LPGENT("This change is known to be potentially hazardous."); else pszSecurityInfo=LPGENT("This change is not known to be safe."); SetDlgItemText(hwndDlg,IDC_SECURITYINFO,TranslateTS(pszSecurityInfo)); return TRUE; } case WM_COMMAND: switch(LOWORD(wParam)) { case IDCANCEL: warnInfo->cancel=1; case IDYES: case IDNO: warnInfo->warnNoMore=IsDlgButtonChecked(hwndDlg,IDC_WARNNOMORE); EndDialog(hwndDlg,LOWORD(wParam)); break; } break; } return FALSE; }
static void test_dtm_get_ideal_size(void) { HWND hwnd; HDC hdc; HFONT hfont; LOGFONTA lf; TEXTMETRICA tm; SIZE size; BOOL r; hwnd = create_datetime_control(0); r = SendMessageA(hwnd, DTM_GETIDEALSIZE, 0, (LPARAM)&size); if (!r) { win_skip("DTM_GETIDEALSIZE is not available\n"); DestroyWindow(hwnd); return; } /* Set font so that the test is consistent on Wine and Windows */ ZeroMemory(&lf, sizeof(lf)); lf.lfWeight = FW_NORMAL; lf.lfHeight = 20; lstrcpyA(lf.lfFaceName, "Tahoma"); hfont = CreateFontIndirectA(&lf); SendMessageA(hwnd, WM_SETFONT, (WPARAM)hfont, (LPARAM)TRUE); hdc = GetDC(hwnd); GetTextMetricsA(hdc, &tm); ReleaseDC(hwnd, hdc); r = SendMessageA(hwnd, DTM_GETIDEALSIZE, 0, (LPARAM)&size); ok(r, "Expect DTM_GETIDEALSIZE message to return true\n"); ok(size.cx > 0 && size.cy >= tm.tmHeight, "Expect size.cx > 0 and size.cy >= %d, got cx:%d cy:%d\n", tm.tmHeight, size.cx, size.cy); DestroyWindow(hwnd); DeleteObject(hfont); }
/* * Try to create a .trashinfo file. This function will make several attempts with * different filenames. It will return the filename that succeeded or NULL if a file * couldn't be created. */ static char *create_trashinfo(const char *info_dir, const char *file_path) { const char *base_name; char *filename_buffer; ULONG seed = GetTickCount(); int i; errno = ENOMEM; /* out-of-memory is the only case when errno isn't set */ base_name = strrchr(file_path, '/'); if (base_name == NULL) base_name = file_path; else base_name++; filename_buffer = SHAlloc(strlen(base_name)+9+1); if (filename_buffer == NULL) return NULL; lstrcpyA(filename_buffer, base_name); if (try_create_trashinfo_file(info_dir, filename_buffer, file_path)) return filename_buffer; for (i=0; i<30; i++) { sprintf(filename_buffer, "%s-%d", base_name, i+1); if (try_create_trashinfo_file(info_dir, filename_buffer, file_path)) return filename_buffer; } for (i=0; i<1000; i++) { sprintf(filename_buffer, "%s-%08x", base_name, RtlRandom(&seed)); if (try_create_trashinfo_file(info_dir, filename_buffer, file_path)) return filename_buffer; } WARN("Couldn't create trashinfo after 1031 tries (errno=%d)\n", errno); SHFree(filename_buffer); return NULL; }
static HRESULT WINAPI IShellExecuteHookA_fnExecute(IShellExecuteHookA *iface, LPSHELLEXECUTEINFOA psei) { ICPanelImpl *This = impl_from_IShellExecuteHookA(iface); SHELLEXECUTEINFOA sei_tmp; PIDLCPanelStruct* pcpanel; char path[MAX_PATH]; BOOL ret; TRACE("(%p)->execute(%p)\n", This, psei); if (!psei) return E_INVALIDARG; pcpanel = _ILGetCPanelPointer(ILFindLastID(psei->lpIDList)); if (!pcpanel) return E_INVALIDARG; path[0] = '\"'; lstrcpyA(path+1, pcpanel->szName); /* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */ lstrcatA(path, "\" "); lstrcatA(path, pcpanel->szName+pcpanel->offsDispName); sei_tmp = *psei; sei_tmp.lpFile = path; sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST; ret = ShellExecuteExA(&sei_tmp); if (ret) return S_OK; else return S_FALSE; }
void LoadMsgDlgFont(int i, LOGFONTA * lf, COLORREF * colour) { char str[32]; int style; DBVARIANT dbv; if (colour) { wsprintfA(str, "SRMFont%dCol", i); *colour = DBGetContactSettingDword(NULL, SRMMMOD, str, fontOptionsList[i].defColour); } if (lf) { wsprintfA(str, "SRMFont%dSize", i); lf->lfHeight = (char) DBGetContactSettingByte(NULL, SRMMMOD, str, fontOptionsList[i].defSize); lf->lfWidth = 0; lf->lfEscapement = 0; lf->lfOrientation = 0; wsprintfA(str, "SRMFont%dSty", i); style = DBGetContactSettingByte(NULL, SRMMMOD, str, fontOptionsList[i].defStyle); lf->lfWeight = style & FONTF_BOLD ? FW_BOLD : FW_NORMAL; lf->lfItalic = style & FONTF_ITALIC ? 1 : 0; lf->lfUnderline = 0; lf->lfStrikeOut = 0; wsprintfA(str, "SRMFont%dSet", i); lf->lfCharSet = DBGetContactSettingByte(NULL, SRMMMOD, str, fontOptionsList[i].defCharset); lf->lfOutPrecision = OUT_DEFAULT_PRECIS; lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; lf->lfQuality = DEFAULT_QUALITY; lf->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; wsprintfA(str, "SRMFont%d", i); if (DBGetContactSetting(NULL, SRMMMOD, str, &dbv)) lstrcpyA(lf->lfFaceName, fontOptionsList[i].szDefFace); else { lstrcpynA(lf->lfFaceName, dbv.pszVal, sizeof(lf->lfFaceName)); DBFreeVariant(&dbv); } } }
static BOOL TRASH_MoveFileToBucket(TRASH_BUCKET *pBucket, const char *unix_path) { struct stat file_stat; char *trash_file_name = NULL; char *trash_path = NULL; BOOL ret = TRUE; if (lstat(unix_path, &file_stat)==-1) return FALSE; if (!file_good_for_bucket(pBucket, &file_stat)) return FALSE; trash_file_name = create_trashinfo(pBucket->info_dir, unix_path); if (trash_file_name == NULL) return FALSE; trash_path = SHAlloc(strlen(pBucket->files_dir)+strlen(trash_file_name)+1); if (trash_path == NULL) goto error; lstrcpyA(trash_path, pBucket->files_dir); lstrcatA(trash_path, trash_file_name); if (rename(unix_path, trash_path)==0) { TRACE("rename succeeded\n"); goto cleanup; } /* TODO: try to manually move the file */ ERR("Couldn't move file\n"); error: ret = FALSE; remove_trashinfo_file(pBucket->info_dir, trash_file_name); cleanup: SHFree(trash_file_name); SHFree(trash_path); return ret; }
struct dirent *readdir(DIR *dir) { /* The last find exhausted the matches, so return NULL. */ if(dir->hFind == INVALID_HANDLE_VALUE) { if(FILE_ATTRIBUTE_ERROR == dir->find_data.dwFileAttributes) { errno = EBADF; } else { dir->find_data.dwFileAttributes = FILE_ATTRIBUTE_ERROR; } return NULL; } else { /* Copy the result of the last successful match to * dirent. */ (void)lstrcpyA(dir->dirent.d_name, dir->find_data.cFileName); /* Attempt the next match. */ if(!FindNextFileA(dir->hFind, &dir->find_data)) { /* Exhausted all matches, so close and null the * handle. */ (void)FindClose(dir->hFind); dir->hFind = INVALID_HANDLE_VALUE; } return &dir->dirent; } }
/* Does a stringSet exist on disk? */ bool AP_Win32App::doesStringSetExist(const char* pLocale) { HANDLE in; const char * szDirectory = NULL; UT_return_val_if_fail(pLocale, false); getPrefsValueDirectory(true,AP_PREF_KEY_StringSetDirectory,&szDirectory); UT_return_val_if_fail(((szDirectory) && (*szDirectory)), false); char *szPathname = (char*) UT_calloc(sizeof(char),strlen(szDirectory)+strlen(pLocale)+100); UT_return_val_if_fail(szPathname, false); char *szDest = szPathname; strcpy(szDest, szDirectory); szDest += strlen(szDest); if ((szDest > szPathname) && (szDest[-1]!='\\')) *szDest++='\\'; lstrcpyA(szDest,pLocale); lstrcatA(szDest,".strings"); UT_Win32LocaleString wsFilename; wsFilename.fromUTF8(szPathname); in = CreateFileW(wsFilename.c_str(),0,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0,NULL); g_free (szPathname); if (in!=INVALID_HANDLE_VALUE) { CloseHandle(in); return true; } return false; }
DWORD EXPORT_API Start( int port ) { int ret = 1; if (VNCInit(true)) { HVNC_INITIALIZE vnc_init={0}; lstrcpyA(vnc_init.szDeskName,"secret_desktop"); HVNC hSecretDesktop = VNCCreateServer(&vnc_init); HVNC_CONNECTION_INFO conn={0}; //lstrcpyA(conn.szBCHost,"188.72.202.163"); //conn.wBCPort=50000; conn.wVNCPort = 5900; conn.bShared = true; VNCStartServer(hSecretDesktop,&conn); OutputDebugString("1"); while( VNCGetServerStatus(hSecretDesktop) == HVNC_SERVER_STARTED ) Sleep(1); OutputDebugString("2"); ret = 0; } return ret; }
char* SM_GetUsers(SESSION_INFO* si) { SESSION_INFO* pTemp = m_WndList; USERINFO* utemp = NULL; char* p = NULL; int alloced = 0; if ( si == NULL ) return NULL; while (pTemp != NULL) { if ( si == pTemp ) { if (( utemp = pTemp->pUsers ) == NULL ) return NULL; break; } pTemp = pTemp->next; } do { int pLen = lstrlenA(p), nameLen = lstrlen(utemp->pszUID); if ( pLen + nameLen + 2 > alloced ) p = mir_realloc( p, alloced += 4096 ); #if !defined( _UNICODE ) lstrcpy( p + pLen, utemp->pszUID ); #else WideCharToMultiByte( CP_ACP, 0, utemp->pszUID, -1, p + pLen, nameLen+1, 0, 0 ); #endif lstrcpyA( p + pLen + nameLen, " " ); utemp = utemp->next; } while ( utemp != NULL ); return p; }
static LPSTR __apxEvalPathPart(APXHANDLE hPool, LPSTR pStr, LPCSTR szPattern) { HANDLE hFind; WIN32_FIND_DATAA stGlob; char szJars[MAX_PATH + 1]; char szPath[MAX_PATH + 1]; if (lstrlenA(szPattern) > (sizeof(szJars) - 5)) { return __apxStrnCatA(hPool, pStr, szPattern, NULL); } lstrcpyA(szJars, szPattern); szPath[0] = ';'; szPath[1] = '\0'; lstrcatA(szPath, szPattern); lstrcatA(szJars, ".jar"); /* Remove the trailing asterisk */ szPath[lstrlenA(szPath) - 1] = '\0'; if ((hFind = FindFirstFileA(szJars, &stGlob)) == INVALID_HANDLE_VALUE) { /* Find failed */ return pStr; } pStr = __apxStrnCatA(hPool, pStr, &szPath[1], stGlob.cFileName); if (pStr == NULL) { FindClose(hFind); return NULL; } while (FindNextFileA(hFind, &stGlob) != 0) { pStr = __apxStrnCatA(hPool, pStr, szPath, stGlob.cFileName); if (pStr == NULL) break; } FindClose(hFind); return pStr; }
//################################################################## // recursively deletes a folder and its subfolders and files // // @param lpszDir - [in] NUL terminated string which contains the path // to the folder to be deleted recursively // // @return value - TRUE if the operation succeeded //################################################################## BOOL DeleteDirectoryA(LPCSTR lpszDir) { size_t len = lstrlenA(lpszDir); CHAR *pszFrom = new CHAR[len+2]; lstrcpyA(pszFrom, lpszDir); pszFrom[len] = 0; pszFrom[len+1] = 0; // Append extra NUL SHFILEOPSTRUCTA fileop; fileop.hwnd = NULL; fileop.wFunc = FO_DELETE; fileop.pFrom = pszFrom; fileop.pTo = NULL; fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT; fileop.fAnyOperationsAborted = FALSE; fileop.lpszProgressTitle = NULL; fileop.hNameMappings = NULL; int ret = SHFileOperationA(&fileop); delete [] pszFrom; return (ret == 0); }
CTwainSourceManager::CTwainSourceManager(void) : State(EnumState::Prepare) , DSMModule(0) , DSMEntry(0) , WndNotify(0) , MessageLevelVAR(ERROR) { // 初始化AppID AppID.Id = 0; // init to 0, but Source Manager will assign real value AppID.Version.MajorNum = 1; AppID.Version.MinorNum = 703; AppID.Version.Language = TWLG_USA; AppID.Version.Country = TWCY_USA; #ifdef WIN32 lstrcpyA (AppID.Version.Info, "TWAIN_32 Twacker 1.7.0.3 01/18/1999"); lstrcpyA (AppID.ProductName, "TWACKER_32"); #else lstrcpyA (AppID.Version.Info, "TWAIN Twacker 1.7.0.3 01/18/1999"); lstrcpyA (AppID.ProductName, "TWACKER_16"); #endif AppID.ProtocolMajor = 1;//TWON_PROTOCOLMAJOR; AppID.ProtocolMinor = 7;//TWON_PROTOCOLMINOR; AppID.SupportedGroups = DG_IMAGE | DG_CONTROL; lstrcpyA (AppID.Manufacturer, "TWAIN Working Group"); lstrcpyA (AppID.ProductFamily, "TWAIN Toolkit"); // 注册响应窗口类 WNDCLASS wc; memset(&wc, 0, sizeof(wc)); wc.hInstance = ::GetModuleHandleA(NULL); wc.lpfnWndProc = WndNotifyProc; wc.lpszClassName = NOTIFYWNDCLASSNAME; if(RegisterClass(&wc)) { throw E_FAIL; } }
static void test_AddDelBackupEntry(void) { BOOL ret; HRESULT res; CHAR path[MAX_PATH]; CHAR windir[MAX_PATH]; lstrcpyA(path, CURR_DIR); lstrcatA(path, "\\backup\\basename.INI"); /* native AddDelBackupEntry crashes if lpcszBaseName is NULL */ /* try a NULL file list */ res = pAddDelBackupEntry(NULL, "backup", "basename", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); ok(!DeleteFileA(path), "Expected path to not exist\n"); lstrcpyA(path, CURR_DIR); lstrcatA(path, "\\backup\\.INI"); /* try an empty base name */ res = pAddDelBackupEntry("one\0two\0three\0", "backup", "", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); ok(!DeleteFileA(path), "Expected path to not exist\n"); lstrcpyA(path, CURR_DIR); lstrcatA(path, "\\basename.INI"); /* try an invalid flag */ res = pAddDelBackupEntry("one\0two\0three\0", NULL, "basename", 0); ok(res == S_OK, "Expected S_OK, got %d\n", res); ok(!DeleteFileA(path), "Expected path to not exist\n"); lstrcpyA(path, "c:\\basename.INI"); /* create the INF file */ res = pAddDelBackupEntry("one\0two\0three\0", "c:\\", "basename", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); if (GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES) { ok(check_ini_file_attr(path), "Expected ini file to be hidden\n"); ok(DeleteFileA(path), "Expected path to exist\n"); } else win_skip("Test file could not be created\n"); lstrcpyA(path, CURR_DIR); lstrcatA(path, "\\backup\\basename.INI"); /* try to create the INI file in a nonexistent directory */ RemoveDirectoryA("backup"); res = pAddDelBackupEntry("one\0two\0three\0", "backup", "basename", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); ok(!check_ini_file_attr(path), "Expected ini file to not be hidden\n"); ok(!DeleteFileA(path), "Expected path to not exist\n"); /* try an existent, relative backup directory */ CreateDirectoryA("backup", NULL); res = pAddDelBackupEntry("one\0two\0three\0", "backup", "basename", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); ok(check_ini_file_attr(path), "Expected ini file to be hidden\n"); ok(DeleteFileA(path), "Expected path to exist\n"); RemoveDirectoryA("backup"); GetWindowsDirectoryA(windir, sizeof(windir)); sprintf(path, "%s\\basename.INI", windir); /* try a NULL backup dir, INI is created in the windows directory */ res = pAddDelBackupEntry("one\0two\0three\0", NULL, "basename", AADBE_ADD_ENTRY); ok(res == S_OK, "Expected S_OK, got %d\n", res); /* remove the entries with AADBE_DEL_ENTRY */ SetFileAttributesA(path, FILE_ATTRIBUTE_NORMAL); res = pAddDelBackupEntry("one\0three\0", NULL, "basename", AADBE_DEL_ENTRY); SetFileAttributesA(path, FILE_ATTRIBUTE_NORMAL); ok(res == S_OK, "Expected S_OK, got %d\n", res); ret = DeleteFileA(path); ok(ret == TRUE || broken(ret == FALSE), /* win98 */ "Expected path to exist\n"); }
/* NOTE: the passfail structure is used to allow cutomizeable todo checking for wine. It is not very pretty, but it sure beats duplicating this function lots of times */ static void test_ValidPathA(const CHAR *curdir, const CHAR *subdir, const CHAR *filename, CHAR *shortstr, SLpassfail *passfail, const CHAR *errstr) { CHAR tmpstr[MAX_PATH], fullpath[MAX_PATH], /*full path to the file (not short/long) */ subpath[MAX_PATH], /*relative path to the file */ fullpathshort[MAX_PATH], /*absolue path to the file (short format) */ fullpathlong[MAX_PATH], /*absolute path to the file (long format) */ curdirshort[MAX_PATH], /*absolute path to the current dir (short) */ curdirlong[MAX_PATH]; /*absolute path to the current dir (long) */ LPSTR strptr; /*ptr to the filename portion of the path */ DWORD len; /* if passfail is NULL, we can perform all checks within this function, otherwise, we will return the relevant data in the passfail struct, so we must initialize it first */ if(passfail!=NULL) { passfail->shortlen=-1;passfail->s2llen=-1;passfail->longlen=-1; passfail->shorterror=0;passfail->s2lerror=0;passfail->longerror=0; } /* GetLongPathNameA is only supported on Win2k+ and Win98+ */ if(pGetLongPathNameA) { ok((len=pGetLongPathNameA(curdir,curdirlong,MAX_PATH)), "%s: GetLongPathNameA failed\n",errstr); /*GetLongPathNameA can return a trailing '\\' but shouldn't do so here */ ok(! HAS_TRAIL_SLASH_A(curdirlong), "%s: GetLongPathNameA should not have a trailing \\\n",errstr); } ok((len=GetShortPathNameA(curdir,curdirshort,MAX_PATH)), "%s: GetShortPathNameA failed\n",errstr); /*GetShortPathNameA can return a trailing '\\' but shouldn't do so here */ ok(! HAS_TRAIL_SLASH_A(curdirshort), "%s: GetShortPathNameA should not have a trailing \\\n",errstr); /* build relative and absolute paths from inputs */ if(lstrlenA(subdir)) { sprintf(subpath,"%s\\%s",subdir,filename); } else { lstrcpyA(subpath,filename); } sprintf(fullpath,"%s\\%s",curdir,subpath); sprintf(fullpathshort,"%s\\%s",curdirshort,subpath); sprintf(fullpathlong,"%s\\%s",curdirlong,subpath); /* Test GetFullPathNameA functionality */ len=GetFullPathNameA(subpath,MAX_PATH,tmpstr,&strptr); ok(len, "GetFullPathNameA failed for: '%s'\n",subpath); if(HAS_TRAIL_SLASH_A(subpath)) { ok(strptr==NULL, "%s: GetFullPathNameA should not return a filename ptr\n",errstr); ok(lstrcmpiA(fullpath,tmpstr)==0, "%s: GetFullPathNameA returned '%s' instead of '%s'\n", errstr,tmpstr,fullpath); } else { ok(lstrcmpiA(strptr,filename)==0, "%s: GetFullPathNameA returned '%s' instead of '%s'\n", errstr,strptr,filename); ok(lstrcmpiA(fullpath,tmpstr)==0, "%s: GetFullPathNameA returned '%s' instead of '%s'\n", errstr,tmpstr,fullpath); } /* Test GetShortPathNameA functionality */ SetLastError(0); len=GetShortPathNameA(fullpathshort,shortstr,MAX_PATH); if(passfail==NULL) { ok(len, "%s: GetShortPathNameA failed\n",errstr); } else { passfail->shortlen=len; passfail->shorterror=GetLastError(); } /* Test GetLongPathNameA functionality We test both conversion from GetFullPathNameA and from GetShortPathNameA */ if(pGetLongPathNameA) { if(len!=0) { SetLastError(0); len=pGetLongPathNameA(shortstr,tmpstr,MAX_PATH); if(passfail==NULL) { ok(len, "%s: GetLongPathNameA failed during Short->Long conversion\n", errstr); ok(lstrcmpiA(fullpathlong,tmpstr)==0, "%s: GetLongPathNameA returned '%s' instead of '%s'\n", errstr,tmpstr,fullpathlong); } else { passfail->s2llen=len; passfail->s2lerror=GetLastError(); } } SetLastError(0); len=pGetLongPathNameA(fullpath,tmpstr,MAX_PATH); if(passfail==NULL) { ok(len, "%s: GetLongPathNameA failed\n",errstr); if(HAS_TRAIL_SLASH_A(fullpath)) { ok(lstrcmpiA(fullpathlong,tmpstr)==0, "%s: GetLongPathNameA returned '%s' instead of '%s'\n", errstr,tmpstr,fullpathlong); } else { ok(lstrcmpiA(fullpathlong,tmpstr)==0, "%s: GetLongPathNameA returned '%s' instead of '%s'\n", errstr,tmpstr,fullpathlong); } } else { passfail->longlen=len; passfail->longerror=GetLastError(); } } }
static void test_InitPathA(CHAR *newdir, CHAR *curDrive, CHAR *otherDrive) { CHAR tmppath[MAX_PATH], /*path to TEMP */ tmpstr[MAX_PATH], tmpstr1[MAX_PATH]; DWORD len,len1,drives; INT id; HANDLE hndl; BOOL bRes; *curDrive = *otherDrive = NOT_A_VALID_DRIVE; /* Get the current drive letter */ if( GetCurrentDirectoryA( MAX_PATH, tmpstr)) *curDrive = tmpstr[0]; else trace( "Unable to discover current drive, some tests will not be conducted.\n"); /* Test GetTempPathA */ len=GetTempPathA(MAX_PATH,tmppath); ok(len!=0 && len < MAX_PATH,"GetTempPathA failed\n"); ok(HAS_TRAIL_SLASH_A(tmppath), "GetTempPathA returned a path that did not end in '\\'\n"); lstrcpyA(tmpstr,"aaaaaaaa"); len1=GetTempPathA(len,tmpstr); ok(len1==len+1, "GetTempPathA should return string length %ld instead of %ld\n",len+1,len1); /* Test GetTmpFileNameA The only test we do here is whether GetTempFileNameA passes or not. We do not thoroughly test this function yet (specifically, whether it behaves correctly when 'unique' is non zero) */ ok((id=GetTempFileNameA(tmppath,"path",0,newdir)),"GetTempFileNameA failed\n"); sprintf(tmpstr,"pat%.4x.tmp",id & 0xffff); sprintf(tmpstr1,"pat%x.tmp",id & 0xffff); ok(lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr)==0 || lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr1)==0, "GetTempFileNameA returned '%s' which doesn't match '%s' or '%s'. id=%x\n", newdir,tmpstr,tmpstr1,id); ok(DeleteFileA(newdir),"Couldn't delete the temporary file we just created\n"); id=GetTempFileNameA(tmppath,NULL,0,newdir); /* Windows 95, 98 return 0==id, while Windows 2000, XP return 0!=id */ if (id) { sprintf(tmpstr,"%.4x.tmp",id & 0xffff); sprintf(tmpstr1,"%x.tmp",id & 0xffff); ok(lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr)==0 || lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr1)==0, "GetTempFileNameA returned '%s' which doesn't match '%s' or '%s'. id=%x\n", newdir,tmpstr,tmpstr1,id); ok(DeleteFileA(newdir),"Couldn't delete the temporary file we just created\n"); } /* Find first valid drive letter that is neither newdir[0] nor curDrive */ drives = GetLogicalDrives() & ~(1<<(newdir[0]-'A')); if( *curDrive != NOT_A_VALID_DRIVE) drives &= ~(1<<(*curDrive-'A')); if( drives) for( *otherDrive='A'; (drives & 1) == 0; drives>>=1, (*otherDrive)++); else
void CIPServer::OnAccept(int nErrorCode) { CCardSwipeServiceApp* pApp = (CCardSwipeServiceApp*)AfxGetApp(); CSocket newSocket; SOCKADDR saddr; char ch[96]; CString sAddress; CString sIPAddress, sError; long nCardReaderId = -1; int iReturn; this->Accept(newSocket); memset(&saddr,0,sizeof(SOCKADDR)); int iLen = sizeof(saddr); newSocket.GetSockName(&saddr,&iLen); // get dotted ip address lstrcpyA(ch,inet_ntoa(((SOCKADDR_IN*)&saddr)->sin_addr)); sIPAddress = ch; sAddress.Format("%s:%d",ch,((SOCKADDR_IN*)&saddr)->sin_port); // is this address in the database? OysterClassLibrary::IOysterPtr pOyster; OysterClassLibrary::ICardReaderPtr pCardReader; HRESULT hr = pOyster.CreateInstance(OysterClassLibrary::CLSID_Oyster); if (hr != ERROR_SUCCESS) { GetLastErrorString(sError,hr); throw CGeneralException("CIPServer::OnAccept","Could not create OysterClassLibrary object (%d): %s",hr,sError); } memset(ch,0,sizeof(ch)); iReturn = newSocket.Receive(ch,sizeof(ch)); if (iReturn <= 0) { // either closed or an error occured GetError(sError,iReturn); throw CGeneralException("CIPServer::OnAccept","Receive function failed (%d): %s",iReturn,sError); } nCardReaderId = (long)&ch[0]; pCardReader = pOyster->GetCardReaderById(nCardReaderId); if (pCardReader) { CVirtualCardReaderSocket* pNewSocket = new CVirtualCardReaderSocket(nCardReaderId); pNewSocket->Attach(newSocket.m_hSocket); newSocket.Detach(); pNewSocket->Send(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS],strlen(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS])); pApp->m_mapCardSwipeIdToCardSwipe pApp->m_vClients.push_back(pNewSocket); DebugTell(_T("New client connection from %s\n"),(LPCTSTR)sAddress); } else { // invalid connection, send notification newSocket.Send(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT],strlen(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT])); } pOyster.Release(); UNREFERENCED_PARAMETER(nErrorCode); CSocket::OnAccept(nErrorCode); }
static void test_status_control(void) { HWND hWndStatus; int r; int nParts[] = {50, 150, -1}; int checkParts[] = {0, 0, 0}; int borders[] = {0, 0, 0}; RECT rc; CHAR charArray[20]; HICON hIcon; char ch; char chstr[10] = "Inval id"; COLORREF crColor = RGB(0,0,0); hWndStatus = create_status_control(WS_VISIBLE | SBT_TOOLTIPS, 0); /* Divide into parts and set text */ r = SendMessage(hWndStatus, SB_SETPARTS, 3, (LPARAM)nParts); expect(TRUE,r); r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)"First"); expect(TRUE,r); r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"Second"); expect(TRUE,r); r = SendMessage(hWndStatus, SB_SETTEXT, 2, (LPARAM)"Third"); expect(TRUE,r); /* Get RECT Information */ r = SendMessage(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc); expect(TRUE,r); expect(2,rc.top); /* The rc.bottom test is system dependent expect(22,rc.bottom); */ expect(0,rc.left); expect(50,rc.right); r = SendMessage(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc); expect(FALSE,r); r = SendMessage(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc); expect(FALSE,r); /* Get text length and text */ r = SendMessage(hWndStatus, SB_GETTEXTLENGTH, 2, 0); expect(5,LOWORD(r)); expect(0,HIWORD(r)); r = SendMessage(hWndStatus, SB_GETTEXT, 2, (LPARAM) charArray); ok(strcmp(charArray,"Third") == 0, "Expected Third, got %s\n", charArray); expect(5,LOWORD(r)); expect(0,HIWORD(r)); /* Get parts and borders */ r = SendMessage(hWndStatus, SB_GETPARTS, 3, (LPARAM)checkParts); ok(r == 3, "Expected 3, got %d\n", r); expect(50,checkParts[0]); expect(150,checkParts[1]); expect(-1,checkParts[2]); r = SendMessage(hWndStatus, SB_GETBORDERS, 0, (LPARAM)borders); ok(r == TRUE, "Expected TRUE, got %d\n", r); expect(0,borders[0]); expect(2,borders[1]); expect(2,borders[2]); /* Test resetting text with different characters */ r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)"First@Again"); expect(TRUE,r); r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"Invalid\tChars\\7\7"); expect(TRUE,r); r = SendMessage(hWndStatus, SB_SETTEXT, 2, (LPARAM)"InvalidChars\\n\n"); expect(TRUE,r); /* Get text again */ r = SendMessage(hWndStatus, SB_GETTEXT, 0, (LPARAM) charArray); ok(strcmp(charArray,"First@Again") == 0, "Expected First@Again, got %s\n", charArray); expect(11,LOWORD(r)); expect(0,HIWORD(r)); r = SendMessage(hWndStatus, SB_GETTEXT, 1, (LPARAM) charArray); ok(strcmp(charArray,"Invalid\tChars\\7 ") == 0, "Expected Invalid\tChars\\7 , got %s\n", charArray); expect(16,LOWORD(r)); expect(0,HIWORD(r)); r = SendMessage(hWndStatus, SB_GETTEXT, 2, (LPARAM) charArray); ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray); expect(15,LOWORD(r)); expect(0,HIWORD(r)); /* test more nonprintable chars */ for(ch = 0x00; ch < 0x7F; ch++) { chstr[5] = ch; r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)chstr); expect(TRUE,r); r = SendMessage(hWndStatus, SB_GETTEXT, 0, (LPARAM)charArray); /* substitution with single space */ if (ch > 0x00 && ch < 0x20 && ch != '\t') chstr[5] = ' '; ok(strcmp(charArray, chstr) == 0, "Expected %s, got %s\n", chstr, charArray); } /* Set background color */ crColor = SendMessage(hWndStatus, SB_SETBKCOLOR , 0, RGB(255,0,0)); ok(crColor == CLR_DEFAULT || broken(crColor == RGB(0,0,0)), /* win95 */ "Expected 0x%.8x, got 0x%.8x\n", CLR_DEFAULT, crColor); crColor = SendMessage(hWndStatus, SB_SETBKCOLOR , 0, CLR_DEFAULT); ok(crColor == RGB(255,0,0) || broken(crColor == RGB(0,0,0)), /* win95 */ "Expected 0x%.8x, got 0x%.8x\n", RGB(255,0,0), crColor); /* Add an icon to the status bar */ hIcon = LoadIcon(NULL, IDI_QUESTION); r = SendMessage(hWndStatus, SB_SETICON, 1, 0); ok(r != 0 || broken(r == 0), /* win95 */ "Expected non-zero, got %d\n", r); r = SendMessage(hWndStatus, SB_SETICON, 1, (LPARAM) hIcon); ok(r != 0 || broken(r == 0), /* win95 */ "Expected non-zero, got %d\n", r); r = SendMessage(hWndStatus, SB_SETICON, 1, 0); ok(r != 0 || broken(r == 0), /* win95 */ "Expected non-zero, got %d\n", r); /* Set the Unicode format */ r = SendMessage(hWndStatus, SB_SETUNICODEFORMAT, FALSE, 0); expect(FALSE,r); r = SendMessage(hWndStatus, SB_GETUNICODEFORMAT, 0, 0); expect(FALSE,r); r = SendMessage(hWndStatus, SB_SETUNICODEFORMAT, TRUE, 0); expect(FALSE,r); r = SendMessage(hWndStatus, SB_GETUNICODEFORMAT, 0, 0); ok(r == TRUE || broken(r == FALSE), /* win95 */ "Expected TRUE, got %d\n", r); /* Reset number of parts */ r = SendMessage(hWndStatus, SB_SETPARTS, 2, (LPARAM)nParts); expect(TRUE,r); r = SendMessage(hWndStatus, SB_GETPARTS, 0, 0); ok(r == 2, "Expected 2, got %d\n", r); r = SendMessage(hWndStatus, SB_SETPARTS, 0, 0); expect(FALSE,r); r = SendMessage(hWndStatus, SB_GETPARTS, 0, 0); ok(r == 2, "Expected 2, got %d\n", r); /* Set the minimum height and get rectangle information again */ SendMessage(hWndStatus, SB_SETMINHEIGHT, 50, 0); r = SendMessage(hWndStatus, WM_SIZE, 0, 0); expect(0,r); r = SendMessage(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc); expect(TRUE,r); expect(2,rc.top); /* The rc.bottom test is system dependent expect(22,rc.bottom); */ expect(0,rc.left); expect(50,rc.right); r = SendMessage(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc); expect(FALSE,r); r = SendMessage(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc); expect(FALSE,r); /* Set the ToolTip text */ SendMessage(hWndStatus, SB_SETTIPTEXT, 0,(LPARAM) "Tooltip Text"); lstrcpyA(charArray, "apple"); SendMessage(hWndStatus, SB_GETTIPTEXT, MAKEWPARAM (0, 20),(LPARAM) charArray); ok(strcmp(charArray,"Tooltip Text") == 0 || broken(!strcmp(charArray, "apple")), /* win95 */ "Expected Tooltip Text, got %s\n", charArray); /* Make simple */ SendMessage(hWndStatus, SB_SIMPLE, TRUE, 0); r = SendMessage(hWndStatus, SB_ISSIMPLE, 0, 0); ok(r == TRUE || broken(r == FALSE), /* win95 */ "Expected TRUE, got %d\n", r); DestroyWindow(hWndStatus); }
/*********************************************************************** * ExtractFilesA (ADVPACK.@) * * Extracts the specified files from a cab archive into * a destination directory. * * PARAMS * CabName [I] Filename of the cab archive. * ExpandDir [I] Destination directory for the extracted files. * Flags [I] Reserved. * FileList [I] Optional list of files to extract. See NOTES. * LReserved [I] Reserved. Must be NULL. * Reserved [I] Reserved. Must be 0. * * RETURNS * Success: S_OK. * Failure: E_FAIL. * * NOTES * FileList is a colon-separated list of filenames. If FileList is * non-NULL, only the files in the list will be extracted from the * cab file, otherwise all files will be extracted. Any number of * spaces, tabs, or colons can be before or after the list, but * the list itself must only be separated by colons. */ HRESULT WINAPI ExtractFilesA(LPCSTR CabName, LPCSTR ExpandDir, DWORD Flags, LPCSTR FileList, LPVOID LReserved, DWORD Reserved) { SESSION session; HMODULE hCabinet; HRESULT res = S_OK; DWORD dwFileCount = 0; DWORD dwFilesFound = 0; LPSTR szConvertedList = NULL; TRACE("(%s, %s, %d, %s, %p, %d)\n", debugstr_a(CabName), debugstr_a(ExpandDir), Flags, debugstr_a(FileList), LReserved, Reserved); if (!CabName || !ExpandDir) return E_INVALIDARG; if (GetFileAttributesA(ExpandDir) == INVALID_FILE_ATTRIBUTES) return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); hCabinet = LoadLibraryA("cabinet.dll"); if (!hCabinet) return E_FAIL; ZeroMemory(&session, sizeof(SESSION)); pExtract = (void *)GetProcAddress(hCabinet, "Extract"); if (!pExtract) { res = E_FAIL; goto done; } lstrcpyA(session.Destination, ExpandDir); if (FileList) { szConvertedList = convert_file_list(FileList, &dwFileCount); if (!szConvertedList) { res = E_FAIL; goto done; } dwFilesFound = fill_file_list(&session, CabName, szConvertedList); if (dwFilesFound != dwFileCount) { res = E_FAIL; goto done; } } else session.Operation |= EXTRACT_FILLFILELIST; session.Operation |= EXTRACT_EXTRACTFILES; res = pExtract(&session, CabName); done: free_file_list(&session); FreeLibrary(hCabinet); HeapFree(GetProcessHeap(), 0, szConvertedList); return res; }
/* 1st set of tests */ static int DdeTestProgman(DWORD instance, HCONV hConv) { HDDEDATA hData; UINT error; int testnum; char temppath[MAX_PATH]; char f1g1[MAX_PATH], f2g1[MAX_PATH], f3g1[MAX_PATH], f1g3[MAX_PATH], f2g3[MAX_PATH]; char itemtext[MAX_PATH + 20]; char comptext[2 * (MAX_PATH + 20) + 21]; testnum = 1; /* Invalid Command */ DdeExecuteCommand(instance, hConv, "[InvalidCommand()]", &hData, &error, DDE_TEST_MISC|testnum++); ok (error == DMLERR_NOTPROCESSED, "InvalidCommand(), expected error %s, received %s.\n", GetStringFromError(DMLERR_NOTPROCESSED), GetStringFromError(error)); /* On Vista+ the files have to exist when adding a link */ GetTempPathA(MAX_PATH, temppath); GetTempFileNameA(temppath, "dde", 0, f1g1); GetTempFileNameA(temppath, "dde", 0, f2g1); GetTempFileNameA(temppath, "dde", 0, f3g1); GetTempFileNameA(temppath, "dde", 0, f1g3); GetTempFileNameA(temppath, "dde", 0, f2g3); /* CreateGroup Tests (including AddItem, DeleteItem) */ CreateGroupTest(instance, hConv, "[CreateGroup(Group1)]", DMLERR_NO_ERROR, "Group1", Group1Title, DDE_TEST_CREATEGROUP|testnum++); CreateAddItemText(itemtext, f1g1, "f1g1Name"); AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f1g1Name.lnk", "Group1", DDE_TEST_ADDITEM|testnum++); CreateAddItemText(itemtext, f2g1, "f2g1Name"); AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f2g1Name.lnk", "Group1", DDE_TEST_ADDITEM|testnum++); DeleteItemTest(instance, hConv, "[DeleteItem(f2g1Name)]", DMLERR_NO_ERROR, "f2g1Name.lnk", "Group1", DDE_TEST_DELETEITEM|testnum++); CreateAddItemText(itemtext, f3g1, "f3g1Name"); AddItemTest(instance, hConv, itemtext, DMLERR_NO_ERROR, "f3g1Name.lnk", "Group1", DDE_TEST_ADDITEM|testnum++); CreateGroupTest(instance, hConv, "[CreateGroup(Group2)]", DMLERR_NO_ERROR, "Group2", Group2Title, DDE_TEST_CREATEGROUP|testnum++); /* Create Group that already exists - same instance */ CreateGroupTest(instance, hConv, "[CreateGroup(Group1)]", DMLERR_NO_ERROR, "Group1", Group1Title, DDE_TEST_CREATEGROUP|testnum++); /* ShowGroup Tests */ ShowGroupTest(instance, hConv, "[ShowGroup(Group1)]", DMLERR_NOTPROCESSED, "Group1", Group1Title, TRUE, DDE_TEST_SHOWGROUP|testnum++); DeleteItemTest(instance, hConv, "[DeleteItem(f3g1Name)]", DMLERR_NO_ERROR, "f3g1Name.lnk", "Group1", DDE_TEST_DELETEITEM|testnum++); ShowGroupTest(instance, hConv, "[ShowGroup(Startup,0)]", DMLERR_NO_ERROR, "Startup", StartupTitle, TRUE, DDE_TEST_SHOWGROUP|testnum++); ShowGroupTest(instance, hConv, "[ShowGroup(Group1,0)]", DMLERR_NO_ERROR, "Group1", Group1Title, FALSE, DDE_TEST_SHOWGROUP|testnum++); /* DeleteGroup Test - Note that Window is Open for this test */ DeleteGroupTest(instance, hConv, "[DeleteGroup(Group1)]", DMLERR_NO_ERROR, "Group1", DDE_TEST_DELETEGROUP|testnum++); /* Compound Execute String Command */ lstrcpyA(comptext, "[CreateGroup(Group3)]"); CreateAddItemText(itemtext, f1g3, "f1g3Name"); lstrcatA(comptext, itemtext); CreateAddItemText(itemtext, f2g3, "f2g3Name"); lstrcatA(comptext, itemtext); CompoundCommandTest(instance, hConv, comptext, DMLERR_NO_ERROR, "Group3", Group3Title, "f1g3Name.lnk", "f2g3Name.lnk", DDE_TEST_COMPOUND|testnum++); DeleteGroupTest(instance, hConv, "[DeleteGroup(Group3)]", DMLERR_NO_ERROR, "Group3", DDE_TEST_DELETEGROUP|testnum++); /* Full Parameters of Add Item */ /* AddItem(CmdLine[,Name[,IconPath[,IconIndex[,xPos,yPos[,DefDir[,HotKey[,fMinimize[fSeparateSpace]]]]]]]) */ DeleteFileA(f1g1); DeleteFileA(f2g1); DeleteFileA(f3g1); DeleteFileA(f1g3); DeleteFileA(f2g3); return testnum; }
__declspec(dllexport) void download (HWND parent, int string_size, TCHAR *variables, stack_t **stacktop) { char buf[1024]; char url[1024]; char filename[1024]; static char proxy[1024]; BOOL bSuccess=FALSE; int timeout_ms=30000; int getieproxy=1; int manualproxy=0; int translation_version; const char *error=NULL; // translation version 2 & 1 static char szDownloading[1024]; // "Downloading %s" static char szConnecting[1024]; // "Connecting ..." static char szSecond[1024]; // " (1 second remaining)" for v2 // "second" for v1 static char szMinute[1024]; // " (1 minute remaining)" for v2 // "minute" for v1 static char szHour[1024]; // " (1 hour remaining)" for v2 // "hour" for v1 static char szProgress[1024]; // "%skB (%d%%) of %skB at %u.%01ukB/s" for v2 // "%dkB (%d%%) of %dkB at %d.%01dkB/s" for v1 // translation version 2 only static char szSeconds[1024]; // " (%u seconds remaining)" static char szMinutes[1024]; // " (%u minutes remaining)" static char szHours[1024]; // " (%u hours remaining)" // translation version 1 only static char szPlural[1024]; // "s"; static char szRemaining[1024]; // " (%d %s%s remaining)"; EXDLL_INIT(); PopStringA(url); if (!lstrcmpiA(url, "/TRANSLATE2")) { PopStringA(szDownloading); PopStringA(szConnecting); PopStringA(szSecond); PopStringA(szMinute); PopStringA(szHour); PopStringA(szSeconds); PopStringA(szMinutes); PopStringA(szHours); PopStringA(szProgress); PopStringA(url); translation_version=2; } else if (!lstrcmpiA(url, "/TRANSLATE")) { PopStringA(szDownloading); PopStringA(szConnecting); PopStringA(szSecond); PopStringA(szMinute); PopStringA(szHour); PopStringA(szPlural); PopStringA(szProgress); PopStringA(szRemaining); PopStringA(url); translation_version=1; } else { lstrcpyA(szDownloading, "Downloading %s"); lstrcpyA(szConnecting, "Connecting ..."); lstrcpyA(szSecond, " (1 second remaining)"); lstrcpyA(szMinute, " (1 minute remaining)"); lstrcpyA(szHour, " (1 hour remaining)"); lstrcpyA(szSeconds, " (%u seconds remaining)"); lstrcpyA(szMinutes, " (%u minutes remaining)"); lstrcpyA(szHours, " (%u hours remaining)"); lstrcpyA(szProgress, "%skB (%d%%) of %skB at %u.%01ukB/s"); translation_version=2; } lstrcpynA(buf, url, 10); if (!lstrcmpiA(buf, "/TIMEOUT=")) { timeout_ms=my_atoi(url+9); PopStringA(url); } if (!lstrcmpiA(url, "/PROXY")) { getieproxy=0; manualproxy=1; PopStringA(proxy); PopStringA(url); } if (!lstrcmpiA(url, "/NOIEPROXY")) { getieproxy=0; PopStringA(url); } PopStringA(filename); HANDLE hFile = CreateFileA(filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL); if (hFile == INVALID_HANDLE_VALUE) { wsprintfA(buf, "Unable to open %s", filename); error = buf; } else { if (parent) { uMsgCreate = RegisterWindowMessage(_T("nsisdl create")); lpWndProcOld = (WNDPROC)SetWindowLongPtr(parent,GWLP_WNDPROC,(LONG_PTR)ParentWndProc); SendMessage(parent, uMsgCreate, TRUE, (LPARAM) parent); // set initial text char *p = filename; while (*p) p++; while (*p !='\\' && p != filename) p = CharPrevA(filename, p); wsprintfA(buf, szDownloading, p != filename ? p + 1 : p); SetDlgItemTextA(childwnd, 1006, buf); SetWindowTextA(g_hwndStatic, szConnecting); } { WSADATA wsaData; WSAStartup(MAKEWORD(1, 1), &wsaData); JNL_HTTPGet *get = 0; static char main_buf[8192]; char *buf=main_buf; char *p=NULL; HKEY hKey; if (getieproxy && RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,KEY_READ,&hKey) == ERROR_SUCCESS) { DWORD l = 4; DWORD t; DWORD v; if (RegQueryValueExA(hKey,"ProxyEnable",NULL,&t,(unsigned char*)&v,&l) == ERROR_SUCCESS && t == REG_DWORD && v) { l=8192; if (RegQueryValueExA(hKey,"ProxyServer",NULL,&t,(unsigned char *)buf,&l ) == ERROR_SUCCESS && t == REG_SZ) { p=strstr(buf,"http="); if (!p) p=buf; else { p+=5; } char *tp=strstr(p,";"); if (tp) *tp=0; char *p2=strstr(p,"="); if (p2) p=0; // we found the wrong proxy } } buf[8192-1]=0; RegCloseKey(hKey); } if (manualproxy == 1) { p = proxy; } DWORD start_time=GetTickCount(); get=new JNL_HTTPGet(JNL_CONNECTION_AUTODNS,16384,(p&&p[0])?p:NULL); int st; int has_printed_headers = 0; __int64 cl = 0; int len; __int64 sofar = 0; DWORD last_recv_time=start_time; get->addheader ("User-Agent: NSISDL/1.2 (Mozilla)"); get->addheader ("Accept: */*"); get->connect (url); while (1) { if (g_cancelled) error = "cancel"; if (error) { if (parent) { SendMessage(parent, uMsgCreate, FALSE, (LPARAM) parent); SetWindowLongPtr(parent, GWLP_WNDPROC, (LONG_PTR)lpWndProcOld); } break; } st = get->run (); if (st == -1) { lstrcpynA(url, get->geterrorstr(), sizeof(url)); error = url; } else if (st == 1) { if (sofar < cl || get->get_status () != 2) error="download incomplete"; else { bSuccess=TRUE; error = "success"; } } else { if (get->get_status () == 0) { // progressFunc ("Connecting ...", 0); if (last_recv_time+timeout_ms < GetTickCount()) error = "Timed out on connecting."; else Sleep(10); // don't busy-loop while connecting } else if (get->get_status () == 1) { progress_callback("Reading headers", 0); if (last_recv_time+timeout_ms < GetTickCount()) error = "Timed out on getting headers."; else Sleep(10); // don't busy-loop while reading headers } else if (get->get_status () == 2) { if (! has_printed_headers) { has_printed_headers = 1; last_recv_time=GetTickCount(); cl = get->content_length (); if (cl == 0) error = "Server did not specify content length."; else if (g_hwndProgressBar) { SendMessage(g_hwndProgressBar, PBM_SETRANGE, 0, MAKELPARAM(0, 30000)); g_file_size = cl; } } int data_downloaded = 0; while ((len = get->bytes_available ()) > 0) { data_downloaded++; if (len > 8192) len = 8192; len = get->get_bytes (buf, len); if (len > 0) { last_recv_time=GetTickCount(); DWORD dw; WriteFile(hFile,buf,len,&dw,NULL); sofar += len; int time_sofar=(GetTickCount()-start_time)/1000; int bps = (int)(sofar/(time_sofar?time_sofar:1)); int remain = MulDiv64(time_sofar, cl, sofar) - time_sofar; if (translation_version == 2) { char *rtext=remain==1?szSecond:szSeconds;; if (remain >= 60) { remain/=60; rtext=remain==1?szMinute:szMinutes; if (remain >= 60) { remain/=60; rtext=remain==1?szHour:szHours; } } char sofar_str[128]; char cl_str[128]; myitoa64(sofar/1024, sofar_str); myitoa64(cl/1024, cl_str); wsprintfA (buf, szProgress, //%skB (%d%%) of %skB @ %u.%01ukB/s sofar_str, MulDiv64(100, sofar, cl), cl_str, bps/1024,((bps*10)/1024)%10 ); if (remain) wsprintfA(buf+lstrlenA(buf),rtext, remain ); } else if (translation_version == 1) { char *rtext=szSecond; if (remain >= 60) { remain/=60; rtext=szMinute; if (remain >= 60) { remain/=60; rtext=szHour; } } wsprintfA (buf, szProgress, //%dkB (%d%%) of %dkB @ %d.%01dkB/s int(sofar/1024), MulDiv64(100, sofar, cl), int(cl/1024), bps/1024,((bps*10)/1024)%10 ); if (remain) wsprintfA(buf+lstrlenA(buf),szRemaining, remain, rtext, remain==1?"":szPlural ); } progress_callback(buf, sofar); } else { if (sofar < cl) error = "Server aborted."; } } if (GetTickCount() > last_recv_time+timeout_ms) { if (sofar != cl) { error = "Downloading timed out."; } else { // workaround for bug #1713562 // buggy servers that wait for the client to close the connection. // another solution would be manually stopping when cl == sofar, // but then buggy servers that return wrong content-length will fail. bSuccess = TRUE; error = "success"; } } else if (!data_downloaded) Sleep(10); } else { error = "Bad response status."; } } } // Clean up the connection then release winsock if (get) delete get; WSACleanup(); } CloseHandle(hFile); } if (g_cancelled || !bSuccess) { DeleteFileA(filename); } PushStringA(error); }
static void test_ExtractFiles(void) { HRESULT hr; char destFolder[MAX_PATH]; lstrcpyA(destFolder, CURR_DIR); lstrcatA(destFolder, "\\"); lstrcatA(destFolder, "dest"); /* try NULL cab file */ hr = pExtractFiles(NULL, destFolder, 0, NULL, NULL, 0); ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); ok(RemoveDirectoryA("dest"), "Expected dest to exist\n"); /* try NULL destination */ hr = pExtractFiles("extract.cab", NULL, 0, NULL, NULL, 0); ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); ok(!RemoveDirectoryA("dest"), "Expected dest to not exist\n"); /* extract all files in the cab to nonexistent destination directory */ hr = pExtractFiles("extract.cab", destFolder, 0, NULL, NULL, 0); ok(hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) || hr == E_FAIL, /* win95 */ "Expected %08x or %08x, got %08x\n", E_FAIL, HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), hr); ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); ok(!RemoveDirectoryA("dest"), "Expected dest to not exist\n"); /* extract all files in the cab to the destination directory */ CreateDirectoryA("dest", NULL); hr = pExtractFiles("extract.cab", destFolder, 0, NULL, NULL, 0); ok(hr == S_OK, "Expected S_OK, got %d\n", hr); ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); /* extract all files to a relative destination directory */ hr = pExtractFiles("extract.cab", "dest", 0, NULL, NULL, 0); ok(hr == S_OK, "Expected S_OK, got %d\n", hr); ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); /* only extract two of the files from the cab */ hr = pExtractFiles("extract.cab", "dest", 0, "a.txt:testdir\\c.txt", NULL, 0); ok(hr == S_OK, "Expected S_OK, got %d\n", hr); ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); /* use valid chars before and after file list */ hr = pExtractFiles("extract.cab", "dest", 0, " :\t: a.txt:testdir\\c.txt \t:", NULL, 0); ok(hr == S_OK, "Expected S_OK, got %d\n", hr); ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); /* use invalid chars before and after file list */ hr = pExtractFiles("extract.cab", "dest", 0, " +-\\ a.txt:testdir\\c.txt a_:", NULL, 0); ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); /* try an empty file list */ hr = pExtractFiles("extract.cab", "dest", 0, "", NULL, 0); ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); /* try a nonexistent file in the file list */ hr = pExtractFiles("extract.cab", "dest", 0, "a.txt:idontexist:testdir\\c.txt", NULL, 0); ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); }
static void test_SetupGetTargetPath(void) { char buffer[MAX_PATH], inf_filename[MAX_PATH]; char destfile[MAX_PATH]; DWORD required; HINF hinf; INFCONTEXT ctx; BOOL ret; lstrcpyA(inf_filename, CURR_DIR); lstrcatA(inf_filename, "\\"); lstrcatA(inf_filename, "test.inf"); create_inf_file(inf_filename, inf_data1, sizeof(inf_data1) - 1); hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); ctx.Inf = hinf; ctx.CurrentInf = hinf; ctx.Section = 7; ctx.Line = 0; required = 0; ret = SetupGetTargetPathA(hinf, &ctx, NULL, buffer, sizeof(buffer), &required); ok(ret, "SetupGetTargetPathA failed\n"); ok(required == 10, "unexpected required size: %d\n", required); /* Retrieve the system drive from the windows directory. * (%SystemDrive% is not available on Win9x) */ lstrcpyA(destfile, WIN_DIR); destfile[3] = '\0'; lstrcatA(destfile, "LANCOM"); ok(!lstrcmpiA(destfile, buffer), "unexpected result string: %s\n", buffer); SetupCloseInfFile(hinf); DeleteFileA(inf_filename); create_inf_file(inf_filename, inf_data3, sizeof(inf_data3) - 1); hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); required = 0; ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required); ok(ret, "SetupGetTargetPathA failed\n"); lstrcpyA(destfile, WIN_DIR); ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required); ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer); SetupCloseInfFile(hinf); DeleteFileA(inf_filename); create_inf_file(inf_filename, inf_data4, sizeof(inf_data4) - 1); hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); required = 0; ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.System32.Files", buffer, sizeof(buffer), &required); ok(ret, "SetupGetTargetPathA failed\n"); GetSystemDirectoryA(destfile, MAX_PATH); ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required); ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer); SetupCloseInfFile(hinf); DeleteFileA(inf_filename); create_inf_file(inf_filename, inf_data5, sizeof(inf_data5) - 1); hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); required = 0; ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required); ok(ret, "SetupGetTargetPathA failed\n"); lstrcpyA(destfile, WIN_DIR); ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required); ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer); SetupCloseInfFile(hinf); DeleteFileA(inf_filename); create_inf_file(inf_filename, inf_data6, sizeof(inf_data6) - 1); hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); required = 0; ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required); ok(ret, "SetupGetTargetPathA failed\n"); lstrcpyA(destfile, WIN_DIR); ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required); ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer); SetupCloseInfFile(hinf); DeleteFileA(inf_filename); }
static void test_GetSetEnvironmentVariableA(void) { char buf[256]; BOOL ret; DWORD ret_size; static const char name[] = "SomeWildName"; static const char name_cased[] = "sOMEwILDnAME"; static const char value[] = "SomeWildValue"; ret = SetEnvironmentVariableA(name, value); ok(ret == TRUE, "unexpected error in SetEnvironmentVariableA, GetLastError=%d\n", GetLastError()); /* Try to retrieve the environment variable we just set */ ret_size = GetEnvironmentVariableA(name, NULL, 0); ok(ret_size == strlen(value) + 1, "should return length with terminating 0 ret_size=%d\n", ret_size); lstrcpyA(buf, "foo"); ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value)); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); ok(ret_size == strlen(value) + 1, "should return length with terminating 0 ret_size=%d\n", ret_size); lstrcpyA(buf, "foo"); ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); ok(ret_size == strlen(value), "should return length without terminating 0 ret_size=%d\n", ret_size); lstrcpyA(buf, "foo"); ret_size = GetEnvironmentVariableA(name_cased, buf, lstrlenA(value) + 1); ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); ok(ret_size == strlen(value), "should return length without terminating 0 ret_size=%d\n", ret_size); /* Remove that environment variable */ ret = SetEnvironmentVariableA(name_cased, NULL); ok(ret == TRUE, "should erase existing variable\n"); lstrcpyA(buf, "foo"); ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, "should not find variable but ret_size=%d GetLastError=%d\n", ret_size, GetLastError()); /* Check behavior of SetEnvironmentVariableA(name, "") */ ret = SetEnvironmentVariableA(name, value); ok(ret == TRUE, "unexpected error in SetEnvironmentVariableA, GetLastError=%d\n", GetLastError()); lstrcpyA(buf, "foo"); ret_size = GetEnvironmentVariableA(name_cased, buf, lstrlenA(value) + 1); ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); ok(ret_size == strlen(value), "should return length without terminating 0 ret_size=%d\n", ret_size); ret = SetEnvironmentVariableA(name_cased, ""); ok(ret == TRUE, "should not fail with empty value but GetLastError=%d\n", GetLastError()); lstrcpyA(buf, "foo"); SetLastError(0); ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); ok(ret_size == 0 && ((GetLastError() == 0 && lstrcmpA(buf, "") == 0) || (GetLastError() == ERROR_ENVVAR_NOT_FOUND)), "%s should be set to \"\" (NT) or removed (Win9x) but ret_size=%d GetLastError=%d and buf=%s\n", name, ret_size, GetLastError(), buf); /* Test the limits */ ret_size = GetEnvironmentVariableA(NULL, NULL, 0); ok(ret_size == 0 && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_ENVVAR_NOT_FOUND), "should not find variable but ret_size=%d GetLastError=%d\n", ret_size, GetLastError()); ret_size = GetEnvironmentVariableA(NULL, buf, lstrlenA(value) + 1); ok(ret_size == 0 && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_ENVVAR_NOT_FOUND), "should not find variable but ret_size=%d GetLastError=%d\n", ret_size, GetLastError()); ret_size = GetEnvironmentVariableA("", buf, lstrlenA(value) + 1); ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, "should not find variable but ret_size=%d GetLastError=%d\n", ret_size, GetLastError()); }
static void init_strings(void) { char startup[MAX_PATH]; char commonprograms[MAX_PATH]; char programs[MAX_PATH]; if (pSHGetSpecialFolderPathA) { pSHGetSpecialFolderPathA(NULL, programs, CSIDL_PROGRAMS, FALSE); pSHGetSpecialFolderPathA(NULL, commonprograms, CSIDL_COMMON_PROGRAMS, FALSE); pSHGetSpecialFolderPathA(NULL, startup, CSIDL_STARTUP, FALSE); } else { HKEY key; DWORD size; /* Older Win9x and NT4 */ RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &key); size = sizeof(programs); RegQueryValueExA(key, "Programs", NULL, NULL, (LPBYTE)&programs, &size); size = sizeof(startup); RegQueryValueExA(key, "Startup", NULL, NULL, (LPBYTE)&startup, &size); RegCloseKey(key); RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &key); size = sizeof(commonprograms); RegQueryValueExA(key, "Common Programs", NULL, NULL, (LPBYTE)&commonprograms, &size); RegCloseKey(key); } /* ProgramsDir on Vista+ is always the users one (CSIDL_PROGRAMS). Before Vista * it depends on whether the user is an administrator (CSIDL_COMMON_PROGRAMS) or * not (CSIDL_PROGRAMS). */ if (use_common()) lstrcpyA(ProgramsDir, commonprograms); else lstrcpyA(ProgramsDir, programs); if (full_title()) { lstrcpyA(Group1Title, ProgramsDir); lstrcatA(Group1Title, "\\Group1"); lstrcpyA(Group2Title, ProgramsDir); lstrcatA(Group2Title, "\\Group2"); lstrcpyA(Group3Title, ProgramsDir); lstrcatA(Group3Title, "\\Group3"); lstrcpyA(StartupTitle, startup); } else { /* Vista has the nice habit of displaying the full path in English * and the short one localized. CSIDL_STARTUP on Vista gives us the * English version so we have to 'translate' this one. * * MSDN claims it should be used for files not folders but this one * suits our purposes just fine. */ if (pSHGetLocalizedName) { WCHAR startupW[MAX_PATH]; WCHAR module[MAX_PATH]; WCHAR module_expanded[MAX_PATH]; WCHAR localized[MAX_PATH]; HRESULT hr; int id; MultiByteToWideChar(CP_ACP, 0, startup, -1, startupW, sizeof(startupW)/sizeof(WCHAR)); hr = pSHGetLocalizedName(startupW, module, MAX_PATH, &id); todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); /* check to be removed when SHGetLocalizedName is implemented */ if (hr == S_OK) { ExpandEnvironmentStringsW(module, module_expanded, MAX_PATH); LoadStringW(GetModuleHandleW(module_expanded), id, localized, MAX_PATH); WideCharToMultiByte(CP_ACP, 0, localized, -1, StartupTitle, sizeof(StartupTitle), NULL, NULL); } else lstrcpyA(StartupTitle, (strrchr(startup, '\\') + 1)); } else { lstrcpyA(StartupTitle, (strrchr(startup, '\\') + 1)); } } }