diff options
Diffstat (limited to 'gcc/ada/initialize.c')
-rw-r--r-- | gcc/ada/initialize.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ada/initialize.c b/gcc/ada/initialize.c index 8ad15bd..705cbf20 100644 --- a/gcc/ada/initialize.c +++ b/gcc/ada/initialize.c @@ -130,6 +130,7 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED) int last; int argc_expanded = 0; TCHAR result [MAX_PATH]; + int quoted; wargv = CommandLineToArgvW (GetCommandLineW(), &wargc); @@ -146,9 +147,12 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED) for (k=1; k<wargc; k++) { - /* Check for wildcard expansion. */ - if (_tcsstr (wargv[k], _T("?")) != 0 || - _tcsstr (wargv[k], _T("*")) != 0) + quoted = (wargv[k][0] == _T('\'')); + + /* Check for wildcard expansion if the argument is not quoted. */ + if (!quoted + && (_tcsstr (wargv[k], _T("?")) != 0 || + _tcsstr (wargv[k], _T("*")) != 0)) { /* Wilcards are present, append all corresponding matches. */ WIN32_FIND_DATA FileData; @@ -173,8 +177,19 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED) } else { - /* No wildcard. Store parameter as-is. */ - append_arg (&argc_expanded, wargv[k], &gnat_argv, &last); + /* No wildcard. Store parameter as-is. Remove quote if + needed. */ + if (quoted) + { + int len = _tcslen (wargv[k]); + + /* Remove ending quote */ + wargv[k][len-1] = _T('\0'); + append_arg + (&argc_expanded, &wargv[k][1], &gnat_argv, &last); + } + else + append_arg (&argc_expanded, wargv[k], &gnat_argv, &last); } } |