From 214564b1dc76b8f29ef49dd13af429f6d05d3d64 Mon Sep 17 00:00:00 2001 From: Gabriel Corneanu Date: Wed, 18 Apr 2012 10:01:45 +0200 Subject: [PATCH] Re-enable "Use CString to concat linker options" This reverts commit 16202e054f0385499ec16463b87e23c97dc02328. Changed win32 build to use ONE_SOURCE just like libtcc.dll Therefore CString can be used again... --- tcc.c | 21 ++++++++------------- win32/build-tcc.bat | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/tcc.c b/tcc.c index 467ef88..9f1f7c0 100644 --- a/tcc.c +++ b/tcc.c @@ -35,7 +35,7 @@ static int do_bench = 0; static int gen_deps; static const char *deps_outfile; static const char *m_option; -static char *linker_arg; +static CString linker_arg; #define TCC_OPTION_HAS_ARG 0x0001 #define TCC_OPTION_NOSEP 0x0002 /* cannot have space before option and arg */ @@ -281,11 +281,11 @@ static int parse_args(TCCState *s, int argc, char **argv) const char *optarg, *p1, *r1; char *r; int was_pthread; - unsigned long linker_argsize = 0; was_pthread = 0; /* is set if commandline contains -pthread key */ optind = 1; + cstr_new(&linker_arg); while (optind < argc) { r = argv[optind++]; @@ -444,16 +444,11 @@ static int parse_args(TCCState *s, int argc, char **argv) s->rdynamic = 1; break; case TCC_OPTION_Wl: - if (!linker_arg) { - linker_argsize = strlen(optarg) + 1; - linker_arg = tcc_malloc(linker_argsize); - pstrcpy(linker_arg, linker_argsize, optarg); - } + if (!linker_arg.data_allocated) + cstr_cat(&linker_arg, optarg); else { - linker_argsize += strlen(optarg) + 1; - linker_arg = tcc_realloc(linker_arg, linker_argsize); - pstrcat(linker_arg, linker_argsize, ","); - pstrcat(linker_arg, linker_argsize, optarg); + cstr_ccat(&linker_arg, ','); + cstr_cat(&linker_arg, optarg); } break; case TCC_OPTION_E: @@ -476,7 +471,7 @@ static int parse_args(TCCState *s, int argc, char **argv) } } } - if ((r = (char *) tcc_set_linker(s, (char *)linker_arg, TRUE))) + if ((r = (char *) tcc_set_linker(s, (char *) linker_arg.data, TRUE))) tcc_error("unsupported linker option '%s'", r); /* fixme: these options could be different on your platform */ if (was_pthread && output_type != TCC_OUTPUT_OBJ) { @@ -610,7 +605,7 @@ int main(int argc, char **argv) } tcc_delete(s); - tcc_free(linker_arg); + cstr_free(&linker_arg); tcc_free(outfile); #ifdef MEM_DEBUG diff --git a/win32/build-tcc.bat b/win32/build-tcc.bat index 21bf3a8..aceecb7 100644 --- a/win32/build-tcc.bat +++ b/win32/build-tcc.bat @@ -34,7 +34,7 @@ copy ..\libtcc.h libtcc\libtcc.h tiny_impdef libtcc.dll -o lib/libtcc.def :tcc -%CC% %target% ../tcc.c -o tcc.exe -ltcc -Llibtcc +%CC% %target% -DONE_SOURCE ../tcc.c -o tcc.exe -ltcc -Llibtcc :copy_std_includes copy ..\include\*.h include