diff options
author | Ron Yorston | 2018-11-25 11:46:39 +0000 |
---|---|---|
committer | Denys Vlasenko | 2018-11-27 10:47:06 +0100 |
commit | 2d217799e8f23514ad3be6a951aa928c265bc6a4 (patch) | |
tree | e9ecd255767ec33df1bfe24c5f551d14de07063c | |
parent | 7b42f8fc76d78fe9c6b0cbe15e1425f2fd9fb5e8 (diff) | |
download | busybox-2d217799e8f23514ad3be6a951aa928c265bc6a4.zip busybox-2d217799e8f23514ad3be6a951aa928c265bc6a4.tar.gz |
build system: prevent duplicate applet names
The embedded script feature makes it easier to create applets with
duplicate names. Currently in such cases the build succeeds but
the resulting executable doesn't work as the developer intended.
Catch duplicate names when the applet tables are being generated
and make the build fail.
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | applets/applet_tables.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/applets/applet_tables.c b/applets/applet_tables.c index e3d10c8..ce20374 100644 --- a/applets/applet_tables.c +++ b/applets/applet_tables.c @@ -84,7 +84,15 @@ int main(int argc, char **argv) qsort(applets, NUM_APPLETS, sizeof(applets[0]), cmp_name); - if (!argv[1]) + for (i = j = 0; i < NUM_APPLETS-1; ++i) { + if (cmp_name(applets+i, applets+i+1) == 0) { + fprintf(stderr, "%s: duplicate applet name '%s'\n", argv[0], + applets[i].name); + j = 1; + } + } + + if (j != 0 || !argv[1]) return 1; snprintf(tmp1, PATH_MAX, "%s.%u.new", argv[1], (int) getpid()); i = open(tmp1, O_WRONLY | O_TRUNC | O_CREAT, 0666); |