aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-10-11 10:06:26 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-10-11 10:06:26 +0000
commit15cb4a42724e480734157a55921ba435ed1413fc (patch)
tree81648e3f71bad18e88e19cb8efe094a10d94ab15
parent9b49a5ed8551e46892af3f676e5d96d21b540e3c (diff)
downloadbusybox-w32-15cb4a42724e480734157a55921ba435ed1413fc.tar.gz
busybox-w32-15cb4a42724e480734157a55921ba435ed1413fc.tar.bz2
busybox-w32-15cb4a42724e480734157a55921ba435ed1413fc.zip
fix a problem with two different applet_name's
-rw-r--r--include/busybox.h2
-rw-r--r--libbb/appletlib.c5
-rwxr-xr-xscripts/trylink6
3 files changed, 6 insertions, 7 deletions
diff --git a/include/busybox.h b/include/busybox.h
index 5c01eca8d..7ef36901a 100644
--- a/include/busybox.h
+++ b/include/busybox.h
@@ -56,7 +56,7 @@ extern const unsigned short NUM_APPLETS;
56/* Length of these names has effect on size of libbusybox 56/* Length of these names has effect on size of libbusybox
57 * and "individual" binaries. Keep them short. 57 * and "individual" binaries. Keep them short.
58 */ 58 */
59void lbb_prepare(char **argv) MAIN_EXTERNALLY_VISIBLE; 59void lbb_prepare(const char *applet, char **argv) MAIN_EXTERNALLY_VISIBLE;
60#if ENABLE_BUILD_LIBBUSYBOX 60#if ENABLE_BUILD_LIBBUSYBOX
61#if ENABLE_FEATURE_SHARED_BUSYBOX 61#if ENABLE_FEATURE_SHARED_BUSYBOX
62int lbb_main(int argc, char **argv) EXTERNALLY_VISIBLE; 62int lbb_main(int argc, char **argv) EXTERNALLY_VISIBLE;
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index 953f1e7e5..8b1ed8000 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -127,11 +127,12 @@ const struct bb_applet *find_applet_by_name(const char *name)
127int *const bb_errno __attribute__ ((section (".data"))); 127int *const bb_errno __attribute__ ((section (".data")));
128#endif 128#endif
129 129
130void lbb_prepare(char **argv) 130void lbb_prepare(const char *applet, char **argv)
131{ 131{
132#ifdef __GLIBC__ 132#ifdef __GLIBC__
133 (*(int **)&bb_errno) = __errno_location(); 133 (*(int **)&bb_errno) = __errno_location();
134#endif 134#endif
135 applet_name = applet;
135 136
136 /* Set locale for everybody except 'init' */ 137 /* Set locale for everybody except 'init' */
137 if (ENABLE_LOCALE_SUPPORT && getpid() != 1) 138 if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
@@ -666,7 +667,7 @@ int lbb_main(int argc, char **argv)
666int main(int argc, char **argv) 667int main(int argc, char **argv)
667#endif 668#endif
668{ 669{
669 lbb_prepare(argv); 670 lbb_prepare("busybox", argv);
670 671
671#if !BB_MMU 672#if !BB_MMU
672 /* NOMMU re-exec trick sets high-order bit in first byte of name */ 673 /* NOMMU re-exec trick sets high-order bit in first byte of name */
diff --git a/scripts/trylink b/scripts/trylink
index 25629aa1a..7fe262baa 100755
--- a/scripts/trylink
+++ b/scripts/trylink
@@ -220,14 +220,12 @@ if test "$CONFIG_FEATURE_INDIVIDUAL" = y; then
220 while read name main junk; do 220 while read name main junk; do
221 221
222 echo "\ 222 echo "\
223void lbb_prepare(char **argv); 223void lbb_prepare(const char *applet, char **argv);
224int $main(int argc, char **argv); 224int $main(int argc, char **argv);
225 225
226const char *applet_name = \"$name\";
227
228int main(int argc, char **argv) 226int main(int argc, char **argv)
229{ 227{
230 lbb_prepare(argv); 228 lbb_prepare(\"$name\", argv);
231 return $main(argc, argv); 229 return $main(argc, argv);
232} 230}
233" >"$sharedlib_dir/applet.c" 231" >"$sharedlib_dir/applet.c"