Jacek Caban : winegcc: Add support for @file arguments.
Alexandre Julliard
julliard at winehq.org
Tue May 26 17:17:05 CDT 2020
Module: wine
Branch: master
Commit: c5ee64a101a09366b02c18bb6f43ab9503d86af4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c5ee64a101a09366b02c18bb6f43ab9503d86af4
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon May 25 20:34:08 2020 +0200
winegcc: Add support for @file arguments.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/winegcc/winegcc.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
index d350adc724..a1ba034009 100644
--- a/tools/winegcc/winegcc.c
+++ b/tools/winegcc/winegcc.c
@@ -1623,7 +1623,45 @@ int main(int argc, char **argv)
for (i = 1; i < argc; i++)
{
- strarray_add( opts.args, argv[i] );
+ char *input_buffer = NULL, *iter, *opt, *out;
+ struct stat st;
+ int fd;
+
+ if (argv[i][0] != '@' || (fd = open( argv[i] + 1, O_RDONLY | O_BINARY )) == -1)
+ {
+ strarray_add( opts.args, argv[i] );
+ continue;
+ }
+ if ((fstat( fd, &st ) == -1)) error( "Cannot stat %s", argv[i] + 1 );
+ if (st.st_size)
+ {
+ input_buffer = xmalloc( st.st_size + 1 );
+ if (read( fd, input_buffer, st.st_size ) != st.st_size) error( "Cannot read %s\n", argv[i] + 1 );
+ }
+ close( fd );
+ for (iter = input_buffer; iter < input_buffer + st.st_size; iter++)
+ {
+ char quote = 0;
+ while (iter < input_buffer + st.st_size && isspace(*iter)) iter++;
+ if (iter == input_buffer + st.st_size) break;
+ opt = out = iter;
+ while (iter < input_buffer + st.st_size && (quote || !isspace(*iter)))
+ {
+ if (*iter == quote)
+ {
+ iter++;
+ quote = 0;
+ }
+ else if (*iter == '\'' || *iter == '"') quote = *iter++;
+ else
+ {
+ if (*iter == '\\' && iter + 1 < input_buffer + st.st_size) iter++;
+ *out++ = *iter++;
+ }
+ }
+ *out = 0;
+ strarray_add( opts.args, opt );
+ }
}
/* parse options */
More information about the wine-cvs
mailing list