winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
April 2017
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
757 discussions
Start a n
N
ew thread
Alexandre Julliard : configure: Re-enable the preloader on Android.
by Alexandre Julliard
27 Apr '17
27 Apr '17
Module: wine Branch: master Commit: fec21ed61947e1a301e03be116d39ae4ba04645e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fec21ed61947e1a301e03be11…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Apr 27 15:41:44 2017 +0200 configure: Re-enable the preloader on Android. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- configure | 30 ++---------------------------- configure.ac | 7 ++----- loader/main.c | 4 ++++ 3 files changed, 8 insertions(+), 33 deletions(-) diff --git a/configure b/configure index dee9369..229dba9 100755 --- a/configure +++ b/configure @@ -8353,6 +8353,7 @@ fi linux-android*) DLLFLAGS="$DLLFLAGS -fPIC" + LDEXECFLAGS="-Wl,-pie" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,--export-dynamic" >&5 $as_echo_n "checking whether the compiler supports -fPIC -Wl,--export-dynamic... " >&6; } if ${ac_cv_cflags__fPIC__Wl___export_dynamic+:} false; then : @@ -8376,7 +8377,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__fPIC__Wl___export_dynamic" >&5 $as_echo "$ac_cv_cflags__fPIC__Wl___export_dynamic" >&6; } if test "x$ac_cv_cflags__fPIC__Wl___export_dynamic" = xyes; then : - LDEXECFLAGS="-Wl,--export-dynamic" + LDEXECFLAGS="$LDEXECFLAGS -Wl,--export-dynamic" fi as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,--rpath,\\$ORIGIN/../lib" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 @@ -8435,7 +8436,6 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then : LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine" fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,--enable-new-dtags" >&5 $as_echo_n "checking whether the compiler supports -Wl,--enable-new-dtags... " >&6; } if ${ac_cv_cflags__Wl___enable_new_dtags+:} false; then : @@ -8461,31 +8461,6 @@ $as_echo "$ac_cv_cflags__Wl___enable_new_dtags" >&6; } if test "x$ac_cv_cflags__Wl___enable_new_dtags" = xyes; then : LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-pie" >&5 -$as_echo_n "checking whether the compiler supports -Wl,-pie... " >&6; } -if ${ac_cv_cflags__Wl__pie+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -Wl,-pie" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(int argc, char **argv) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_cflags__Wl__pie=yes -else - ac_cv_cflags__Wl__pie=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -CFLAGS=$ac_wine_try_cflags_saved -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl__pie" >&5 -$as_echo "$ac_cv_cflags__Wl__pie" >&6; } -if test "x$ac_cv_cflags__Wl__pie" = xyes; then : - LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,-pie" -fi LIBWINE_SHAREDLIB="libwine.so" @@ -15258,7 +15233,6 @@ case $build_os in esac case $host_os in - linux-android*) ;; linux*) case $host_cpu in *i[3456789]86*|x86_64*) diff --git a/configure.ac b/configure.ac index 0a3b3b1..057bcc8 100644 --- a/configure.ac +++ b/configure.ac @@ -847,19 +847,17 @@ case $host_os in linux-android*) DLLFLAGS="$DLLFLAGS -fPIC" + LDEXECFLAGS="-Wl,-pie" WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], - [LDEXECFLAGS="-Wl,--export-dynamic"]) + [LDEXECFLAGS="$LDEXECFLAGS -Wl,--export-dynamic"]) WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"], [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`" LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(top_builddir)/libs/wine"])]) - WINE_TRY_CFLAGS([-Wl,--enable-new-dtags], [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags"]) - WINE_TRY_CFLAGS([-Wl,-pie], - [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,-pie"]) AC_SUBST(LIBWINE_SHAREDLIB,"libwine.so") AC_SUBST(LIBWINE_INSTALL_LIB,"libwine.so") @@ -1967,7 +1965,6 @@ case $build_os in esac case $host_os in - linux-android*) ;; linux*) case $host_cpu in *i[[3456789]]86*|x86_64*) diff --git a/loader/main.c b/loader/main.c index 05e0c06..a560ec3 100644 --- a/loader/main.c +++ b/loader/main.c @@ -113,7 +113,11 @@ static void check_command_line( int argc, char *argv[] ) static int pre_exec(void) { +#if defined(__i386__) || defined(__x86_64__) + return 1; /* we have a preloader */ +#else return 0; /* no exec needed */ +#endif } #elif defined(__linux__) && (defined(__i386__) || defined(__arm__))
1
0
0
0
Alexandre Julliard : preloader: Fix symbol lookup for dynamic libraries.
by Alexandre Julliard
27 Apr '17
27 Apr '17
Module: wine Branch: master Commit: 60fb3d4b64c3d53101243e81b26ca98bf4d469d9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=60fb3d4b64c3d53101243e81b…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Apr 27 15:04:34 2017 +0200 preloader: Fix symbol lookup for dynamic libraries. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- loader/preloader.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/loader/preloader.c b/loader/preloader.c index 903061e..a21efc9 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -945,7 +945,7 @@ static unsigned int gnu_hash( const char *name ) /* * Find a symbol in the symbol table of the executable loaded */ -static void *find_symbol( const ElfW(Phdr) *phdr, int num, const char *var, int type ) +static void *find_symbol( const struct wld_link_map *map, const char *var, int type ) { const ElfW(Dyn) *dyn = NULL; const ElfW(Phdr) *ph; @@ -957,21 +957,14 @@ static void *find_symbol( const ElfW(Phdr) *phdr, int num, const char *var, int /* check the values */ #ifdef DUMP_SYMS - wld_printf("%p %x\n", phdr, num ); + wld_printf("%p %x\n", map->l_phdr, map->l_phnum ); #endif - if( ( phdr == NULL ) || ( num == 0 ) ) - { - wld_printf("could not find PT_DYNAMIC header entry\n"); - return NULL; - } - /* parse the (already loaded) ELF executable's header */ - for (ph = phdr; ph < &phdr[num]; ++ph) + for (ph = map->l_phdr; ph < &map->l_phdr[map->l_phnum]; ++ph) { if( PT_DYNAMIC == ph->p_type ) { - dyn = (void *) ph->p_vaddr; - num = ph->p_memsz / sizeof (*dyn); + dyn = (void *)(ph->p_vaddr + map->l_addr); break; } } @@ -980,13 +973,13 @@ static void *find_symbol( const ElfW(Phdr) *phdr, int num, const char *var, int while( dyn->d_tag ) { if( dyn->d_tag == DT_STRTAB ) - strings = (const char*) dyn->d_un.d_ptr; + strings = (const char*)(dyn->d_un.d_ptr + map->l_addr); if( dyn->d_tag == DT_SYMTAB ) - symtab = (const ElfW(Sym) *)dyn->d_un.d_ptr; + symtab = (const ElfW(Sym) *)(dyn->d_un.d_ptr + map->l_addr); if( dyn->d_tag == DT_HASH ) - hashtab = (const Elf32_Word *)dyn->d_un.d_ptr; + hashtab = (const Elf32_Word *)(dyn->d_un.d_ptr + map->l_addr); if( dyn->d_tag == DT_GNU_HASH ) - gnu_hashtab = (const Elf32_Word *)dyn->d_un.d_ptr; + gnu_hashtab = (const Elf32_Word *)(dyn->d_un.d_ptr + map->l_addr); #ifdef DUMP_SYMS wld_printf("%lx %p\n", (unsigned long)dyn->d_tag, (void *)dyn->d_un.d_ptr ); #endif @@ -1036,7 +1029,7 @@ found: #ifdef DUMP_SYMS wld_printf("Found %s -> %p\n", strings + symtab[idx].st_name, (void *)symtab[idx].st_value ); #endif - return (void *)symtab[idx].st_value; + return (void *)(symtab[idx].st_value + map->l_addr); } /* @@ -1240,8 +1233,7 @@ void* wld_start( void **stack ) map_so_lib( interp, &ld_so_map ); /* store pointer to the preload info into the appropriate main binary variable */ - wine_main_preload_info = find_symbol( main_binary_map.l_phdr, main_binary_map.l_phnum, - "wine_main_preload_info", STT_OBJECT ); + wine_main_preload_info = find_symbol( &main_binary_map, "wine_main_preload_info", STT_OBJECT ); if (wine_main_preload_info) *wine_main_preload_info = preload_info; else wld_printf( "wine_main_preload_info not found\n" );
1
0
0
0
Alexandre Julliard : preloader: Use the SYS_mmap2 system call instead of the old SYS_mmap one.
by Alexandre Julliard
27 Apr '17
27 Apr '17
Module: wine Branch: master Commit: 45a632ee81c9c5c58309426de5aadbd8dbbba0f5 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=45a632ee81c9c5c58309426de…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Apr 27 15:04:03 2017 +0200 preloader: Use the SYS_mmap2 system call instead of the old SYS_mmap one. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- loader/preloader.c | 55 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/loader/preloader.c b/loader/preloader.c index 91ad1da..903061e 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -291,30 +291,37 @@ static inline int wld_mprotect( const void *addr, size_t len, int prot ) return SYSCALL_RET(ret); } -static void *wld_mmap( void *start, size_t len, int prot, int flags, int fd, off_t offset ) -{ - int ret; - - struct - { - void *addr; - unsigned int length; - unsigned int prot; - unsigned int flags; - unsigned int fd; - unsigned int offset; - } args; - - args.addr = start; - args.length = len; - args.prot = prot; - args.flags = flags; - args.fd = fd; - args.offset = offset; - __asm__ __volatile__( "pushl %%ebx; movl %2,%%ebx; int $0x80; popl %%ebx" - : "=a" (ret) : "0" (90 /* SYS_mmap */), "q" (&args) : "memory" ); - return (void *)SYSCALL_RET(ret); -} +void *wld_mmap( void *start, size_t len, int prot, int flags, int fd, unsigned int offset ); +__ASM_GLOBAL_FUNC(wld_mmap, + "\tpushl %ebp\n" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "\tpushl %ebx\n" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "\tpushl %esi\n" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "\tpushl %edi\n" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + "\tmovl $192,%eax\n" /* SYS_mmap2 */ + "\tmovl 20(%esp),%ebx\n" /* start */ + "\tmovl 24(%esp),%ecx\n" /* len */ + "\tmovl 28(%esp),%edx\n" /* prot */ + "\tmovl 32(%esp),%esi\n" /* flags */ + "\tmovl 36(%esp),%edi\n" /* fd */ + "\tmovl 40(%esp),%ebp\n" /* offset */ + "\tshrl $12,%ebp\n" + "\tint $0x80\n" + "\tcmpl $-4096,%eax\n" + "\tjbe 1f\n" + "\tmovl $-1,%eax\n" + "1:\tpopl %edi\n" + __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") + "\tpopl %esi\n" + __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") + "\tpopl %ebx\n" + __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") + "\tpopl %ebp\n" + __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") + "\tret\n" ) static inline uid_t wld_getuid(void) {
1
0
0
0
Alexandre Julliard : preloader: Add a debug option to dump memory maps.
by Alexandre Julliard
27 Apr '17
27 Apr '17
Module: wine Branch: master Commit: 1172754fcbbcf5769edbba8a3e76a604c487af6e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1172754fcbbcf5769edbba8a3…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Apr 27 15:03:46 2017 +0200 preloader: Add a debug option to dump memory maps. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- loader/preloader.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/loader/preloader.c b/loader/preloader.c index 7cf2946..91ad1da 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -127,6 +127,7 @@ static struct wine_preload_info preload_info[] = #undef DUMP_SEGMENTS #undef DUMP_AUX_INFO #undef DUMP_SYMS +#undef DUMP_MAPS /* older systems may not define these */ #ifndef PT_TLS @@ -1272,6 +1273,17 @@ void* wld_start( void **stack ) wld_printf("new stack = %p\n", *stack); wld_printf("jumping to %p\n", (void *)ld_so_map.l_entry); #endif +#ifdef DUMP_MAPS + { + char buffer[1024]; + int len, fd = wld_open( "/proc/self/maps", O_RDONLY ); + if (fd != -1) + { + while ((len = wld_read( fd, buffer, sizeof(buffer) )) > 0) wld_write( 2, buffer, len ); + wld_close( fd ); + } + } +#endif return (void *)ld_so_map.l_entry; }
1
0
0
0
Alistair Leslie-Hughes : odbccp32: Handle ODBC_CONFIG_DRIVER request in SQLConfigDriver/W.
by Alexandre Julliard
27 Apr '17
27 Apr '17
Module: wine Branch: master Commit: c92189c600a899d5da6e996107154b1bc9ca67de URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c92189c600a899d5da6e99610…
Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Wed Apr 26 10:03:44 2017 +0000 odbccp32: Handle ODBC_CONFIG_DRIVER request in SQLConfigDriver/W. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/odbccp32/odbccp32.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/odbccp32/tests/misc.c | 65 +++++++++++++++++++++++++++++++--- 2 files changed, 149 insertions(+), 4 deletions(-) diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c index f28d464..fce3fcd 100644 --- a/dlls/odbccp32/odbccp32.c +++ b/dlls/odbccp32/odbccp32.c @@ -65,6 +65,7 @@ static const WCHAR odbc_error_invalid_param_string[] = {'I','n','v','a','l','i', static const WCHAR odbc_error_invalid_dsn[] = {'I','n','v','a','l','i','d',' ','D','S','N',0}; static const WCHAR odbc_error_load_lib_failed[] = {'L','o','a','d',' ','L','i','b','r','a','r','y',' ','F','a','i','l','e','d',0}; static const WCHAR odbc_error_request_failed[] = {'R','e','q','u','e','s','t',' ','F','a','i','l','e','d',0}; +static const WCHAR odbc_error_invalid_keyword[] = {'I','n','v','a','l','i','d',' ','k','e','y','w','o','r','d',' ','v','a','l','u','e',0}; /* Push an error onto the error stack, taking care of ranges etc. */ static void push_error(int code, LPCWSTR msg) @@ -303,6 +304,64 @@ static HMODULE load_config_driver(const WCHAR *driver) return hmod; } +static BOOL write_config_value(const WCHAR *driver, const WCHAR *args) +{ + long ret; + HKEY hkey, hkeydriver; + WCHAR *name = NULL; + + if(!args) + return FALSE; + + if((ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, odbcini, &hkey)) == ERROR_SUCCESS) + { + if((ret = RegOpenKeyW(hkey, driver, &hkeydriver)) == ERROR_SUCCESS) + { + WCHAR *divider, *value; + + name = heap_alloc( (strlenW(args) + 1) * sizeof(WCHAR)); + if(!name) + { + push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem); + goto fail; + } + lstrcpyW(name, args); + + divider = strchrW(name,'='); + if(!divider) + { + push_error(ODBC_ERROR_INVALID_KEYWORD_VALUE, odbc_error_invalid_keyword); + goto fail; + } + + value = divider + 1; + *divider = '\0'; + + TRACE("Write pair: %s = %s\n", debugstr_w(name), debugstr_w(value)); + if(RegSetValueExW(hkeydriver, name, 0, REG_SZ, (BYTE*)value, + (strlenW(value)+1) * sizeof(WCHAR)) != ERROR_SUCCESS) + ERR("Failed to write registry installed key\n"); + heap_free(name); + + RegCloseKey(hkeydriver); + } + + RegCloseKey(hkey); + } + + if(ret != ERROR_SUCCESS) + push_error(ODBC_ERROR_COMPONENT_NOT_FOUND, odbc_error_component_not_found); + + return ret == ERROR_SUCCESS; + +fail: + RegCloseKey(hkeydriver); + RegCloseKey(hkey); + heap_free(name); + + return FALSE; +} + BOOL WINAPI SQLConfigDriverW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR args, LPWSTR msg, WORD msgmax, WORD *msgout) { @@ -314,6 +373,11 @@ BOOL WINAPI SQLConfigDriverW(HWND hwnd, WORD request, LPCWSTR driver, TRACE("(%p %d %s %s %p %d %p)\n", hwnd, request, debugstr_w(driver), debugstr_w(args), msg, msgmax, msgout); + if(request == ODBC_CONFIG_DRIVER) + { + return write_config_value(driver, args); + } + hmod = load_config_driver(driver); if(!hmod) return FALSE; @@ -343,6 +407,30 @@ BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver, debugstr_a(args), msg, msgmax, msgout); driverW = heap_strdupAtoW(driver); + if(!driverW) + { + push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem); + return FALSE; + } + if(request == ODBC_CONFIG_DRIVER) + { + BOOL ret = FALSE; + WCHAR *argsW = heap_strdupAtoW(args); + if(argsW) + { + ret = write_config_value(driverW, argsW); + HeapFree(GetProcessHeap(), 0, argsW); + } + else + { + push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem); + } + + HeapFree(GetProcessHeap(), 0, driverW); + + return ret; + } + hmod = load_config_driver(driverW); HeapFree(GetProcessHeap(), 0, driverW); if(!hmod) diff --git a/dlls/odbccp32/tests/misc.c b/dlls/odbccp32/tests/misc.c index ed8e6f1..8e119e0 100644 --- a/dlls/odbccp32/tests/misc.c +++ b/dlls/odbccp32/tests/misc.c @@ -421,31 +421,63 @@ static void test_SQLInstallDriverEx(void) DWORD cnt, error_code = 0; HKEY hkey; LONG res; + char error[1000]; GetSystemDirectoryA(syspath, MAX_PATH); - SQLInstallDriverEx("WINE ODBC Driver\0Driver=sample.dll\0Setup=sample.dll\0\0", NULL, path, MAX_PATH, &size, ODBC_INSTALL_COMPLETE, NULL); + ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", "CPTimeout=59", error, sizeof(error), NULL); + ok(!ret, "SQLConfigDriver returned %d\n", ret); + sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); + ok(sql_ret && error_code == ODBC_ERROR_COMPONENT_NOT_FOUND, "SQLConfigDriver returned %d, %u\n", sql_ret, error_code); + + ret = SQLInstallDriverEx("WINE ODBC Driver\0Driver=sample.dll\0Setup=sample.dll\0\0", NULL, + path, MAX_PATH, &size, ODBC_INSTALL_COMPLETE, NULL); + ok(ret, "SQLInstallDriverEx failed\n"); sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); if (sql_ret && error_code == ODBC_ERROR_WRITING_SYSINFO_FAILED) { win_skip("not enough privileges\n"); return; } - ok(sql_ret && error_code == SQL_SUCCESS, "SQLInstallDriverEx failed %d, %u\n", sql_ret, error_code); + ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLInstallDriverEx failed %d, %u\n", sql_ret, error_code); ok(!strcmp(path, syspath), "invalid path %s\n", path); +if (0) /* Crashes on XP. */ +{ + sql_ret = 0; + ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", NULL, error, sizeof(error), NULL); + ok(!ret, "SQLConfigDriver failed '%s'\n",error); +} + + ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", "CPTimeout=59\0NoWrite=60\0", error, sizeof(error), NULL); + ok(ret, "SQLConfigDriver failed\n"); + sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); + ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLConfigDriver failed %d, %u\n", sql_ret, error_code); + ret = SQLInstallDriverEx("WINE ODBC Driver Path\0Driver=sample.dll\0Setup=sample.dll\0\0", "c:\\temp", path, MAX_PATH, &size, ODBC_INSTALL_COMPLETE, NULL); + ok(ret, "SQLInstallDriverEx failed\n"); sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - ok(sql_ret && error_code == SQL_SUCCESS, "SQLInstallDriverEx failed %d, %u\n", sql_ret, error_code); + ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLInstallDriverEx failed %d, %u\n", sql_ret, error_code); ok(!strcmp(path, "c:\\temp"), "invalid path %s\n", path); + ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver Path", "empty", error, sizeof(error), NULL); + ok(!ret, "SQLConfigDriver successful\n"); + sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); + ok(sql_ret && error_code == ODBC_ERROR_INVALID_KEYWORD_VALUE, "SQLConfigDriver failed %d, %u\n", sql_ret, error_code); + + ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver Path", "NoWrite=60;xxxx=555", error, sizeof(error), NULL); + ok(ret, "SQLConfigDriver failed\n"); + sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); + ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLConfigDriver failed %d, %u\n", sql_ret, error_code); + if (ret) { + DWORD type = 0xdeadbeef, size = MAX_PATH; + res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBCINST.INI\\WINE ODBC Driver", 0, KEY_READ, &hkey); ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n"); if (res == ERROR_SUCCESS) { - DWORD type = 0xdeadbeef, size = MAX_PATH; char driverpath[MAX_PATH]; strcpy(driverpath, syspath); @@ -458,6 +490,31 @@ static void test_SQLInstallDriverEx(void) ok(size == strlen(driverpath) + 1, "got %u\n", size); ok(!strcmp(path, driverpath), "invalid path %s\n", path); + res = RegQueryValueExA(hkey, "CPTimeout", NULL, &type, (BYTE *)&path, &size); + ok(res == ERROR_SUCCESS, "got %d\n", res); + ok(type == REG_SZ, "got %u\n", type); + ok(size == strlen("59") + 1, "got %u\n", size); + ok(!strcmp(path, "59"), "invalid value %s\n", path); + + res = RegQueryValueExA(hkey, "NoWrite", NULL, &type, (BYTE *)&path, &size); + ok(res == ERROR_FILE_NOT_FOUND, "got %d\n", res); + + RegCloseKey(hkey); + } + + res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBCINST.INI\\WINE ODBC Driver Path", 0, KEY_READ, &hkey); + ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n"); + if (res == ERROR_SUCCESS) + { + size = sizeof(path); + res = RegQueryValueExA(hkey, "NoWrite", NULL, &type, (BYTE *)&path, &size); + ok(res == ERROR_SUCCESS, "got %d\n", res); + ok(type == REG_SZ, "got %u\n", type); + ok(size == strlen("60;xxxx=555") + 1, "got %u\n", size); + ok(!strcmp(path, "60;xxxx=555"), "invalid value %s\n", path); + + res = RegQueryValueExA(hkey, "CPTimeout", NULL, &type, (BYTE *)&path, &size); + ok(res == ERROR_FILE_NOT_FOUND, "got %d\n", res); RegCloseKey(hkey); } }
1
0
0
0
Paul Gofman : d3dx9: Support parameters sharing in effect.
by Alexandre Julliard
26 Apr '17
26 Apr '17
Module: wine Branch: master Commit: 6f99cf01e1b88c9bb09fe6b9bff3443514db5ae2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6f99cf01e1b88c9bb09fe6b9b…
Author: Paul Gofman <gofmanp(a)gmail.com> Date: Wed Apr 26 20:25:46 2017 +0200 d3dx9: Support parameters sharing in effect. Signed-off-by: Paul Gofman <gofmanp(a)gmail.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3dx9_36/d3dx9_private.h | 8 +- dlls/d3dx9_36/effect.c | 209 +++++++++++++++++++++++++++++++++++++++++- dlls/d3dx9_36/tests/effect.c | 21 ++--- 3 files changed, 224 insertions(+), 14 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=6f99cf01e1b88c9bb09fe…
1
0
0
0
Paul Gofman : d3dx9/tests: Add test for releasing pool before effects referencing it.
by Alexandre Julliard
26 Apr '17
26 Apr '17
Module: wine Branch: master Commit: eb9febab0393613c804345f8268829d82aea30fb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=eb9febab0393613c804345f82…
Author: Paul Gofman <gofmanp(a)gmail.com> Date: Wed Apr 26 12:21:03 2017 +0300 d3dx9/tests: Add test for releasing pool before effects referencing it. Signed-off-by: Paul Gofman <gofmanp(a)gmail.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3dx9_36/tests/effect.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c index 9a436d5..dbf91c4 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c @@ -6130,6 +6130,21 @@ static void test_effect_shared_parameters(IDirect3DDevice9 *device) hr = effect2->lpVtbl->End(effect2); ok(hr == D3D_OK, "Got result %#x.\n", hr); + if (0) + { + refcount = pool->lpVtbl->Release(pool); + ok(refcount == 2, "Unexpected refcount %u.\n", refcount); + + refcount = pool->lpVtbl->Release(pool); + ok(refcount == 1, "Unexpected refcount %u.\n", refcount); + + refcount = pool->lpVtbl->Release(pool); + ok(!refcount, "Unexpected refcount %u.\n", refcount); + + /* Native d3dx crashes in GetFloat(). */ + effect2->lpVtbl->GetFloat(effect2, "arr2[0]", &fvect.x); + } + effect1->lpVtbl->Release(effect1); effect2->lpVtbl->Release(effect2);
1
0
0
0
Paul Gofman : d3dx9: Reference effect pool implementation in d3dx9_base_effect structure.
by Alexandre Julliard
26 Apr '17
26 Apr '17
Module: wine Branch: master Commit: 9043ff030ea846e52a56d907f949071e7aa3d799 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9043ff030ea846e52a56d907f…
Author: Paul Gofman <gofmanp(a)gmail.com> Date: Wed Apr 26 12:21:02 2017 +0300 d3dx9: Reference effect pool implementation in d3dx9_base_effect structure. Signed-off-by: Paul Gofman <gofmanp(a)gmail.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3dx9_36/effect.c | 84 +++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index 0f5e3e5..b732c67 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -148,6 +148,8 @@ struct d3dx9_base_effect struct d3dx_parameter *parameters; struct d3dx_technique *techniques; struct d3dx_object *objects; + + struct d3dx_effect_pool *pool; }; struct ID3DXEffectImpl @@ -171,6 +173,12 @@ struct ID3DXEffectImpl BOOL material_updated; }; +struct d3dx_effect_pool +{ + ID3DXEffectPool ID3DXEffectPool_iface; + LONG refcount; +}; + struct ID3DXEffectCompilerImpl { ID3DXEffectCompiler ID3DXEffectCompiler_iface; @@ -3032,6 +3040,11 @@ static BOOL is_same_parameter(void *param1_, struct d3dx_parameter *param2) return TRUE; } +static inline struct d3dx_effect_pool *impl_from_ID3DXEffectPool(ID3DXEffectPool *iface) +{ + return CONTAINING_RECORD(iface, struct d3dx_effect_pool, ID3DXEffectPool_iface); +} + static inline struct ID3DXEffectImpl *impl_from_ID3DXEffect(ID3DXEffect *iface) { return CONTAINING_RECORD(iface, struct ID3DXEffectImpl, ID3DXEffect_iface); @@ -6029,16 +6042,17 @@ err_out: static HRESULT d3dx9_base_effect_init(struct d3dx9_base_effect *base, const char *data, SIZE_T data_size, const D3D_SHADER_MACRO *defines, ID3DInclude *include, - UINT eflags, ID3DBlob **errors, struct ID3DXEffectImpl *effect) + UINT eflags, ID3DBlob **errors, struct ID3DXEffectImpl *effect, struct d3dx_effect_pool *pool) { DWORD tag, offset; const char *ptr = data; HRESULT hr; ID3DBlob *bytecode = NULL, *temp_errors = NULL; - TRACE("base %p, data %p, data_size %lu, effect %p\n", base, data, data_size, effect); + TRACE("base %p, data %p, data_size %lu, effect %p, pool %p.\n", base, data, data_size, effect, pool); base->effect = effect; + base->pool = pool; read_dword(&ptr, &tag); TRACE("Tag: %x\n", tag); @@ -6111,20 +6125,25 @@ static HRESULT d3dx9_effect_init(struct ID3DXEffectImpl *effect, struct IDirect3 UINT eflags, ID3DBlob **error_messages, struct ID3DXEffectPool *pool) { HRESULT hr; + struct d3dx_effect_pool *pool_impl = NULL; TRACE("effect %p, device %p, data %p, data_size %lu, pool %p\n", effect, device, data, data_size, pool); effect->ID3DXEffect_iface.lpVtbl = &ID3DXEffect_Vtbl; effect->ref = 1; - if (pool) pool->lpVtbl->AddRef(pool); + if (pool) + { + pool->lpVtbl->AddRef(pool); + pool_impl = impl_from_ID3DXEffectPool(pool); + } effect->pool = pool; IDirect3DDevice9_AddRef(device); effect->device = device; if (FAILED(hr = d3dx9_base_effect_init(&effect->base_effect, data, data_size, defines, include, - eflags, error_messages, effect))) + eflags, error_messages, effect, pool_impl))) { FIXME("Failed to parse effect, hr %#x.\n", hr); free_effect(effect); @@ -6211,7 +6230,7 @@ static HRESULT d3dx9_effect_compiler_init(struct ID3DXEffectCompilerImpl *compil compiler->ref = 1; if (FAILED(hr = d3dx9_base_effect_init(&compiler->base_effect, data, data_size, defines, - include, eflags, error_messages, NULL))) + include, eflags, error_messages, NULL, NULL))) { FIXME("Failed to parse effect, hr %#x.\n", hr); free_effect_compiler(compiler); @@ -6256,21 +6275,10 @@ HRESULT WINAPI D3DXCreateEffectCompiler(const char *srcdata, UINT srcdatalen, co return D3D_OK; } -struct ID3DXEffectPoolImpl -{ - ID3DXEffectPool ID3DXEffectPool_iface; - LONG ref; -}; - -static inline struct ID3DXEffectPoolImpl *impl_from_ID3DXEffectPool(ID3DXEffectPool *iface) -{ - return CONTAINING_RECORD(iface, struct ID3DXEffectPoolImpl, ID3DXEffectPool_iface); -} - /*** IUnknown methods ***/ -static HRESULT WINAPI ID3DXEffectPoolImpl_QueryInterface(ID3DXEffectPool *iface, REFIID riid, void **object) +static HRESULT WINAPI d3dx_effect_pool_QueryInterface(ID3DXEffectPool *iface, REFIID riid, void **object) { - TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), object); + TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ID3DXEffectPool)) @@ -6285,41 +6293,47 @@ static HRESULT WINAPI ID3DXEffectPoolImpl_QueryInterface(ID3DXEffectPool *iface, return E_NOINTERFACE; } -static ULONG WINAPI ID3DXEffectPoolImpl_AddRef(ID3DXEffectPool *iface) +static ULONG WINAPI d3dx_effect_pool_AddRef(ID3DXEffectPool *iface) { - struct ID3DXEffectPoolImpl *This = impl_from_ID3DXEffectPool(iface); + struct d3dx_effect_pool *pool = impl_from_ID3DXEffectPool(iface); + ULONG refcount = InterlockedIncrement(&pool->refcount); - TRACE("(%p)->(): AddRef from %u\n", This, This->ref); + TRACE("%p increasing refcount to %u.\n", pool, refcount); - return InterlockedIncrement(&This->ref); + return refcount; } -static ULONG WINAPI ID3DXEffectPoolImpl_Release(ID3DXEffectPool *iface) +static void free_effect_pool(struct d3dx_effect_pool *pool) { - struct ID3DXEffectPoolImpl *This = impl_from_ID3DXEffectPool(iface); - ULONG ref = InterlockedDecrement(&This->ref); + HeapFree(GetProcessHeap(), 0, pool); +} - TRACE("(%p)->(): Release from %u\n", This, ref + 1); +static ULONG WINAPI d3dx_effect_pool_Release(ID3DXEffectPool *iface) +{ + struct d3dx_effect_pool *pool = impl_from_ID3DXEffectPool(iface); + ULONG refcount = InterlockedDecrement(&pool->refcount); - if (!ref) - HeapFree(GetProcessHeap(), 0, This); + TRACE("%p decreasing refcount to %u.\n", pool, refcount); - return ref; + if (!refcount) + free_effect_pool(pool); + + return refcount; } static const struct ID3DXEffectPoolVtbl ID3DXEffectPool_Vtbl = { /*** IUnknown methods ***/ - ID3DXEffectPoolImpl_QueryInterface, - ID3DXEffectPoolImpl_AddRef, - ID3DXEffectPoolImpl_Release + d3dx_effect_pool_QueryInterface, + d3dx_effect_pool_AddRef, + d3dx_effect_pool_Release }; HRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool) { - struct ID3DXEffectPoolImpl *object; + struct d3dx_effect_pool *object; - TRACE("(%p)\n", pool); + TRACE("pool %p.\n", pool); if (!pool) return D3DERR_INVALIDCALL; @@ -6329,7 +6343,7 @@ HRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool) return E_OUTOFMEMORY; object->ID3DXEffectPool_iface.lpVtbl = &ID3DXEffectPool_Vtbl; - object->ref = 1; + object->refcount = 1; *pool = &object->ID3DXEffectPool_iface;
1
0
0
0
Henri Verbeet : d3dx9/tests: Cleanup expect_vec4.
by Alexandre Julliard
26 Apr '17
26 Apr '17
Module: wine Branch: master Commit: 739703dc3cba6facc195b8f2c3e3a876dd88a638 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=739703dc3cba6facc195b8f2c…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Apr 26 00:11:03 2017 +0200 d3dx9/tests: Cleanup expect_vec4. Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3dx9_36/tests/math.c | 52 +++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index a57b620..586be2d 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -57,6 +57,14 @@ static BOOL compare_vec3(const D3DXVECTOR3 *v1, const D3DXVECTOR3 *v2, unsigned && compare_float(v1->z, v2->z, ulps); } +static BOOL compare_vec4(const D3DXVECTOR4 *v1, const D3DXVECTOR4 *v2, unsigned int ulps) +{ + return compare_float(v1->x, v2->x, ulps) + && compare_float(v1->y, v2->y, ulps) + && compare_float(v1->z, v2->z, ulps) + && compare_float(v1->w, v2->w, ulps); +} + static BOOL compare_color(const D3DXCOLOR *c1, const D3DXCOLOR *c2, unsigned int ulps) { return compare_float(c1->r, c2->r, ulps) @@ -115,6 +123,15 @@ static void expect_vec3_(unsigned int line, const D3DXVECTOR3 *expected, const D vector->x, vector->y, vector->z, expected->x, expected->y, expected->z); } +#define expect_vec4(expected, vector, ulps) expect_vec4_(__LINE__, expected, vector, ulps) +static void expect_vec4_(unsigned int line, const D3DXVECTOR4 *expected, const D3DXVECTOR4 *vector, unsigned int ulps) +{ + BOOL equal = compare_vec4(expected, vector, ulps); + ok_(__FILE__, line)(equal, + "Got unexpected vector {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n", + vector->x, vector->y, vector->z, vector->w, expected->x, expected->y, expected->z, expected->w); +} + #define expect_color(expected, color, ulps) expect_color_(__LINE__, expected, color, ulps) static void expect_color_(unsigned int line, const D3DXCOLOR *expected, const D3DXCOLOR *color, unsigned int ulps) { @@ -212,9 +229,6 @@ static void expect_matrix_(unsigned int line, const D3DXMATRIX *expected, const i); \ } -#define expect_vec4(expectedvec,gotvec) ok((relative_error(expectedvec.x, gotvec.x)<admitted_error)&&(relative_error(expectedvec.y, gotvec.y)<admitted_error)&&(relative_error(expectedvec.z, gotvec.z)<admitted_error)&&(relative_error(expectedvec.w, gotvec.w)<admitted_error),"Expected Vector= (%f, %f, %f, %f)\n , Got Vector= (%f, %f, %f, %f)\n", expectedvec.x, expectedvec.y, expectedvec.z, expectedvec.w, gotvec.x, gotvec.y, gotvec.z, gotvec.w); - - static void D3DXColorTest(void) { D3DXCOLOR color, color1, color2, expected, got; @@ -1288,10 +1302,10 @@ static void D3DXVector2Test(void) /*_______________D3DXVec2Transform_______________________*/ expectedtrans.x = 36.0f; expectedtrans.y = 44.0f; expectedtrans.z = 52.0f; expectedtrans.w = 60.0f; D3DXVec2Transform(&gottrans, &u, &mat); - expect_vec4(expectedtrans, gottrans); + expect_vec4(&expectedtrans, &gottrans, 0); gottrans.x = u.x; gottrans.y = u.y; D3DXVec2Transform(&gottrans, (D3DXVECTOR2 *)&gottrans, &mat); - expect_vec4(expectedtrans, gottrans); + expect_vec4(&expectedtrans, &gottrans, 0); /*_______________D3DXVec2TransformCoord_______________________*/ expectedvec.x = 0.6f; expectedvec.y = 11.0f/15.0f; @@ -1475,11 +1489,11 @@ static void D3DXVector3Test(void) /*_______________D3DXVec3Transform_______________________*/ expectedtrans.x = 70.0f; expectedtrans.y = 88.0f; expectedtrans.z = 106.0f; expectedtrans.w = 124.0f; D3DXVec3Transform(&gottrans, &u, &mat); - expect_vec4(expectedtrans, gottrans); + expect_vec4(&expectedtrans, &gottrans, 0); gottrans.x = u.x; gottrans.y = u.y; gottrans.z = u.z; D3DXVec3Transform(&gottrans, (D3DXVECTOR3 *)&gottrans, &mat); - expect_vec4(expectedtrans, gottrans); + expect_vec4(&expectedtrans, &gottrans, 0); /*_______________D3DXVec3TransformCoord_______________________*/ expectedvec.x = 70.0f/124.0f; expectedvec.y = 88.0f/124.0f; expectedvec.z = 106.0f/124.0f; @@ -1568,7 +1582,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Add__________________________*/ expectedvec.x = -2.0f; expectedvec.y = 6.0f; expectedvec.z = -1.0f; expectedvec.w = 17.0f; D3DXVec4Add(&gotvec,&u,&v); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Add(&gotvec,NULL,&v); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1578,17 +1592,17 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4BaryCentric____________________*/ expectedvec.x = 8.0f; expectedvec.y = 26.0; expectedvec.z = -44.0f; expectedvec.w = -41.0f; D3DXVec4BaryCentric(&gotvec,&u,&v,&w,coeff1,coeff2); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /*_______________D3DXVec4CatmullRom____________________*/ expectedvec.x = 2754.625f; expectedvec.y = 2367.5625f; expectedvec.z = 1060.1875f; expectedvec.w = 131.3125f; D3DXVec4CatmullRom(&gotvec,&u,&v,&w,&x,scale); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /*_______________D3DXVec4Cross_________________________*/ expectedvec.x = 390.0f; expectedvec.y = -393.0f; expectedvec.z = -316.0f; expectedvec.w = 166.0f; D3DXVec4Cross(&gotvec,&u,&v,&w); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /*_______________D3DXVec4Dot__________________________*/ expected = 55.0f; @@ -1605,7 +1619,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Hermite_________________________*/ expectedvec.x = 1224.625f; expectedvec.y = 3461.625f; expectedvec.z = -4758.875f; expectedvec.w = -5781.5f; D3DXVec4Hermite(&gotvec,&u,&v,&w,&x,scale); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /*_______________D3DXVec4Length__________________________*/ expected = 11.0f; @@ -1628,7 +1642,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Lerp__________________________*/ expectedvec.x = 27.0f; expectedvec.y = -11.0f; expectedvec.z = 62.5; expectedvec.w = 29.5; D3DXVec4Lerp(&gotvec,&u,&v,scale); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Lerp(&gotvec,NULL,&v,scale); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1638,7 +1652,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Maximize__________________________*/ expectedvec.x = 1.0f; expectedvec.y = 4.0f; expectedvec.z = 4.0f; expectedvec.w = 10.0; D3DXVec4Maximize(&gotvec,&u,&v); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Maximize(&gotvec,NULL,&v); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1648,7 +1662,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Minimize__________________________*/ expectedvec.x = -3.0f; expectedvec.y = 2.0f; expectedvec.z = -5.0f; expectedvec.w = 7.0; D3DXVec4Minimize(&gotvec,&u,&v); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Minimize(&gotvec,NULL,&v); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1658,12 +1672,12 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Normalize_________________________*/ expectedvec.x = 1.0f/11.0f; expectedvec.y = 2.0f/11.0f; expectedvec.z = 4.0f/11.0f; expectedvec.w = 10.0f/11.0f; D3DXVec4Normalize(&gotvec,&u); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 1); /*_______________D3DXVec4Scale____________________________*/ expectedvec.x = -6.5f; expectedvec.y = -13.0f; expectedvec.z = -26.0f; expectedvec.w = -65.0f; D3DXVec4Scale(&gotvec,&u,scale); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Scale(&gotvec,NULL,scale); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1673,7 +1687,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Subtract__________________________*/ expectedvec.x = 4.0f; expectedvec.y = -2.0f; expectedvec.z = 9.0f; expectedvec.w = 3.0f; D3DXVec4Subtract(&gotvec,&u,&v); - expect_vec4(expectedvec,gotvec); + expect_vec4(&expectedvec, &gotvec, 0); /* Tests the case NULL */ funcpointer = D3DXVec4Subtract(&gotvec,NULL,&v); ok(funcpointer == NULL, "Expected: %p, Got: %p\n", NULL, funcpointer); @@ -1683,7 +1697,7 @@ static void D3DXVector4Test(void) /*_______________D3DXVec4Transform_______________________*/ expectedtrans.x = 177.0f; expectedtrans.y = 194.0f; expectedtrans.z = 211.0f; expectedtrans.w = 228.0f; D3DXVec4Transform(&gottrans,&u,&mat); - expect_vec4(expectedtrans,gottrans); + expect_vec4(&expectedtrans, &gottrans, 0); } static void test_matrix_stack(void)
1
0
0
0
Henri Verbeet : d3dx9/tests: Cleanup expect_vec3.
by Alexandre Julliard
26 Apr '17
26 Apr '17
Module: wine Branch: master Commit: 398e701deb117b8a118b93a97a22df71cb813cb0 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=398e701deb117b8a118b93a97…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Wed Apr 26 20:23:19 2017 +0200 d3dx9/tests: Cleanup expect_vec3. Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3dx9_36/tests/math.c | 83 +++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 35 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=398e701deb117b8a118b9…
1
0
0
0
← Newer
1
...
5
6
7
8
9
10
11
...
76
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Results per page:
10
25
50
100
200