Module: wine Branch: master Commit: 7c39023f604ad139556cde73edde3ea29d823d8f URL: http://source.winehq.org/git/wine.git/?a=commit;h=7c39023f604ad139556cde73ed...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Dec 14 10:33:14 2012 +0100
msvcrt: Fixed wildcard expanding when path is specified in __getmainargs.
---
dlls/msvcrt/data.c | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c index 2dc393c..c093e75 100644 --- a/dlls/msvcrt/data.c +++ b/dlls/msvcrt/data.c @@ -365,7 +365,8 @@ void msvcrt_free_args(void)
static int build_expanded_argv(int *argc, char **argv) { - int i, size=0, args_no=0; + int i, size=0, args_no=0, path_len; + BOOL is_expandable; HANDLE h;
args_no = 0; @@ -373,7 +374,20 @@ static int build_expanded_argv(int *argc, char **argv) WIN32_FIND_DATAA data; int len = 0;
- h = FindFirstFileA(__wine_main_argv[i], &data); + is_expandable = FALSE; + for(path_len = strlen(__wine_main_argv[i])-1; path_len>=0; path_len--) { + if(__wine_main_argv[i][path_len]=='*' || __wine_main_argv[i][path_len]=='?') + is_expandable = TRUE; + else if(__wine_main_argv[i][path_len]=='\' || __wine_main_argv[i][path_len]=='/') + break; + } + path_len++; + + if(is_expandable) + h = FindFirstFileA(__wine_main_argv[i], &data); + else + h = INVALID_HANDLE_VALUE; + if(h != INVALID_HANDLE_VALUE) { do { if(data.cFileName[0]=='.' && (data.cFileName[1]=='\0' || @@ -383,10 +397,11 @@ static int build_expanded_argv(int *argc, char **argv) len = strlen(data.cFileName)+1; if(argv) { argv[args_no] = (char*)(argv+*argc)+size; - memcpy(argv[args_no], data.cFileName, len*sizeof(char)); + memcpy(argv[args_no], __wine_main_argv[i], path_len*sizeof(char)); + memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(char)); } args_no++; - size += len; + size += len+path_len; }while(FindNextFileA(h, &data)); CloseHandle(h); }