fix a problem with two different applet_name's

This commit is contained in:
Denis Vlasenko 2007-10-11 10:06:26 +00:00
parent 9b49a5ed85
commit 15cb4a4272
3 changed files with 6 additions and 7 deletions

View File

@ -56,7 +56,7 @@ extern const unsigned short NUM_APPLETS;
/* Length of these names has effect on size of libbusybox /* Length of these names has effect on size of libbusybox
* and "individual" binaries. Keep them short. * and "individual" binaries. Keep them short.
*/ */
void lbb_prepare(char **argv) MAIN_EXTERNALLY_VISIBLE; void lbb_prepare(const char *applet, char **argv) MAIN_EXTERNALLY_VISIBLE;
#if ENABLE_BUILD_LIBBUSYBOX #if ENABLE_BUILD_LIBBUSYBOX
#if ENABLE_FEATURE_SHARED_BUSYBOX #if ENABLE_FEATURE_SHARED_BUSYBOX
int lbb_main(int argc, char **argv) EXTERNALLY_VISIBLE; int lbb_main(int argc, char **argv) EXTERNALLY_VISIBLE;

View File

@ -127,11 +127,12 @@ const struct bb_applet *find_applet_by_name(const char *name)
int *const bb_errno __attribute__ ((section (".data"))); int *const bb_errno __attribute__ ((section (".data")));
#endif #endif
void lbb_prepare(char **argv) void lbb_prepare(const char *applet, char **argv)
{ {
#ifdef __GLIBC__ #ifdef __GLIBC__
(*(int **)&bb_errno) = __errno_location(); (*(int **)&bb_errno) = __errno_location();
#endif #endif
applet_name = applet;
/* Set locale for everybody except 'init' */ /* Set locale for everybody except 'init' */
if (ENABLE_LOCALE_SUPPORT && getpid() != 1) if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
@ -666,7 +667,7 @@ int lbb_main(int argc, char **argv)
int main(int argc, char **argv) int main(int argc, char **argv)
#endif #endif
{ {
lbb_prepare(argv); lbb_prepare("busybox", argv);
#if !BB_MMU #if !BB_MMU
/* NOMMU re-exec trick sets high-order bit in first byte of name */ /* NOMMU re-exec trick sets high-order bit in first byte of name */

View File

@ -220,14 +220,12 @@ if test "$CONFIG_FEATURE_INDIVIDUAL" = y; then
while read name main junk; do while read name main junk; do
echo "\ echo "\
void lbb_prepare(char **argv); void lbb_prepare(const char *applet, char **argv);
int $main(int argc, char **argv); int $main(int argc, char **argv);
const char *applet_name = \"$name\";
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
lbb_prepare(argv); lbb_prepare(\"$name\", argv);
return $main(argc, argv); return $main(argc, argv);
} }
" >"$sharedlib_dir/applet.c" " >"$sharedlib_dir/applet.c"