Allowing 'tcc -ar' to create empty archives

This commit is contained in:
Ziyao 2022-04-18 14:23:03 +08:00
parent d3e4664629
commit 8777ae984c
No known key found for this signature in database
GPG Key ID: A32FA9E5C3BB744D

View File

@ -61,7 +61,7 @@ static int contains_any(const char *s, const char *list) {
}
static int ar_usage(int ret) {
fprintf(stderr, "usage: tcc -ar [rcsv] lib file...\n");
fprintf(stderr, "usage: tcc -ar [rcsv] lib [file...]\n");
fprintf(stderr, "create library ([abdioptxN] not supported).\n");
return ret;
}
@ -115,8 +115,9 @@ ST_FUNC int tcc_tool_ar(TCCState *s1, int argc, char **argv)
}
}
if (!i_obj) // i_obj implies also i_lib. we require both.
if (!i_lib) // i_obj implies also i_lib.
ret = 1;
i_obj = i_obj ? i_obj : argc; // An empty archive will be generated if no input file is given
if (ret == 1)
return ar_usage(ret);
@ -242,6 +243,11 @@ ST_FUNC int tcc_tool_ar(TCCState *s1, int argc, char **argv)
hofs++, fpos = 1;
// write header
fwrite("!<arch>\n", 8, 1, fh);
// create an empty archive
if (!funccnt) {
ret = 0;
goto the_end;
}
sprintf(stmp, "%-10d", (int)(strpos + (funccnt+1) * sizeof(int)));
memcpy(&arhdr.ar_size, stmp, 10);
fwrite(&arhdr, sizeof(arhdr), 1, fh);