Piotr Caban : msvcrt: Fixed wildcard expanding when path is specified in __getmainargs.
Alexandre Julliard
julliard at winehq.org
Fri Dec 14 14:09:59 CST 2012
Module: wine
Branch: master
Commit: 7c39023f604ad139556cde73edde3ea29d823d8f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7c39023f604ad139556cde73edde3ea29d823d8f
Author: Piotr Caban <piotr at 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);
}
More information about the wine-cvs
mailing list