77 static char backslash[] =
"\\";
118 if (pGetProcessWindowStation && pGetUserObjectInformationA)
124 wstation = (HWINSTA)pGetProcessWindowStation();
125 assert(pGetUserObjectInformationA(wstation,
UOI_FLAGS, &uoflags,
sizeof(uoflags), &
len));
136 const char *(*wine_get_build_id)(
void);
148 xprintf (
" dwMajorVersion=%ld\n dwMinorVersion=%ld\n"
149 " dwBuildNumber=%ld\n PlatformId=%ld\n szCSDVersion=%s\n",
154 if (wine_get_build_id)
xprintf(
" WineBuild=%s\n", wine_get_build_id() );
158 xprintf(
" R2 build number=%d\n", is_win2k3_r2);
162 xprintf (
" wServicePackMajor=%d\n wServicePackMinor=%d\n"
163 " wSuiteMask=%d\n wProductType=%d\n wReserved=%d\n",
170 return ((
x[0] ==
'.') && ((
x[1] == 0) || ((
x[1] ==
'.') && (
x[2] == 0))));
187 char *lp = wfd.cFileName;
189 if (!lp[0]) lp = wfd.cAlternateFileName;
206 static const char* special_dirs[][2] = {
212 for (
i = 0; special_dirs[
i][0];
i++) {
214 test = special_dirs[
i][1];
236 char revinfo[256], *
p;
250 if (
len >=
sizeof(revinfo) - 1)
294 if (!(fout =
fopen (
test->exename,
"wb")) ||
311 int fd, oldstdout = -1;
330 NULL, tempdir, &si, &
pi)) {
357 "Wait for termination of '%s' failed: %d",
375 if (-1 ==
dup2 (oldstdout, 1))
389 static const char header[] =
"Valid test names:";
392 test->subtest_count = 0;
402 subfile =
fopen (subname,
"r");
426 test->subtests =
xmalloc (allocated *
sizeof(
char*));
429 if (
test->subtest_count == allocated) {
432 allocated *
sizeof(
char*));
438 test->subtest_count *
sizeof(
char*));
473 const char *tempdir = (
const char *)
lParam;
479 strcpy(dllname, lpszName);
484 xprintf (
" %s=dll is missing\n", dllname);
501 char *tempdir, *shorttempdir;
503 char *strres, *eol, *nextline;
522 if (-1 ==
dup2 (logfile, 1))
528 report (
R_FATAL,
"Can't name temporary dir (check %%TEMP%%).");
529 shorttempdir =
strdup (tempdir);
531 strstr (shorttempdir,
"wct")[3] = 0;
534 tempdir = shorttempdir;
535 }
else free (shorttempdir);
545 else if (strres)
xprintf (
"%.*s", strsize, strres);
549 if (strres)
xprintf (
"%.*s", strsize, strres);
555 eol =
memchr (strres,
'\n', strsize);
558 eol = strres + strsize;
560 strsize -= eol - strres + 1;
561 nextline = strsize?eol+1:
NULL;
562 if (eol > strres && *(eol-1) ==
'\r') eol--;
564 xprintf (
" %.*s\n", eol-strres, strres);
567 xprintf (
"Operating system version:\n");
597 for (
j = 0;
j <
test->subtest_count;
j++) {
618"Usage: winetest [OPTION]...\n\n"
619" -c console mode, no GUI\n"
620" -e preserve the environment\n"
621" -h print this message and exit\n"
622" -p shutdown when the tests are done\n"
623" -q quiet mode, no output at all\n"
624" -o FILE put report into FILE, do not submit\n"
625" -s FILE submit FILE, do not run tests\n"
626" -t TAG include TAG of characters [-.0-9a-zA-Z] in the report\n");
630 LPSTR cmdLine,
int cmdShow)
632 char *logname =
NULL;
633 const char *
cp, *submit =
NULL;
643 if (cmdLine[0] !=
'-' || cmdLine[2]) {
648 switch (cmdLine[1]) {
696 static CHAR platform_windows[] =
"WINETEST_PLATFORM=windows",
697 platform_wine[] =
"WINETEST_PLATFORM=wine",
698 debug_yes[] =
"WINETEST_DEBUG=1",
699 interactive_no[] =
"WINETEST_INTERACTIVE=0",
700 report_success_no[] =
"WINETEST_REPORT_SUCCESS=0";
712 putenv (interactive_no) ||
713 putenv (report_success_no)))
719 "running noninteractive!");
727 "test results?") ==
IDYES)
int strcmp(const char *String1, const char *String2)
char * strstr(char *String1, char *String2)
ACPI_SIZE strlen(const char *String)
char * strtok(char *String, const char *Delimiters)
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow)
char * xstrdup(const char *s)
void * xrealloc(void *oldmem, size_t size)
void quit(int argc, const char *argv[])
BOOL WINAPI LookupPrivilegeValueA(LPCSTR lpSystemName, LPCSTR lpName, PLUID lpLuid)
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
static void report(const DATA_BLOB *pDataIn, const DATA_BLOB *pOptionalEntropy, CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, DWORD dwFlags)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define GetCurrentProcess()
static const WCHAR *const ext[]
static const WCHAR version[]
UINT WINAPI SetErrorMode(IN UINT uMode)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI FindClose(HANDLE hFindFile)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
BOOL WINAPI GetExitCodeProcess(IN HANDLE hProcess, IN LPDWORD lpExitCode)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
LPVOID WINAPI LockResource(HGLOBAL handle)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR filename, LPDWORD handle)
BOOL WINAPI VerQueryValueA(LPCVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
BOOL WINAPI GetFileVersionInfoA(LPCSTR filename, DWORD handle, DWORD datasize, LPVOID data)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLvoid * addr
GLsizeiptr const GLvoid GLenum usage
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
_CRTIMP char *__cdecl tempnam(_In_opt_z_ const char *_Directory, _In_opt_z_ const char *_FilePrefix)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP int __cdecl putenv(_In_z_ const char *_EnvString)
#define memcpy(s1, s2, n)
#define sprintf(buf, format,...)
static BOOL run_tests(void)
static void print_version(void)
static char * get_file_version(char *file_name)
static void * extract_rcdata(LPTSTR name, int type, DWORD *size)
static int run_ex(char *cmd, const char *out, const char *tempdir, DWORD ms)
static void extract_rev_infos(void)
static struct wine_test * wine_tests
static const char whitespace[]
static int running_on_visible_desktop(void)
static const char testexe[]
static struct rev_info * rev_infos
static void remove_dir(const char *dir)
static const char * get_test_source_file(const char *test, const char *subtest)
static const char * get_file_rev(const char *file)
static BOOL CALLBACK extract_test_proc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam)
static BOOL CALLBACK EnumTestFileProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam)
static void extract_test(struct wine_test *test, const char *dir, LPTSTR res_name)
static void get_subtests(const char *tempdir, struct wine_test *test, LPTSTR res_name)
static int running_under_wine(void)
int send_file(const char *name)
char * strmake(size_t *lenp,...)
const char * findbadtagchar(const char *tag)
#define SEM_FAILCRITICALERRORS
#define SEM_NOGPFAULTERRORBOX
#define FILE_ATTRIBUTE_DIRECTORY
_Check_return_ _CRTIMP int __cdecl dup2(_In_ int _FileHandleSrc, _In_ int _FileHandleDst)
_Check_return_ _CRTIMP char *__cdecl strdup(_In_opt_z_ const char *_Src)
_CRT_RESTORE_GCC_WARNINGS _CRT_DISABLE_GCC_WARNINGS _Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
void xprintf(const char *fmt,...)
ULONG dwOSVersionInfoSize
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
#define LOAD_LIBRARY_AS_DATAFILE
#define CREATE_DEFAULT_ERROR_MODE
#define EnumResourceNames
#define GetWindowLongPtrW
LPSTR WINAPI CharLowerA(_Inout_ LPSTR)
int WINAPI LoadStringA(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPSTR lpBuffer, _In_ int cchBufferMax)
HWND WINAPI GetDesktopWindow(void)
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
BOOL WINAPI IsWindowVisible(_In_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
OSVERSIONINFOEXA OSVERSIONINFOEX
OSVERSIONINFOA OSVERSIONINFO
#define TOKEN_ADJUST_PRIVILEGES
#define SE_PRIVILEGE_ENABLED