Revert "Use CString to concat linker options"

This reverts commit 1c11b857fe.

On windows, libtcc.c is compiled with ONE_SOURCE and then tcc.c is
linked to it. Thus tcc.c can only use public functions which cstr_* are
not.
This commit is contained in:
Thomas Preud'homme
2012-04-10 16:33:39 +02:00
parent 1c11b857fe
commit 16202e054f

21
tcc.c
View File

@ -35,7 +35,7 @@ static int do_bench = 0;
static int gen_deps; static int gen_deps;
static const char *deps_outfile; static const char *deps_outfile;
static const char *m_option; static const char *m_option;
static CString linker_arg; static char *linker_arg;
#define TCC_OPTION_HAS_ARG 0x0001 #define TCC_OPTION_HAS_ARG 0x0001
#define TCC_OPTION_NOSEP 0x0002 /* cannot have space before option and arg */ #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; const char *optarg, *p1, *r1;
char *r; char *r;
int was_pthread; int was_pthread;
unsigned long linker_argsize = 0;
was_pthread = 0; /* is set if commandline contains -pthread key */ was_pthread = 0; /* is set if commandline contains -pthread key */
optind = 1; optind = 1;
cstr_new(&linker_arg);
while (optind < argc) { while (optind < argc) {
r = argv[optind++]; r = argv[optind++];
@ -444,11 +444,16 @@ static int parse_args(TCCState *s, int argc, char **argv)
s->rdynamic = 1; s->rdynamic = 1;
break; break;
case TCC_OPTION_Wl: case TCC_OPTION_Wl:
if (!linker_arg.data_allocated) if (!linker_arg) {
cstr_cat(&linker_arg, optarg); linker_argsize = strlen(optarg) + 1;
linker_arg = tcc_malloc(linker_argsize);
pstrcpy(linker_arg, linker_argsize, optarg);
}
else { else {
cstr_ccat(&linker_arg, ','); linker_argsize += strlen(optarg) + 1;
cstr_cat(&linker_arg, optarg); linker_arg = tcc_realloc(linker_arg, linker_argsize);
pstrcat(linker_arg, linker_argsize, ",");
pstrcat(linker_arg, linker_argsize, optarg);
} }
break; break;
case TCC_OPTION_E: case TCC_OPTION_E:
@ -471,7 +476,7 @@ static int parse_args(TCCState *s, int argc, char **argv)
} }
} }
} }
if ((r = (char *) tcc_set_linker(s, (char *) linker_arg.data, TRUE))) if ((r = (char *) tcc_set_linker(s, (char *)linker_arg, TRUE)))
tcc_error("unsupported linker option '%s'", r); tcc_error("unsupported linker option '%s'", r);
/* fixme: these options could be different on your platform */ /* fixme: these options could be different on your platform */
if (was_pthread && output_type != TCC_OUTPUT_OBJ) { if (was_pthread && output_type != TCC_OUTPUT_OBJ) {
@ -605,7 +610,7 @@ int main(int argc, char **argv)
} }
tcc_delete(s); tcc_delete(s);
cstr_free(&linker_arg); tcc_free(linker_arg);
tcc_free(outfile); tcc_free(outfile);
#ifdef MEM_DEBUG #ifdef MEM_DEBUG