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 2020
----- 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
1016 discussions
Start a n
N
ew thread
Alexandre Julliard : ntdll: Avoid using wine_dll_enum_load_path() from libwine.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: ba1495f7c2c3cff3db9ce99600bfc8ddfa365387 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=ba1495f7c2c3cff3db9ce996…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Apr 27 12:35:39 2020 +0200 ntdll: Avoid using wine_dll_enum_load_path() from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/env.c | 5 ++--- dlls/ntdll/loader.c | 8 +++----- dlls/ntdll/ntdll_misc.h | 2 ++ dlls/ntdll/server.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index eabebbcc28..71ae48681d 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -38,7 +38,6 @@ #define WIN32_NO_STATUS #include "windef.h" #include "winternl.h" -#include "wine/library.h" #include "wine/debug.h" #include "ntdll_misc.h" #include "winnt.h" @@ -412,10 +411,10 @@ static void set_wow64_environment( WCHAR **env ) set_wine_path_variable( env, winehomedirW, home ); set_wine_path_variable( env, winebuilddirW, build_dir ); set_wine_path_variable( env, wineconfigdirW, config_dir ); - for (i = 0; (p = wine_dll_enum_load_path( i )); i++) + for (i = 0; dll_paths[i]; i++) { NTDLL_swprintf( buf, winedlldirW, i ); - set_wine_path_variable( env, buf, p ); + set_wine_path_variable( env, buf, dll_paths[i] ); } NTDLL_swprintf( buf, winedlldirW, i ); set_wine_path_variable( env, buf, NULL ); diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 4d69e33b09..5ae6b11e00 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2715,7 +2715,6 @@ static NTSTATUS find_builtin_dll( const WCHAR *name, WINE_MODREF **pwm, void **module, pe_image_info_t *image_info, struct stat *st, char **so_name ) { - const char *path; unsigned int i, pos, len, namelen, maxlen = 0; char *ptr, *file; NTSTATUS status = STATUS_DLL_NOT_FOUND; @@ -2723,8 +2722,7 @@ static NTSTATUS find_builtin_dll( const WCHAR *name, WINE_MODREF **pwm, len = wcslen( name ); if (build_dir) maxlen = strlen(build_dir) + sizeof("/programs/") + len; - for (i = 0; (path = wine_dll_enum_load_path( i )); i++) maxlen = max( maxlen, strlen(path)+1 ); - maxlen += len + sizeof(".so"); + maxlen = max( maxlen, dll_path_maxlen ) + len + sizeof(".so"); if (!(file = RtlAllocateHeap( GetProcessHeap(), 0, maxlen ))) return STATUS_NO_MEMORY; @@ -2763,10 +2761,10 @@ static NTSTATUS find_builtin_dll( const WCHAR *name, WINE_MODREF **pwm, if (status != STATUS_DLL_NOT_FOUND) goto done; } - for (i = 0; (path = wine_dll_enum_load_path( i )); i++) + for (i = 0; dll_paths[i]; i++) { file[pos + len + 1] = 0; - ptr = prepend( file + pos, path, strlen(path) ); + ptr = prepend( file + pos, dll_paths[i], strlen(dll_paths[i]) ); status = open_builtin_file( ptr, pwm, module, image_info, st, so_name ); if (status == STATUS_IMAGE_MACHINE_TYPE_MISMATCH) found_image = TRUE; else if (status != STATUS_DLL_NOT_FOUND) goto done; diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index fc12bf47ef..2e26d189a1 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -108,6 +108,8 @@ extern WCHAR **__wine_main_wargv; extern const char *build_dir DECLSPEC_HIDDEN; extern const char *data_dir DECLSPEC_HIDDEN; extern const char *config_dir DECLSPEC_HIDDEN; +extern const char **dll_paths DECLSPEC_HIDDEN; +extern size_t dll_path_maxlen DECLSPEC_HIDDEN; extern timeout_t server_start_time DECLSPEC_HIDDEN; extern unsigned int server_cpus DECLSPEC_HIDDEN; extern BOOL is_wow64 DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index 429a41c397..bc25e242a7 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -116,6 +116,8 @@ static const enum cpu_type client_cpu = CPU_ARM64; const char *build_dir = NULL; const char *data_dir = NULL; const char *config_dir = NULL; +const char **dll_paths = NULL; +size_t dll_path_maxlen = 0; static const char *server_dir; static const char *bin_dir; @@ -1311,6 +1313,36 @@ static const char *init_config_dir(void) } +/*********************************************************************** + * build_dll_path + */ +static void build_dll_path( const char *dll_dir ) +{ + const char *default_dlldir = DLLDIR; + char *p, *path = getenv( "WINEDLLPATH" ); + int i, count = 0; + + if (path) for (p = path, count = 1; *p; p++) if (*p == ':') count++; + + dll_paths = malloc( (count + 2) * sizeof(*dll_paths) ); + count = 0; + + if (!build_dir && dll_dir) dll_paths[count++] = dll_dir; + + if (path) + { + path = strdup(path); + for (p = strtok( path, ":" ); p; p = strtok( NULL, ":" )) dll_paths[count++] = strdup( p ); + free( path ); + } + + if (!build_dir && !dll_dir) dll_paths[count++] = default_dlldir; + + for (i = 0; i < count; i++) dll_path_maxlen = max( dll_path_maxlen, strlen(dll_paths[i]) ); + dll_paths[count] = NULL; +} + + /*********************************************************************** * init_paths */ @@ -1343,6 +1375,7 @@ void init_paths(void) data_dir = build_path( bin_dir, BIN_TO_DATADIR ); } + build_dll_path( dll_dir ); config_dir = init_config_dir(); }
1
0
0
0
Alexandre Julliard : ntdll: Avoid using wine_get_build/data_dir() from libwine.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: 3e0c90e4c700d79124c6a7a14050799baa531879 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3e0c90e4c700d79124c6a7a1…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Apr 27 12:35:19 2020 +0200 ntdll: Avoid using wine_get_build/data_dir() from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/Makefile.in | 7 +++++ dlls/ntdll/env.c | 4 +-- dlls/ntdll/loader.c | 2 +- dlls/ntdll/locale.c | 3 --- dlls/ntdll/ntdll_misc.h | 3 +++ dlls/ntdll/process.c | 2 +- dlls/ntdll/server.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++-- dlls/ntdll/thread.c | 1 + 8 files changed, 83 insertions(+), 9 deletions(-) diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in index a67809a6c2..7971ef98cf 100644 --- a/dlls/ntdll/Makefile.in +++ b/dlls/ntdll/Makefile.in @@ -56,3 +56,10 @@ C_SRCS = \ wcstring.c RC_SRCS = version.rc + +server_EXTRADEFS = \ + -DBINDIR=\"${bindir}\" \ + -DDLLDIR=\"${dlldir}\" \ + -DBIN_TO_DLLDIR=\"`$(MAKEDEP) -R ${bindir} ${dlldir}`\" \ + -DDLL_TO_BINDIR=\"`$(MAKEDEP) -R ${dlldir} ${bindir}`\" \ + -DBIN_TO_DATADIR=\"`$(MAKEDEP) -R ${bindir} ${datadir}/wine`\" diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index ff0c8fbe90..eabebbcc28 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -408,9 +408,9 @@ static void set_wow64_environment( WCHAR **env ) /* set the Wine paths */ - set_wine_path_variable( env, winedatadirW, wine_get_data_dir() ); + set_wine_path_variable( env, winedatadirW, data_dir ); set_wine_path_variable( env, winehomedirW, home ); - set_wine_path_variable( env, winebuilddirW, wine_get_build_dir() ); + set_wine_path_variable( env, winebuilddirW, build_dir ); set_wine_path_variable( env, wineconfigdirW, config_dir ); for (i = 0; (p = wine_dll_enum_load_path( i )); i++) { diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 38c893e3eb..4d69e33b09 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2715,7 +2715,7 @@ static NTSTATUS find_builtin_dll( const WCHAR *name, WINE_MODREF **pwm, void **module, pe_image_info_t *image_info, struct stat *st, char **so_name ) { - const char *path, *build_dir = wine_get_build_dir(); + const char *path; unsigned int i, pos, len, namelen, maxlen = 0; char *ptr, *file; NTSTATUS status = STATUS_DLL_NOT_FOUND; diff --git a/dlls/ntdll/locale.c b/dlls/ntdll/locale.c index a28f5d0f58..0d0c1194d2 100644 --- a/dlls/ntdll/locale.c +++ b/dlls/ntdll/locale.c @@ -39,7 +39,6 @@ #include "winbase.h" #include "winnls.h" #include "ntdll_misc.h" -#include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(nls); @@ -758,8 +757,6 @@ static const struct { const char *name; UINT cp; } charset_names[] = static void load_unix_cptable( unsigned int cp ) { - const char *build_dir = wine_get_build_dir(); - const char *data_dir = wine_get_data_dir(); const char *dir = build_dir ? build_dir : data_dir; struct stat st; char *name; diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index 11ff0d7bb3..fc12bf47ef 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -96,6 +96,7 @@ extern void heap_set_debug_flags( HANDLE handle ) DECLSPEC_HIDDEN; extern void init_unix_codepage(void) DECLSPEC_HIDDEN; extern void init_locale( HMODULE module ) DECLSPEC_HIDDEN; extern void init_user_process_params( SIZE_T data_size ) DECLSPEC_HIDDEN; +extern void init_paths(void) DECLSPEC_HIDDEN; extern char **build_envp( const WCHAR *envW ) DECLSPEC_HIDDEN; extern NTSTATUS restart_process( RTL_USER_PROCESS_PARAMETERS *params, NTSTATUS status ) DECLSPEC_HIDDEN; @@ -104,6 +105,8 @@ extern char **__wine_main_argv; extern WCHAR **__wine_main_wargv; /* server support */ +extern const char *build_dir DECLSPEC_HIDDEN; +extern const char *data_dir DECLSPEC_HIDDEN; extern const char *config_dir DECLSPEC_HIDDEN; extern timeout_t server_start_time DECLSPEC_HIDDEN; extern unsigned int server_cpus DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index 28aa671f47..d2a3421ac5 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -1008,7 +1008,7 @@ static const char *get_alternate_loader( char **ret_env ) *ret_env = NULL; - if (wine_get_build_dir()) loader = is_win64 ? "loader/wine" : "loader/wine64"; + if (build_dir) loader = is_win64 ? "loader/wine" : "loader/wine64"; if (loader_env) { diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index d15ece3f4e..429a41c397 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -113,8 +113,11 @@ static const enum cpu_type client_cpu = CPU_ARM64; #error Unsupported CPU #endif +const char *build_dir = NULL; +const char *data_dir = NULL; const char *config_dir = NULL; static const char *server_dir; +static const char *bin_dir; unsigned int server_cpus = 0; BOOL is_wow64 = FALSE; @@ -177,6 +180,35 @@ static void fatal_perror( const char *err, ... ) exit(1); } +/* canonicalize path and return its directory name */ +static char *realpath_dirname( const char *name ) +{ + char *p, *fullpath = realpath( name, NULL ); + + if (fullpath) + { + p = strrchr( fullpath, '/' ); + if (p == fullpath) p++; + if (p) *p = 0; + } + return fullpath; +} + +/* if string ends with tail, remove it */ +static char *remove_tail( const char *str, const char *tail ) +{ + size_t len = strlen( str ); + size_t tail_len = strlen( tail ); + char *ret; + + if (len < tail_len) return NULL; + if (strcmp( str + len - tail_len, tail )) return NULL; + ret = malloc( len - tail_len + 1 ); + memcpy( ret, str, len - tail_len ); + ret[len - tail_len] = 0; + return ret; +} + /* build a path from the specified dir and name */ static char *build_path( const char *dir, const char *name ) { @@ -1279,6 +1311,42 @@ static const char *init_config_dir(void) } +/*********************************************************************** + * init_paths + */ +void init_paths(void) +{ + const char *dll_dir = NULL; + +#ifdef HAVE_DLADDR + Dl_info info; + + if (dladdr( init_paths, &info ) && info.dli_fname[0] == '/') + dll_dir = realpath_dirname( info.dli_fname ); +#endif + +#if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) + bin_dir = realpath_dirname( "/proc/self/exe" ); +#elif defined (__FreeBSD__) || defined(__DragonFly__) + bin_dir = realpath_dirname( "/proc/curproc/file" ); +#else + bin_dir = realpath_dirname( __wine_main_argv[0] ); +#endif + + if (dll_dir) build_dir = remove_tail( dll_dir, "/dlls/ntdll" ); + else if (bin_dir) build_dir = remove_tail( bin_dir, "/loader" ); + + if (!build_dir) + { + if (!bin_dir) bin_dir = dll_dir ? build_path( dll_dir, DLL_TO_BINDIR ) : BINDIR; + else if (!dll_dir) dll_dir = build_path( bin_dir, BIN_TO_DLLDIR ); + data_dir = build_path( bin_dir, BIN_TO_DATADIR ); + } + + config_dir = init_config_dir(); +} + + /*********************************************************************** * setup_config_dir * @@ -1524,8 +1592,6 @@ void server_init_process(void) obj_handle_t version; const char *env_socket = getenv( "WINESERVERSOCKET" ); - config_dir = init_config_dir(); - server_pid = -1; if (env_socket) { diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index e27b3a0c6d..73b5c9ebca 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -299,6 +299,7 @@ TEB *thread_init(void) signal_init_thread( teb ); virtual_init_threading(); debug_init(); + init_paths(); set_process_name( __wine_main_argc, __wine_main_argv ); /* initialize time values in user_shared_data */
1
0
0
0
Alexandre Julliard : ntdll: Avoid using wine_get_user_name() from libwine.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: 9122bc1096f3231c5f6b8ffc0d7ad3e700f18af1 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=9122bc1096f3231c5f6b8ffc…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Apr 27 12:34:45 2020 +0200 ntdll: Avoid using wine_get_user_name() from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/env.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index efb5270a2c..ff0c8fbe90 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -27,6 +27,9 @@ #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif +#ifdef HAVE_PWD_H +# include <pwd.h> +#endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif @@ -386,15 +389,27 @@ static void set_wow64_environment( WCHAR **env ) UNICODE_STRING valW = { 0, sizeof(buf), buf }; OBJECT_ATTRIBUTES attr; UNICODE_STRING nameW; - const char *p, *name; + const char *p; + const char *home = getenv( "HOME" ); + const char *name = getenv( "USER" ); WCHAR *val; HANDLE hkey; DWORD i; + if (!home || !name) + { + struct passwd *pwd = getpwuid( getuid() ); + if (pwd) + { + if (!home) home = pwd->pw_dir; + if (!name) name = pwd->pw_name; + } + } + /* set the Wine paths */ set_wine_path_variable( env, winedatadirW, wine_get_data_dir() ); - set_wine_path_variable( env, winehomedirW, getenv("HOME") ); + set_wine_path_variable( env, winehomedirW, home ); set_wine_path_variable( env, winebuilddirW, wine_get_build_dir() ); set_wine_path_variable( env, wineconfigdirW, config_dir ); for (i = 0; (p = wine_dll_enum_load_path( i )); i++) @@ -407,7 +422,7 @@ static void set_wow64_environment( WCHAR **env ) /* set user name */ - name = wine_get_user_name(); + if (!name) name = "wine"; if ((p = strrchr( name, '/' ))) name = p + 1; if ((p = strrchr( name, '\\' ))) name = p + 1; ntdll_umbstowcs( name, strlen(name) + 1, buf, ARRAY_SIZE(buf) );
1
0
0
0
Alexandre Julliard : ntdll: Avoid using wine_get_server_dir() from libwine.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: 73211637c15b1dbd298364b5dd22161ce55f8145 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=73211637c15b1dbd298364b5…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Apr 27 12:34:30 2020 +0200 ntdll: Avoid using wine_get_server_dir() from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/server.c | 59 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index 4beee9e6e1..d15ece3f4e 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -114,6 +114,7 @@ static const enum cpu_type client_cpu = CPU_ARM64; #endif const char *config_dir = NULL; +static const char *server_dir; unsigned int server_cpus = 0; BOOL is_wow64 = FALSE; @@ -1215,6 +1216,38 @@ static void start_server(void) } +/*********************************************************************** + * init_server_dir + */ +static const char *init_server_dir( dev_t dev, ino_t ino ) +{ + char *p, *dir; + size_t len = sizeof("/server-") + 2 * sizeof(dev) + 2 * sizeof(ino) + 2; + +#ifdef __ANDROID__ /* there's no /tmp dir on Android */ + len += strlen( config_dir ) + sizeof("/.wineserver"); + dir = malloc( len ); + strcpy( dir, config_dir ); + strcat( dir, "/.wineserver/server-" ); +#else + len += sizeof("/tmp/.wine-") + 12; + dir = malloc( len ); + sprintf( dir, "/tmp/.wine-%u/server-", getuid() ); +#endif + p = dir + strlen( dir ); + if (dev != (unsigned long)dev) + p += sprintf( p, "%lx%08lx-", (unsigned long)((unsigned long long)dev >> 32), (unsigned long)dev ); + else + p += sprintf( p, "%lx-", (unsigned long)dev ); + + if (ino != (unsigned long)ino) + sprintf( p, "%lx%08lx", (unsigned long)((unsigned long long)ino >> 32), (unsigned long)ino ); + else + sprintf( p, "%lx", (unsigned long)ino ); + return dir; +} + + /*********************************************************************** * init_config_dir */ @@ -1277,6 +1310,8 @@ static int setup_config_dir(void) if (stat( ".", &st ) == -1) fatal_perror( "stat %s", config_dir ); if (st.st_uid != getuid()) fatal_error( "'%s' is not owned by you\n", config_dir ); + server_dir = init_server_dir( st.st_dev, st.st_ino ); + if (!mkdir( "dosdevices", 0777 )) { mkdir( "drive_c", 0777 ); @@ -1332,26 +1367,24 @@ static void server_connect_error( const char *serverdir ) */ static int server_connect(void) { - const char *serverdir; struct sockaddr_un addr; struct stat st; int s, slen, retry, fd_cwd; fd_cwd = setup_config_dir(); - serverdir = wine_get_server_dir(); /* chdir to the server directory */ - if (chdir( serverdir ) == -1) + if (chdir( server_dir ) == -1) { - if (errno != ENOENT) fatal_perror( "chdir to %s", serverdir ); + if (errno != ENOENT) fatal_perror( "chdir to %s", server_dir ); start_server(); - if (chdir( serverdir ) == -1) fatal_perror( "chdir to %s", serverdir ); + if (chdir( server_dir ) == -1) fatal_perror( "chdir to %s", server_dir ); } /* make sure we are at the right place */ - if (stat( ".", &st ) == -1) fatal_perror( "stat %s", serverdir ); - if (st.st_uid != getuid()) fatal_error( "'%s' is not owned by you\n", serverdir ); - if (st.st_mode & 077) fatal_error( "'%s' must not be accessible by other users\n", serverdir ); + if (stat( ".", &st ) == -1) fatal_perror( "stat %s", server_dir ); + if (st.st_uid != getuid()) fatal_error( "'%s' is not owned by you\n", server_dir ); + if (st.st_mode & 077) fatal_error( "'%s' must not be accessible by other users\n", server_dir ); for (retry = 0; retry < 6; retry++) { @@ -1364,16 +1397,16 @@ static int server_connect(void) } else if (lstat( SOCKETNAME, &st ) == -1) /* check for an already existing socket */ { - if (errno != ENOENT) fatal_perror( "lstat %s/%s", serverdir, SOCKETNAME ); + if (errno != ENOENT) fatal_perror( "lstat %s/%s", server_dir, SOCKETNAME ); start_server(); if (lstat( SOCKETNAME, &st ) == -1) continue; /* still no socket, wait a bit more */ } /* make sure the socket is sane (ISFIFO needed for Solaris) */ if (!S_ISSOCK(st.st_mode) && !S_ISFIFO(st.st_mode)) - fatal_error( "'%s/%s' is not a socket\n", serverdir, SOCKETNAME ); + fatal_error( "'%s/%s' is not a socket\n", server_dir, SOCKETNAME ); if (st.st_uid != getuid()) - fatal_error( "'%s/%s' is not owned by you\n", serverdir, SOCKETNAME ); + fatal_error( "'%s/%s' is not owned by you\n", server_dir, SOCKETNAME ); /* try to connect to it */ addr.sun_family = AF_UNIX; @@ -1403,7 +1436,7 @@ static int server_connect(void) } close( s ); } - server_connect_error( serverdir ); + server_connect_error( server_dir ); } @@ -1426,7 +1459,7 @@ static void send_server_task_port(void) if (task_get_bootstrap_port(mach_task_self(), &bootstrap_port) != KERN_SUCCESS) return; - kret = bootstrap_look_up(bootstrap_port, (char*)wine_get_server_dir(), &wineserver_port); + kret = bootstrap_look_up(bootstrap_port, server_dir, &wineserver_port); if (kret != KERN_SUCCESS) fatal_error( "cannot find the server port: 0x%08x\n", kret );
1
0
0
0
Alexandre Julliard : ntdll: Avoid using wine_get_config_dir() from libwine.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: e5030a4ac0a303d6788ae79ffdcd88e66cf78bd2 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e5030a4ac0a303d6788ae79f…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Apr 27 12:34:07 2020 +0200 ntdll: Avoid using wine_get_config_dir() from libwine. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/directory.c | 7 +--- dlls/ntdll/env.c | 2 +- dlls/ntdll/ntdll_misc.h | 1 + dlls/ntdll/server.c | 101 +++++++++++++++++++++++++++++++++--------------- 4 files changed, 72 insertions(+), 39 deletions(-) diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c index b8cfe507ed..1adc0c9b0d 100644 --- a/dlls/ntdll/directory.c +++ b/dlls/ntdll/directory.c @@ -106,7 +106,6 @@ #include "ntdll_misc.h" #include "wine/server.h" #include "wine/list.h" -#include "wine/library.h" #include "wine/debug.h" #include "wine/exception.h" @@ -564,7 +563,6 @@ unsigned int DIR_get_drives_info( struct drive_info info[MAX_DOS_DRIVES] ) RtlEnterCriticalSection( &dir_section ); if (now != last_update) { - const char *config_dir = wine_get_config_dir(); char *buffer, *p; struct stat st; unsigned int i; @@ -1261,7 +1259,7 @@ static DWORD WINAPI init_options( RTL_RUN_ONCE *once, void *param, void **contex NtClose( root ); /* a couple of directories that we don't want to return in directory searches */ - ignore_file( wine_get_config_dir() ); + ignore_file( config_dir ); ignore_file( "/dev" ); ignore_file( "/proc" ); #ifdef linux @@ -2219,7 +2217,6 @@ static unsigned int nb_redirects; static void init_redirects(void) { static const char windows_dir[] = "/dosdevices/c:/windows"; - const char *config_dir = wine_get_config_dir(); char *dir; struct stat st; @@ -2322,7 +2319,6 @@ void init_directories(void) */ static NTSTATUS get_dos_device( const WCHAR *name, UINT name_len, ANSI_STRING *unix_name_ret ) { - const char *config_dir = wine_get_config_dir(); struct stat st; char *unix_name, *new_name, *dev; unsigned int i; @@ -2747,7 +2743,6 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRI static const WCHAR invalid_charsW[] = { INVALID_NT_CHARS, 0 }; NTSTATUS status = STATUS_SUCCESS; - const char *config_dir = wine_get_config_dir(); const WCHAR *name, *p; struct stat st; char *unix_name; diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index 6670786def..efb5270a2c 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -396,7 +396,7 @@ static void set_wow64_environment( WCHAR **env ) set_wine_path_variable( env, winedatadirW, wine_get_data_dir() ); set_wine_path_variable( env, winehomedirW, getenv("HOME") ); set_wine_path_variable( env, winebuilddirW, wine_get_build_dir() ); - set_wine_path_variable( env, wineconfigdirW, wine_get_config_dir() ); + set_wine_path_variable( env, wineconfigdirW, config_dir ); for (i = 0; (p = wine_dll_enum_load_path( i )); i++) { NTDLL_swprintf( buf, winedlldirW, i ); diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index 7dca506aad..11ff0d7bb3 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -104,6 +104,7 @@ extern char **__wine_main_argv; extern WCHAR **__wine_main_wargv; /* server support */ +extern const char *config_dir DECLSPEC_HIDDEN; extern timeout_t server_start_time DECLSPEC_HIDDEN; extern unsigned int server_cpus DECLSPEC_HIDDEN; extern BOOL is_wow64 DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index c0dd0f35fc..4beee9e6e1 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -34,6 +34,9 @@ #ifdef HAVE_PTHREAD_NP_H # include <pthread_np.h> #endif +#ifdef HAVE_PWD_H +# include <pwd.h> +#endif #include <signal.h> #include <stdarg.h> #include <stdio.h> @@ -110,6 +113,8 @@ static const enum cpu_type client_cpu = CPU_ARM64; #error Unsupported CPU #endif +const char *config_dir = NULL; + unsigned int server_cpus = 0; BOOL is_wow64 = FALSE; @@ -171,6 +176,17 @@ static void fatal_perror( const char *err, ... ) exit(1); } +/* build a path from the specified dir and name */ +static char *build_path( const char *dir, const char *name ) +{ + size_t len = strlen( dir ); + char *ret = malloc( len + strlen( name ) + 2 ); + + memcpy( ret, dir, len ); + if (len && ret[len - 1] != '/') ret[len++] = '/'; + strcpy( ret + len, name ); + return ret; +} /*********************************************************************** * server_protocol_error @@ -1199,6 +1215,37 @@ static void start_server(void) } +/*********************************************************************** + * init_config_dir + */ +static const char *init_config_dir(void) +{ + char *p, *dir; + const char *prefix = getenv( "WINEPREFIX" ); + + if (prefix) + { + if (prefix[0] != '/') + fatal_error( "invalid directory %s in WINEPREFIX: not an absolute path\n", prefix ); + dir = strdup( prefix ); + for (p = dir + strlen(dir) - 1; p > dir && *p == '/'; p--) *p = 0; + } + else + { + const char *home = getenv( "HOME" ); + if (!home) + { + struct passwd *pwd = getpwuid( getuid() ); + if (pwd) home = pwd->pw_dir; + } + if (!home) fatal_error( "could not determine your home directory\n" ); + if (home[0] != '/') fatal_error( "your home directory %s is not an absolute path\n", home ); + dir = build_path( home, ".wine" ); + } + return dir; +} + + /*********************************************************************** * setup_config_dir * @@ -1206,46 +1253,38 @@ static void start_server(void) */ static int setup_config_dir(void) { - const char *p, *config_dir = wine_get_config_dir(); + char *p; + struct stat st; int fd_cwd = open( ".", O_RDONLY ); if (chdir( config_dir ) == -1) { - if (errno != ENOENT) fatal_perror( "chdir to %s", config_dir ); - + if (errno != ENOENT) fatal_perror( "cannot use directory %s", config_dir ); if ((p = strrchr( config_dir, '/' )) && p != config_dir) { - struct stat st; - char *tmp_dir; - - if (!(tmp_dir = malloc( p + 1 - config_dir ))) fatal_error( "out of memory\n" ); - memcpy( tmp_dir, config_dir, p - config_dir ); - tmp_dir[p - config_dir] = 0; - if (!stat( tmp_dir, &st ) && st.st_uid != getuid()) + while (p > config_dir + 1 && p[-1] == '/') p--; + *p = 0; + if (!stat( config_dir, &st ) && st.st_uid != getuid()) fatal_error( "'%s' is not owned by you, refusing to create a configuration directory there\n", - tmp_dir ); - free( tmp_dir ); + config_dir ); + *p = '/'; } - mkdir( config_dir, 0777 ); if (chdir( config_dir ) == -1) fatal_perror( "chdir to %s", config_dir ); - MESSAGE( "wine: created the configuration directory '%s'\n", config_dir ); } - if (mkdir( "dosdevices", 0777 ) == -1) + if (stat( ".", &st ) == -1) fatal_perror( "stat %s", config_dir ); + if (st.st_uid != getuid()) fatal_error( "'%s' is not owned by you\n", config_dir ); + + if (!mkdir( "dosdevices", 0777 )) { - if (errno == EEXIST) goto done; - fatal_perror( "cannot create %s/dosdevices", config_dir ); + mkdir( "drive_c", 0777 ); + symlink( "../drive_c", "dosdevices/c:" ); + symlink( "/", "dosdevices/z:" ); } + else if (errno != EEXIST) fatal_perror( "cannot create %s/dosdevices", config_dir ); - /* create the drive symlinks */ - - mkdir( "drive_c", 0777 ); - symlink( "../drive_c", "dosdevices/c:" ); - symlink( "/", "dosdevices/z:" ); - -done: if (fd_cwd == -1) fd_cwd = open( "dosdevices/c:", O_RDONLY ); fcntl( fd_cwd, F_SETFD, FD_CLOEXEC ); return fd_cwd; @@ -1452,6 +1491,8 @@ void server_init_process(void) obj_handle_t version; const char *env_socket = getenv( "WINESERVERSOCKET" ); + config_dir = init_config_dir(); + server_pid = -1; if (env_socket) { @@ -1610,19 +1651,15 @@ size_t server_init_thread( void *entry_point, BOOL *suspend ) if (arch) { if (!strcmp( arch, "win32" ) && (is_win64 || is_wow64)) - fatal_error( "WINEARCH set to win32 but '%s' is a 64-bit installation.\n", - wine_get_config_dir() ); + fatal_error( "WINEARCH set to win32 but '%s' is a 64-bit installation.\n", config_dir ); if (!strcmp( arch, "win64" ) && !is_win64 && !is_wow64) - fatal_error( "WINEARCH set to win64 but '%s' is a 32-bit installation.\n", - wine_get_config_dir() ); + fatal_error( "WINEARCH set to win64 but '%s' is a 32-bit installation.\n", config_dir ); } return info_size; case STATUS_INVALID_IMAGE_WIN_64: - fatal_error( "'%s' is a 32-bit installation, it cannot support 64-bit applications.\n", - wine_get_config_dir() ); + fatal_error( "'%s' is a 32-bit installation, it cannot support 64-bit applications.\n", config_dir ); case STATUS_NOT_SUPPORTED: - fatal_error( "'%s' is a 64-bit installation, it cannot be used with a 32-bit wineserver.\n", - wine_get_config_dir() ); + fatal_error( "'%s' is a 64-bit installation, it cannot be used with a 32-bit wineserver.\n", config_dir ); case STATUS_INVALID_IMAGE_FORMAT: fatal_error( "wineserver doesn't support the %s architecture\n", cpu_names[client_cpu] ); default:
1
0
0
0
Zebediah Figura : sechost: New stub DLL.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: dedd5ccc88547529ffb1101045602aed59fa0170 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=dedd5ccc88547529ffb11010…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Sat Apr 25 15:40:23 2020 -0500 sechost: New stub DLL. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- configure | 2 + configure.ac | 1 + dlls/sechost/Makefile.in | 3 + dlls/sechost/sechost.spec | 208 ++++++++++++++++++++++++++++++++++++++++++++++ tools/make_specfiles | 1 + 5 files changed, 215 insertions(+) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=dedd5ccc88547529ffb1…
1
0
0
0
Jacek Caban : math.h: Use builtin nan and inf on clang MSVC target.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: 8941d8e0363167b0eb555b215d8b96e4a1add98f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8941d8e0363167b0eb555b21…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Apr 27 01:19:28 2020 +0200 math.h: Use builtin nan and inf on clang MSVC target. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/msvcrt/math.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/msvcrt/math.h b/include/msvcrt/math.h index 76601de853..01c4a4b61b 100644 --- a/include/msvcrt/math.h +++ b/include/msvcrt/math.h @@ -205,7 +205,7 @@ static const union { # endif #endif -#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) +#if (defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))) || defined(__clang__) # define INFINITY __builtin_inff() # define NAN __builtin_nanf("") #else
1
0
0
0
Jacek Caban : include: Improve _CrtDbgBreak macro.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: b00a6e6e304f9535f4c88cd23b627d2108cd7cf4 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b00a6e6e304f9535f4c88cd2…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Apr 27 04:25:22 2020 +0200 include: Improve _CrtDbgBreak macro. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/msvcrt/crtdbg.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/msvcrt/crtdbg.h b/include/msvcrt/crtdbg.h index 2a75dfd57e..6a7dab0185 100644 --- a/include/msvcrt/crtdbg.h +++ b/include/msvcrt/crtdbg.h @@ -70,7 +70,9 @@ typedef struct _CrtMemState #include <assert.h> #define _ASSERT(expr) assert(expr) #define _ASSERTE(expr) assert(expr) -#if defined(__GNUC__) && defined(__i386__) +#if defined(_MSC_VER) +#define _CrtDbgBreak() __debugbreak() +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #define _CrtDbgBreak() __asm__ ("\tint $0x3\n") #else #define _CrtDbgBreak() ((void)0)
1
0
0
0
Jacek Caban : wincon.h: Don't use calling convention wrappers on MSVC.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: b7ce75e9896a38af5579524adaba8b9952d60221 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b7ce75e9896a38af5579524a…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Apr 27 01:19:00 2020 +0200 wincon.h: Don't use calling convention wrappers on MSVC. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/console.c | 2 +- dlls/kernelbase/console.c | 2 +- include/wincon.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c index 472d513990..99734cedf6 100644 --- a/dlls/kernel32/console.c +++ b/dlls/kernel32/console.c @@ -1802,7 +1802,7 @@ static COORD get_console_font_size(HANDLE hConsole, DWORD index) return c; } -#if defined(__i386__) && !defined(__MINGW32__) +#if defined(__i386__) && !defined(__MINGW32__) && !defined(_MSC_VER) #undef GetConsoleFontSize DWORD WINAPI GetConsoleFontSize(HANDLE hConsole, DWORD index) { diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 347f1d2a63..7dabc91e67 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -577,7 +577,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleW( LPWSTR title, DWORD size ) /*********************************************************************** * GetLargestConsoleWindowSize (kernelbase.@) */ -#if defined(__i386__) && !defined(__MINGW32__) +#if defined(__i386__) && !defined(__MINGW32__) && !defined(_MSC_VER) #undef GetLargestConsoleWindowSize DWORD WINAPI DECLSPEC_HOTPATCH GetLargestConsoleWindowSize( HANDLE handle ) { diff --git a/include/wincon.h b/include/wincon.h index ececc66220..9f4ccced11 100644 --- a/include/wincon.h +++ b/include/wincon.h @@ -268,7 +268,7 @@ typedef struct tagINPUT_RECORD #define CONSOLE_TEXTMODE_BUFFER 1 -#if defined(__i386__) && !defined(__MINGW32__) +#if defined(__i386__) && !defined(__MINGW32__) && !defined(_MSC_VER) /* Note: this should return a COORD, but calling convention for returning * structures is different between Windows and gcc on i386. */
1
0
0
0
Jacek Caban : wine/exception.h: Don't override __attribute__ keyword on clang MSVC target.
by Alexandre Julliard
27 Apr '20
27 Apr '20
Module: wine Branch: master Commit: 59336f2ff2a36003e2b4bdc3dfe7e35ca012e7a2 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=59336f2ff2a36003e2b4bdc3…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Apr 27 01:18:50 2020 +0200 wine/exception.h: Don't override __attribute__ keyword on clang MSVC target. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/wine/exception.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/wine/exception.h b/include/wine/exception.h index 4bf4c7e6d9..a6ada7af21 100644 --- a/include/wine/exception.h +++ b/include/wine/exception.h @@ -70,7 +70,7 @@ extern "C" { * -- AJ */ -#ifndef __GNUC__ +#if !defined(__GNUC__) && !defined(__clang__) #define __attribute__(x) /* nothing */ #endif
1
0
0
0
← Newer
1
...
10
11
12
13
14
15
16
...
102
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Results per page:
10
25
50
100
200