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
October 2009
----- 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
3 participants
1207 discussions
Start a n
N
ew thread
Matteo Bruni : wpp: Add error management callbacks.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 29af4f9fa833a1f73f50bf68a3b5c02759a85464 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=29af4f9fa833a1f73f50bf68a…
Author: Matteo Bruni <matteo.mystral(a)gmail.com> Date: Tue Sep 29 12:34:17 2009 +0200 wpp: Add error management callbacks. --- include/wine/wpp.h | 9 +++++++++ libs/wpp/preproc.c | 25 ++++++++++++++++++++++--- libs/wpp/wpp.c | 5 +++++ libs/wpp/wpp_private.h | 2 ++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/include/wine/wpp.h b/include/wine/wpp.h index 86575b1..dd341bd 100644 --- a/include/wine/wpp.h +++ b/include/wine/wpp.h @@ -22,6 +22,14 @@ #define __WINE_WPP_H #include <stdio.h> +#include <stdarg.h> + +struct wpp_callbacks +{ + /* Error callbacks */ + void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap ); + void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap ); +}; /* Return value == 0 means successful execution */ extern int wpp_add_define( const char *name, const char *value ); @@ -33,5 +41,6 @@ extern int wpp_add_include_path( const char *path ); extern char *wpp_find_include( const char *name, const char *parent_name ); extern int wpp_parse( const char *input, FILE *output ); extern int wpp_parse_temp( const char *input, const char *output_base, char **output_name ); +extern void wpp_set_callbacks( const struct wpp_callbacks *callbacks ); #endif /* __WINE_WPP_H */ diff --git a/libs/wpp/preproc.c b/libs/wpp/preproc.c index cd46fc2..874e54c 100644 --- a/libs/wpp/preproc.c +++ b/libs/wpp/preproc.c @@ -674,13 +674,32 @@ end: fprintf(stderr, "\n"); } +static void wpp_default_error(const char *file, int line, int col, const char *near, const char *msg, va_list ap) +{ + generic_msg(msg, "Error", near, ap); + exit(1); +} + +static void wpp_default_warning(const char *file, int line, int col, const char *near, const char *msg, va_list ap) +{ + generic_msg(msg, "Warning", near, ap); +} + +static const struct wpp_callbacks default_callbacks = +{ + wpp_default_error, + wpp_default_warning, +}; + +const struct wpp_callbacks *wpp_callbacks = &default_callbacks; + int ppy_error(const char *s, ...) { va_list ap; va_start(ap, s); - generic_msg(s, "Error", ppy_text, ap); + wpp_callbacks->error(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap); va_end(ap); - exit(1); + pp_status.state = 1; return 1; } @@ -688,7 +707,7 @@ int ppy_warning(const char *s, ...) { va_list ap; va_start(ap, s); - generic_msg(s, "Warning", ppy_text, ap); + wpp_callbacks->warning(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap); va_end(ap); return 0; } diff --git a/libs/wpp/wpp.c b/libs/wpp/wpp.c index e3541fe..e6a1a83 100644 --- a/libs/wpp/wpp.c +++ b/libs/wpp/wpp.c @@ -230,3 +230,8 @@ int wpp_parse_temp( const char *input, const char *output_base, char **output_na fclose( output ); return ret; } + +void wpp_set_callbacks( const struct wpp_callbacks *callbacks ) +{ + wpp_callbacks = callbacks; +} diff --git a/libs/wpp/wpp_private.h b/libs/wpp/wpp_private.h index c0b95a4..e082213 100644 --- a/libs/wpp/wpp_private.h +++ b/libs/wpp/wpp_private.h @@ -218,6 +218,8 @@ int pp_get_if_depth(void); #define __attribute__(x) /*nothing*/ #endif +extern const struct wpp_callbacks *wpp_callbacks; + int ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2))); int ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2))); void pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));
1
0
0
0
Matteo Bruni : wpp: get_string() now can return NULL, handle it.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 28fb6a24b143bbbe70b497dedcbcb5688aac9f8e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=28fb6a24b143bbbe70b497ded…
Author: Matteo Bruni <matteo.mystral(a)gmail.com> Date: Tue Sep 29 12:06:24 2009 +0200 wpp: get_string() now can return NULL, handle it. --- libs/wpp/ppl.l | 3 +++ libs/wpp/ppy.y | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libs/wpp/ppl.l b/libs/wpp/ppl.l index 062ac22..48a6959 100644 --- a/libs/wpp/ppl.l +++ b/libs/wpp/ppl.l @@ -1514,6 +1514,9 @@ void pp_do_include(char *fname, int type) int n; includelogicentry_t *iep; + if(!fname) + return; + for(iep = pp_includelogiclist; iep; iep = iep->next) { if(!strcmp(iep->filename, fname)) diff --git a/libs/wpp/ppy.y b/libs/wpp/ppy.y index ba88320..b525e2f 100644 --- a/libs/wpp/ppy.y +++ b/libs/wpp/ppy.y @@ -279,16 +279,16 @@ preprocessor | tMACRO res_arg allmargs tMACROEND opt_mtexts tNL { pp_add_macro($1, macro_args, nmacro_args, $5); } - | tLINE tSINT tDQSTRING tNL { fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } - | tGCCLINE tSINT tDQSTRING tNL { fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } + | tLINE tSINT tDQSTRING tNL { if($3) fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } + | tGCCLINE tSINT tDQSTRING tNL { if($3) fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tNL - { fprintf(ppy_out, "# %d %s %d\n", $2, $3, $4); free($3); } + { if($3) fprintf(ppy_out, "# %d %s %d\n", $2, $3, $4); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tNL - { fprintf(ppy_out, "# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); } + { if($3) fprintf(ppy_out, "# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tNL - { fprintf(ppy_out, "# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); } + { if($3) fprintf(ppy_out, "# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL - { fprintf(ppy_out, "# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); } + { if($3) fprintf(ppy_out, "# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); } | tGCCLINE tNL /* The null-token */ | tERROR opt_text tNL { ppy_error("#error directive: '%s'", $2); free($2); } | tWARNING opt_text tNL { ppy_warning("#warning directive: '%s'", $2); free($2); }
1
0
0
0
Matteo Bruni : wpp: Handle remaining memory allocation failures.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 9086c59d3265e160b1f935ac0578790231e0e398 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9086c59d3265e160b1f935ac0…
Author: Matteo Bruni <matteo.mystral(a)gmail.com> Date: Mon Sep 28 21:32:39 2009 +0200 wpp: Handle remaining memory allocation failures. --- include/wine/wpp.h | 7 +++-- libs/wpp/preproc.c | 51 ++++++++++++++++++++++++++++++++++++++++------- libs/wpp/wpp.c | 44 +++++++++++++++++++++++++++++++++------- libs/wpp/wpp_private.h | 2 +- 4 files changed, 84 insertions(+), 20 deletions(-) diff --git a/include/wine/wpp.h b/include/wine/wpp.h index 10b71e0..86575b1 100644 --- a/include/wine/wpp.h +++ b/include/wine/wpp.h @@ -23,12 +23,13 @@ #include <stdio.h> -extern void wpp_add_define( const char *name, const char *value ); +/* Return value == 0 means successful execution */ +extern int wpp_add_define( const char *name, const char *value ); extern void wpp_del_define( const char *name ); -extern void wpp_add_cmdline_define( const char *value ); +extern int wpp_add_cmdline_define( const char *value ); extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug ); extern void wpp_set_pedantic( int on ); -extern void wpp_add_include_path( const char *path ); +extern int wpp_add_include_path( const char *path ); extern char *wpp_find_include( const char *name, const char *parent_name ); extern int wpp_parse( const char *input, FILE *output ); extern int wpp_parse_temp( const char *input, const char *output_base, char **output_name ); diff --git a/libs/wpp/preproc.c b/libs/wpp/preproc.c index 1d9aed6..cd46fc2 100644 --- a/libs/wpp/preproc.c +++ b/libs/wpp/preproc.c @@ -82,8 +82,8 @@ void *pp_xmalloc(size_t size) res = malloc(size); if(res == NULL) { - fprintf(stderr, "Virtual memory exhausted.\n"); - exit(2); + /* Set the error flag */ + pp_status.state = 1; } return res; } @@ -96,8 +96,8 @@ void *pp_xrealloc(void *p, size_t size) res = realloc(p, size); if(res == NULL) { - fprintf(stderr, "Virtual memory exhausted.\n"); - exit(2); + /* Set the error flag */ + pp_status.state = 1; } return res; } @@ -177,13 +177,16 @@ static void free_pp_entry( pp_entry_t *ppp, int idx ) } /* push a new (empty) define state */ -void pp_push_define_state(void) +int pp_push_define_state(void) { pp_def_state_t *state = pp_xmalloc( sizeof(*state) ); + if(!state) + return 1; memset( state->defines, 0, sizeof(state->defines) ); state->next = pp_def_state; pp_def_state = state; + return 0; } /* pop the current define state */ @@ -349,10 +352,12 @@ pp_entry_t *pp_add_macro(char *id, marg_t *args[], int nargs, mtext_t *exp) static char **includepath; static int nincludepath = 0; -void wpp_add_include_path(const char *path) +int wpp_add_include_path(const char *path) { char *tok; char *cpy = pp_xstrdup(path); + if(!cpy) + return 1; tok = strtok(cpy, INCLUDESEPARATOR); while(tok) @@ -360,7 +365,14 @@ void wpp_add_include_path(const char *path) if(*tok) { char *dir; char *cptr; + char **new_path; + dir = pp_xstrdup(tok); + if(!dir) + { + free(cpy); + return 1; + } for(cptr = dir; *cptr; cptr++) { /* Convert to forward slash */ @@ -372,13 +384,21 @@ void wpp_add_include_path(const char *path) *cptr = '\0'; /* Add to list */ + new_path = pp_xrealloc(includepath, (nincludepath+1) * sizeof(*includepath)); + if(!new_path) + { + free(dir); + free(cpy); + return 1; + } + includepath = new_path; + includepath[nincludepath] = dir; nincludepath++; - includepath = pp_xrealloc(includepath, nincludepath * sizeof(*includepath)); - includepath[nincludepath-1] = dir; } tok = strtok(NULL, INCLUDESEPARATOR); } free(cpy); + return 0; } char *wpp_find_include(const char *name, const char *parent_name) @@ -390,6 +410,8 @@ char *wpp_find_include(const char *name, const char *parent_name) int i, fd; cpy = pp_xmalloc(strlen(name)+1); + if(!cpy) + return NULL; cptr = cpy; for(ccptr = name; *ccptr; ccptr++) @@ -415,6 +437,11 @@ char *wpp_find_include(const char *name, const char *parent_name) if ((p = strrchr( parent_name, '/' ))) p++; else p = parent_name; path = pp_xmalloc( (p - parent_name) + strlen(cpy) + 1 ); + if(!path) + { + free(cpy); + return NULL; + } memcpy( path, parent_name, p - parent_name ); strcpy( path + (p - parent_name), cpy ); fd = open( path, O_RDONLY ); @@ -430,6 +457,11 @@ char *wpp_find_include(const char *name, const char *parent_name) for(i = 0; i < nincludepath; i++) { path = pp_xmalloc(strlen(includepath[i]) + strlen(cpy) + 2); + if(!path) + { + free(cpy); + return NULL; + } strcpy(path, includepath[i]); strcat(path, "/"); strcat(path, cpy); @@ -630,11 +662,14 @@ static void generic_msg(const char *s, const char *t, const char *n, va_list ap) if(n) { cpy = pp_xstrdup(n); + if(!cpy) + goto end; for (p = cpy; *p; p++) if(!isprint(*p)) *p = ' '; fprintf(stderr, " near '%s'", cpy); free(cpy); } } +end: #endif fprintf(stderr, "\n"); } diff --git a/libs/wpp/wpp.c b/libs/wpp/wpp.c index a7597ec..e3541fe 100644 --- a/libs/wpp/wpp.c +++ b/libs/wpp/wpp.c @@ -62,15 +62,17 @@ static void add_special_defines(void) pp_add_define( pp_xstrdup("__TIME__"), pp_xstrdup(buf) ); ppp = pp_add_define( pp_xstrdup("__FILE__"), pp_xstrdup("") ); - ppp->type = def_special; + if(ppp) + ppp->type = def_special; ppp = pp_add_define( pp_xstrdup("__LINE__"), pp_xstrdup("") ); - ppp->type = def_special; + if(ppp) + ppp->type = def_special; } /* add a define to the preprocessor list */ -void wpp_add_define( const char *name, const char *value ) +int wpp_add_define( const char *name, const char *value ) { struct define *def; @@ -80,17 +82,35 @@ void wpp_add_define( const char *name, const char *value ) { if (!strcmp( def->name, name )) { + char *new_value = pp_xstrdup(value); + if(!new_value) + return 1; free( def->value ); - def->value = pp_xstrdup(value); - return; + def->value = new_value; + + return 0; } } def = pp_xmalloc( sizeof(*def) ); + if(!def) + return 1; def->next = cmdline_defines; def->name = pp_xstrdup(name); + if(!def->name) + { + free(def); + return 1; + } def->value = pp_xstrdup(value); + if(!def->value) + { + free(def->name); + free(def); + return 1; + } cmdline_defines = def; + return 0; } @@ -112,13 +132,17 @@ void wpp_del_define( const char *name ) /* add a command-line define of the form NAME=VALUE */ -void wpp_add_cmdline_define( const char *value ) +int wpp_add_cmdline_define( const char *value ) { + char *p; char *str = pp_xstrdup(value); - char *p = strchr( str, '=' ); + if(!str) + return 1; + p = strchr( str, '=' ); if (p) *p++ = 0; wpp_add_define( str, p ); free( str ); + return 0; } @@ -146,7 +170,9 @@ int wpp_parse( const char *input, FILE *output ) pp_status.input = NULL; pp_status.state = 0; - pp_push_define_state(); + ret = pp_push_define_state(); + if(ret) + return ret; add_cmdline_defines(); add_special_defines(); @@ -182,6 +208,8 @@ int wpp_parse_temp( const char *input, const char *output_base, char **output_na if (!output_base || !output_base[0]) output_base = "wpptmp"; temp_name = pp_xmalloc( strlen(output_base) + 8 ); + if(!temp_name) + return 1; strcpy( temp_name, output_base ); strcat( temp_name, ".XXXXXX" ); diff --git a/libs/wpp/wpp_private.h b/libs/wpp/wpp_private.h index b485d70..c0b95a4 100644 --- a/libs/wpp/wpp_private.h +++ b/libs/wpp/wpp_private.h @@ -202,7 +202,7 @@ void *pp_xmalloc(size_t); void *pp_xrealloc(void *, size_t); char *pp_xstrdup(const char *str); pp_entry_t *pplookup(const char *ident); -void pp_push_define_state(void); +int pp_push_define_state(void); void pp_pop_define_state(void); pp_entry_t *pp_add_define(char *def, char *text); pp_entry_t *pp_add_macro(char *ident, marg_t *args[], int nargs, mtext_t *exp);
1
0
0
0
Alexandre Julliard : tests: Build all tests with strict prototypes.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 239265fd8b83b7047c85138a014d34b8f2f2ebbb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=239265fd8b83b7047c85138a0…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 13:34:37 2009 +0200 tests: Build all tests with strict prototypes. --- dlls/Maketest.rules.in | 2 +- dlls/user32/tests/class.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/Maketest.rules.in b/dlls/Maketest.rules.in index aff002c..95f5c2b 100644 --- a/dlls/Maketest.rules.in +++ b/dlls/Maketest.rules.in @@ -10,7 +10,7 @@ # DLLFLAGS = @DLLFLAGS@ -DEFS = $(EXTRADEFS) +DEFS = -DWINE_STRICT_PROTOTYPES $(EXTRADEFS) MODULE = $(TESTDLL:%.dll=%)_test.exe TESTRESULTS = $(CTESTS:.c=.ok) diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c index f8a4cd8..0e7b0e4 100644 --- a/dlls/user32/tests/class.c +++ b/dlls/user32/tests/class.c @@ -598,8 +598,8 @@ static void test_builtinproc(void) HWND hwnd; int i; - pDefWindowProcA = GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA"); - pDefWindowProcW = GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW"); + pDefWindowProcA = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA"); + pDefWindowProcW = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW"); for (i = 0; i < 4; i++) {
1
0
0
0
Alexandre Julliard : kernel32: Fix empty function prototypes.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: fe1374cc4c3f12f9fd40059830b9a21d3c78545e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fe1374cc4c3f12f9fd4005983…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 12:56:33 2009 +0200 kernel32: Fix empty function prototypes. --- dlls/kernel32/kernel16_private.h | 6 +++--- dlls/kernel32/wowthunk.c | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dlls/kernel32/kernel16_private.h b/dlls/kernel32/kernel16_private.h index aada5b2..6ad2aea 100644 --- a/dlls/kernel32/kernel16_private.h +++ b/dlls/kernel32/kernel16_private.h @@ -114,7 +114,7 @@ typedef struct { WORD pushw_bp; /* pushw %bp */ BYTE pushl; /* pushl $target */ - void (*target)(); + void *target; WORD call; /* call CALLFROM16 */ short callfrom16; } ENTRYPOINT16; @@ -147,8 +147,8 @@ typedef struct _THHOOK HTASK16 LockTDB; /* 14 hLockedTask */ } THHOOK; -extern LONG __wine_call_from_16(); -extern void __wine_call_from_16_regs(); +extern LONG __wine_call_from_16(void); +extern void __wine_call_from_16_regs(void); extern THHOOK *pThhook; diff --git a/dlls/kernel32/wowthunk.c b/dlls/kernel32/wowthunk.c index 75351b6..080ce3a 100644 --- a/dlls/kernel32/wowthunk.c +++ b/dlls/kernel32/wowthunk.c @@ -48,11 +48,11 @@ WINE_DECLARE_DEBUG_CHANNEL(snoop); extern DWORD WINAPI wine_call_to_16( FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler ); extern void WINAPI wine_call_to_16_regs( CONTEXT86 *context, DWORD cbArgs, PEXCEPTION_HANDLER handler ); extern void __wine_call_to_16_ret(void); -extern void CALL32_CBClient_Ret(); -extern void CALL32_CBClientEx_Ret(); -extern void DPMI_PendingEventCheck(); -extern void DPMI_PendingEventCheck_Cleanup(); -extern void DPMI_PendingEventCheck_Return(); +extern void CALL32_CBClient_Ret(void); +extern void CALL32_CBClientEx_Ret(void); +extern void DPMI_PendingEventCheck(void); +extern void DPMI_PendingEventCheck_Cleanup(void); +extern void DPMI_PendingEventCheck_Return(void); extern BYTE __wine_call16_start[]; extern BYTE __wine_call16_end[];
1
0
0
0
Alexandre Julliard : include: Add support for building Wine with strict prototype checking.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 0e67f65cab65fb157adbe6196676279d71453e3b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0e67f65cab65fb157adbe6196…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 12:30:49 2009 +0200 include: Add support for building Wine with strict prototype checking. --- dlls/msvfw32/msvideo_main.c | 2 +- include/mscoree.idl | 4 ++++ include/rpcndr.h | 4 ++++ include/vfw.h | 4 ++++ include/windef.h | 10 ++++++++-- include/wine/windef16.h | 10 ++++++++-- 6 files changed, 29 insertions(+), 5 deletions(-) diff --git a/dlls/msvfw32/msvideo_main.c b/dlls/msvfw32/msvideo_main.c index 6196fac..5217c58 100644 --- a/dlls/msvfw32/msvideo_main.c +++ b/dlls/msvfw32/msvideo_main.c @@ -472,7 +472,7 @@ HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode) /*********************************************************************** * ICOpenFunction [MSVFW32.@] */ -HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler) +HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler) { ICOPEN icopen; WINE_HIC* whic; diff --git a/include/mscoree.idl b/include/mscoree.idl index aed31da..19749fb 100644 --- a/include/mscoree.idl +++ b/include/mscoree.idl @@ -27,7 +27,11 @@ cpp_quote("HRESULT WINAPI GetCORSystemDirectory(LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI GetCORVersion(LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPWSTR,DWORD,DWORD*,LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI LoadLibraryShim(LPCWSTR,LPCWSTR,LPVOID,HMODULE*);") +cpp_quote("#ifdef WINE_STRICT_PROTOTYPES") +cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)(void);") +cpp_quote("#else") cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)();") +cpp_quote("#endif") cpp_quote("HRESULT WINAPI LockClrVersion(FLockClrVersionCallback,FLockClrVersionCallback*,FLockClrVersionCallback*);") typedef void* HDOMAINENUM; diff --git a/include/rpcndr.h b/include/rpcndr.h index 78c9a47..8fee143 100644 --- a/include/rpcndr.h +++ b/include/rpcndr.h @@ -383,7 +383,11 @@ typedef struct _MIDL_SYNTAX_INFO typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE ); +#ifdef WINE_STRICT_PROTOTYPES +typedef LONG (__RPC_API *SERVER_ROUTINE)(void); +#else typedef LONG (__RPC_API *SERVER_ROUTINE)(); +#endif typedef struct _MIDL_SERVER_INFO_ { diff --git a/include/vfw.h b/include/vfw.h index ed62545..c0689fb 100644 --- a/include/vfw.h +++ b/include/vfw.h @@ -499,7 +499,11 @@ BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags); LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb); HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode); +#ifdef WINE_STRICT_PROTOTYPES +HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler); +#else HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler); +#endif LRESULT VFWAPI ICClose(HIC hic); HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags); diff --git a/include/windef.h b/include/windef.h index 825255b..8f5ea30 100644 --- a/include/windef.h +++ b/include/windef.h @@ -227,7 +227,8 @@ typedef unsigned int ULONG, *PULONG; /* Note that Winelib is purely Win32. */ #ifdef __WINESRC__ -#define WINE_NO_UNICODE_MACROS +#define WINE_NO_UNICODE_MACROS 1 +#define WINE_STRICT_PROTOTYPES 1 #endif #ifdef WINE_NO_UNICODE_MACROS @@ -304,10 +305,15 @@ typedef HICON HCURSOR; /* Callback function pointers types */ +#ifdef WINE_STRICT_PROTOTYPES +typedef INT_PTR (CALLBACK *FARPROC)(void); +typedef INT_PTR (CALLBACK *NEARPROC)(void); +typedef INT_PTR (CALLBACK *PROC)(void); +#else typedef INT_PTR (CALLBACK *FARPROC)(); typedef INT_PTR (CALLBACK *NEARPROC)(); typedef INT_PTR (CALLBACK *PROC)(); - +#endif /* Macros to split words and longs. */ diff --git a/include/wine/windef16.h b/include/wine/windef16.h index 8c58aae..40d96ee 100644 --- a/include/wine/windef16.h +++ b/include/wine/windef16.h @@ -151,8 +151,6 @@ typedef struct typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM); typedef BOOL16 (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef INT16 (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16); -typedef LRESULT (CALLBACK *FARPROC16)(); -typedef INT16 (CALLBACK *PROC16)(); typedef BOOL16 (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16); typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM); typedef BOOL16 (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16); @@ -160,4 +158,12 @@ typedef VOID (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD); typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM); typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM); +#ifdef WINE_STRICT_PROTOTYPES +typedef LRESULT (CALLBACK *FARPROC16)(void); +typedef INT16 (CALLBACK *PROC16)(void); +#else +typedef LRESULT (CALLBACK *FARPROC16)(); +typedef INT16 (CALLBACK *PROC16)(); +#endif + #endif /* __WINE_WINDEF16_H */
1
0
0
0
Alexandre Julliard : msvcrt: Use strict function prototypes.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 5af33ee06f67aba6033bd45a460c476b96d29cb7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5af33ee06f67aba6033bd45a4…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 12:18:50 2009 +0200 msvcrt: Use strict function prototypes. --- dlls/msvcirt/msvcirt.c | 2 +- dlls/msvcrt/cpp.c | 2 +- dlls/msvcrt/cppexcept.c | 2 +- dlls/msvcrt/cppexcept.h | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dlls/msvcirt/msvcirt.c b/dlls/msvcirt/msvcirt.c index b262718..569452c 100644 --- a/dlls/msvcirt/msvcirt.c +++ b/dlls/msvcirt/msvcirt.c @@ -36,7 +36,7 @@ typedef struct { #define THISCALL(func) __thiscall_ ## func #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func) #define DEFINE_THISCALL_WRAPPER(func,args) \ - extern void THISCALL(func)(); \ + extern void THISCALL(func)(void); \ __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ "popl %eax\n\t" \ "pushl %ecx\n\t" \ diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c index b203e1c..2ac9b8f 100644 --- a/dlls/msvcrt/cpp.c +++ b/dlls/msvcrt/cpp.c @@ -74,7 +74,7 @@ typedef struct _rtti_object_locator #define THISCALL(func) __thiscall_ ## func #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func) #define DEFINE_THISCALL_WRAPPER(func,args) \ - extern void THISCALL(func)(); \ + extern void THISCALL(func)(void); \ __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ "popl %eax\n\t" \ "pushl %ecx\n\t" \ diff --git a/dlls/msvcrt/cppexcept.c b/dlls/msvcrt/cppexcept.c index a777025..4bdd59c 100644 --- a/dlls/msvcrt/cppexcept.c +++ b/dlls/msvcrt/cppexcept.c @@ -199,7 +199,7 @@ static void copy_exception( void *object, cxx_exception_frame *frame, /* unwind the local function up to a given trylevel */ static void cxx_local_unwind( cxx_exception_frame* frame, const cxx_function_descr *descr, int last_level) { - void (*handler)(); + void (*handler)(void); int trylevel = frame->trylevel; while (trylevel != last_level) diff --git a/dlls/msvcrt/cppexcept.h b/dlls/msvcrt/cppexcept.h index 1a3919e..7afb078 100644 --- a/dlls/msvcrt/cppexcept.h +++ b/dlls/msvcrt/cppexcept.h @@ -24,7 +24,7 @@ #define CXX_FRAME_MAGIC 0x19930520 #define CXX_EXCEPTION 0xe06d7363 -typedef void (*vtable_ptr)(); +typedef void (*vtable_ptr)(void); /* type_info object, see cpp.c for implementation */ typedef struct __type_info @@ -56,7 +56,7 @@ typedef struct __catchblock_info UINT flags; /* flags (see below) */ const type_info *type_info; /* C++ type caught by this block */ int offset; /* stack offset to copy exception object to */ - void (*handler)(); /* catch block handler code */ + void (*handler)(void);/* catch block handler code */ } catchblock_info; #define TYPE_FLAG_CONST 1 #define TYPE_FLAG_VOLATILE 2 @@ -76,7 +76,7 @@ typedef struct __tryblock_info typedef struct __unwind_info { int prev; /* prev trylevel unwind handler, to run after this one */ - void (*handler)(); /* unwind handler */ + void (*handler)(void);/* unwind handler */ } unwind_info; /* descriptor of all try blocks of a given function */ @@ -128,7 +128,7 @@ typedef DWORD (*cxx_exc_custom_handler)( PEXCEPTION_RECORD, cxx_exception_frame* typedef struct __cxx_exception_type { UINT flags; /* TYPE_FLAG flags */ - void (*destructor)(); /* exception object destructor */ + void (*destructor)(void);/* exception object destructor */ cxx_exc_custom_handler custom_handler; /* custom handler for this exception */ const cxx_type_info_table *type_info_table; /* list of types for this exception object */ } cxx_exception_type;
1
0
0
0
Alexandre Julliard : oleaut32: Use an assembly wrapper to implement DispCallFunc, and make it i386-only.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: ceac768adf8edcacfcb1a0b4a0a8ba3e09fbe549 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ceac768adf8edcacfcb1a0b4a…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 12:07:23 2009 +0200 oleaut32: Use an assembly wrapper to implement DispCallFunc, and make it i386-only. --- dlls/oleaut32/tmarshal.c | 5 ++ dlls/oleaut32/typelib.c | 145 ++++++++++++++-------------------------------- 2 files changed, 49 insertions(+), 101 deletions(-) diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c index 7235850..e7d7b89 100644 --- a/dlls/oleaut32/tmarshal.c +++ b/dlls/oleaut32/tmarshal.c @@ -2037,6 +2037,7 @@ static HRESULT WINAPI TMStubImpl_Invoke( LPRPCSTUBBUFFER iface, RPCOLEMESSAGE* xmsg,IRpcChannelBuffer*rpcchanbuf) { +#ifdef __i386__ int i; const FUNCDESC *fdesc; TMStubImpl *This = (TMStubImpl *)iface; @@ -2201,6 +2202,10 @@ exit: TRACE("returning\n"); return hres; +#else + FIXME( "not implemented on non-i386\n" ); + return E_FAIL; +#endif } static LPRPCSTUBBUFFER WINAPI diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 8fe6ce9..0bd9b19 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -5621,6 +5621,41 @@ static HRESULT WINAPI ITypeInfo_fnGetIDsOfNames( ITypeInfo2 *iface, return DISP_E_UNKNOWNNAME; } + +#ifdef __i386__ + +extern DWORD CDECL call_method( void *func, int nb_args, const DWORD *args ); +__ASM_GLOBAL_FUNC( call_method, + "pushl %ebp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") + "movl %esp,%ebp\n\t" + __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") + "pushl %esi\n\t" + __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") + "pushl %edi\n\t" + __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") + "movl 12(%ebp),%edx\n\t" + "shll $2,%edx\n\t" + "jz 1f\n\t" + "subl %edx,%esp\n\t" + "andl $~15,%esp\n\t" + "movl 12(%ebp),%ecx\n\t" + "movl 16(%ebp),%esi\n\t" + "movl %esp,%edi\n\t" + "cld\n\t" + "rep; movsl\n" + "1:\tcall *8(%ebp)\n\t" + "leal -8(%ebp),%esp\n\t" + "popl %edi\n\t" + __ASM_CFI(".cfi_same_value %edi\n\t") + "popl %esi\n\t" + __ASM_CFI(".cfi_same_value %esi\n\t") + "popl %ebp\n\t" + __ASM_CFI(".cfi_def_cfa %esp,4\n\t") + __ASM_CFI(".cfi_same_value %ebp\n\t") + "ret" ) + /* ITypeInfo::Invoke * * Invokes a method, or accesses a property of an object, that implements the @@ -5639,106 +5674,8 @@ _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) { switch (callconv) { case CC_STDCALL: - - switch (nrargs) { - case 0: - res = func(); - break; - case 1: - res = func(args[0]); - break; - case 2: - res = func(args[0],args[1]); - break; - case 3: - res = func(args[0],args[1],args[2]); - break; - case 4: - res = func(args[0],args[1],args[2],args[3]); - break; - case 5: - res = func(args[0],args[1],args[2],args[3],args[4]); - break; - case 6: - res = func(args[0],args[1],args[2],args[3],args[4],args[5]); - break; - case 7: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6]); - break; - case 8: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]); - break; - case 9: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]); - break; - case 10: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9]); - break; - case 11: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10]); - break; - case 12: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]); - break; - case 13: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12]); - break; - case 14: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13]); - break; - case 15: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14]); - break; - case 16: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15]); - break; - case 17: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16]); - break; - case 18: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17]); - break; - case 19: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18]); - break; - case 20: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19]); - break; - case 21: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20]); - break; - case 22: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21]); - break; - case 23: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22]); - break; - case 24: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23]); - break; - case 25: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24]); - break; - case 26: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24],args[25]); - break; - case 27: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24],args[25],args[26]); - break; - case 28: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24],args[25],args[26],args[27]); - break; - case 29: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24],args[25],args[26],args[27],args[28]); - break; - case 30: - res = func(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16],args[17],args[18],args[19],args[20],args[21],args[22],args[23],args[24],args[25],args[26],args[27],args[28],args[29]); - break; - default: - FIXME("unsupported number of arguments %d in stdcall\n",nrargs); - res = -1; - break; - } + case CC_CDECL: + res = call_method( func, nrargs, args ); break; default: FIXME("unsupported calling convention %d\n",callconv); @@ -5775,6 +5712,7 @@ static int _dispargsize(VARTYPE vt) return 1; } } +#endif /* __i386__ */ static HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt) { @@ -5954,6 +5892,7 @@ DispCallFunc( void* pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE* prgvt, VARIANTARG** prgpvarg, VARIANT* pvargResult) { +#ifdef __i386__ int argsize, argspos; UINT i; DWORD *args; @@ -6009,9 +5948,13 @@ DispCallFunc( V_VT(pvargResult) = vtReturn; V_UI4(pvargResult) = hres; } - HeapFree(GetProcessHeap(),0,args); return S_OK; +#else + FIXME( "(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d)): not implemented for this CPU\n", + pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); + return E_NOTIMPL; +#endif } #define INVBUF_ELEMENT_SIZE \
1
0
0
0
Alexandre Julliard : kernel32: Use call_entry_point to call functions with variable number of arguments.
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: 26aea12cce43df4caaa005c2ef923f9ffa25d93f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=26aea12cce43df4caaa005c2e…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 6 12:05:36 2009 +0200 kernel32: Use call_entry_point to call functions with variable number of arguments. --- dlls/kernel32/thunk.c | 89 +++---------------------------------------------- 1 files changed, 5 insertions(+), 84 deletions(-) diff --git a/dlls/kernel32/thunk.c b/dlls/kernel32/thunk.c index be098b5..5befee5 100644 --- a/dlls/kernel32/thunk.c +++ b/dlls/kernel32/thunk.c @@ -149,7 +149,8 @@ struct SLApiDB SEGPTR CALL32_CBClient_RetAddr = 0; SEGPTR CALL32_CBClientEx_RetAddr = 0; -extern void __wine_call_from_16_thunk(); +extern int call_entry_point( void *func, int nb_args, const DWORD *args ); +extern void __wine_call_from_16_thunk(void); /* Push a DWORD on the 32-bit stack */ static inline void stack32_push( CONTEXT86 *context, DWORD val ) @@ -1036,39 +1037,7 @@ DWORD WINAPIV SSCall( DPRINTF("0x%08x,",args[i]); DPRINTF("])\n"); } - switch (nr) { - case 0: ret = fun(); - break; - case 4: ret = fun(args[0]); - break; - case 8: ret = fun(args[0],args[1]); - break; - case 12: ret = fun(args[0],args[1],args[2]); - break; - case 16: ret = fun(args[0],args[1],args[2],args[3]); - break; - case 20: ret = fun(args[0],args[1],args[2],args[3],args[4]); - break; - case 24: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5]); - break; - case 28: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6]); - break; - case 32: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]); - break; - case 36: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]); - break; - case 40: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9]); - break; - case 44: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10]); - break; - case 48: ret = fun(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]); - break; - default: - WARN("Unsupported nr of arguments, %d\n",nr); - ret = 0; - break; - - } + ret = call_entry_point( fun, nr / sizeof(DWORD), args ); TRACE(" returning %d ...\n",ret); return ret; } @@ -1081,9 +1050,7 @@ void WINAPI __regs_W32S_BackTo32( CONTEXT86 *context ) LPDWORD stack = (LPDWORD)context->Esp; FARPROC proc = (FARPROC)context->Eip; - context->Eax = proc( stack[1], stack[2], stack[3], stack[4], stack[5], - stack[6], stack[7], stack[8], stack[9], stack[10] ); - + context->Eax = call_entry_point( proc, 10, stack + 1 ); context->Eip = stack32_pop(context); } DEFINE_REGS_ENTRYPOINT( W32S_BackTo32, 0 ) @@ -2378,54 +2345,8 @@ static DWORD WOW_CallProc32W16( FARPROC proc32, DWORD nrofargs, DWORD *args ) DWORD mutex_count; ReleaseThunkLock( &mutex_count ); - - /* - * FIXME: If ( nrofargs & CPEX_DEST_CDECL ) != 0, we should call a - * 32-bit CDECL routine ... - */ - if (!proc32) ret = 0; - else switch (nrofargs) - { - case 0: ret = proc32(); - break; - case 1: ret = proc32(args[0]); - break; - case 2: ret = proc32(args[0],args[1]); - break; - case 3: ret = proc32(args[0],args[1],args[2]); - break; - case 4: ret = proc32(args[0],args[1],args[2],args[3]); - break; - case 5: ret = proc32(args[0],args[1],args[2],args[3],args[4]); - break; - case 6: ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5]); - break; - case 7: ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6]); - break; - case 8: ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]); - break; - case 9: ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]); - break; - case 10:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9]); - break; - case 11:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10]); - break; - case 12:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]); - break; - case 13:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12]); - break; - case 14:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13]); - break; - case 15:ret = proc32(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14]); - break; - default: - /* FIXME: should go up to 32 arguments */ - ERR("Unsupported number of arguments %d, please report.\n",nrofargs); - ret = 0; - break; - } - + else ret = call_entry_point( proc32, nrofargs & ~CPEX_DEST_CDECL, args ); RestoreThunkLock( mutex_count ); TRACE("returns %08x\n",ret);
1
0
0
0
Michael Stefaniuc : user32: Fix a memory leak on a error patch (Smatch).
by Alexandre Julliard
06 Oct '09
06 Oct '09
Module: wine Branch: master Commit: e6cd096d65e4fdfcc1fe7c481298748e7757b91b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e6cd096d65e4fdfcc1fe7c481…
Author: Michael Stefaniuc <mstefani(a)redhat.de> Date: Tue Oct 6 00:53:24 2009 +0200 user32: Fix a memory leak on a error patch (Smatch). --- dlls/user32/cursoricon.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c index fca04ce..2ed1138 100644 --- a/dlls/user32/cursoricon.c +++ b/dlls/user32/cursoricon.c @@ -828,10 +828,10 @@ static HICON CURSORICON_CreateIconFromBMI( BITMAPINFO *bmi, hXorBits = 0; } } - - HeapFree( GetProcessHeap(), 0, pSrcInfo ); - HeapFree( GetProcessHeap(), 0, pDestInfo ); } + + HeapFree( GetProcessHeap(), 0, pSrcInfo ); + HeapFree( GetProcessHeap(), 0, pDestInfo ); } if( !hXorBits || !hAndBits )
1
0
0
0
← Newer
1
...
95
96
97
98
99
100
101
...
121
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Results per page:
10
25
50
100
200