Patch from tito, acked by Bernhard Fischer.
authorRob Landley <rob@landley.net>
Mon, 20 Mar 2006 02:20:18 +0000 (02:20 -0000)
committerRob Landley <rob@landley.net>
Mon, 20 Mar 2006 02:20:18 +0000 (02:20 -0000)
util-linux/Config.in
util-linux/setarch.c

index 28292bd40c8e7b0dfdd0bf42e14981ba2fd8ef7d..b91eb69c724ed3738dba1d087cb95c3b548d3122 100644 (file)
@@ -354,9 +354,19 @@ config CONFIG_READPROFILE
        help
          This allows you to parse /proc/profile for basic profiling.
 
+config CONFIG_LINUX32
+       default n
+       depends on CONFIG_SETARCH
+
+config CONFIG_LINUX64
+       default n
+       depends on CONFIG_SETARCH
+
 config CONFIG_SETARCH
        bool "setarch"
        default n
+       select CONFIG_LINUX32
+       select CONFIG_LINUX64
        help
          The linux32 utility is used to create a 32bit environment for the
          specified program (usually a shell).  It only makes sense to have
index 33588e4eeaf92d8c32f38924b343389e326b1c95..d7e1c091731ab07d917612bab97eb90ff6b597d5 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "busybox.h"
 
-int setarch_main(int argc, char **argv)
+int setarch_main(int ATTRIBUTE_UNUSED argc, char **argv)
 {
        int pers = -1;
 
@@ -26,9 +26,9 @@ int setarch_main(int argc, char **argv)
         * argv[0]         -> "personality"
         */
 retry:
-       if (!strcmp(argv[0], "linux64"))
+       if (argv[0][5] == '6') /* linux64 */
                pers = PER_LINUX;
-       else if (!strcmp(argv[0], "linux32"))
+       else if (argv[0][5] == '3') /* linux32 */
                pers = PER_LINUX32;
        else if (pers == -1 && argv[1] != NULL) {
                pers = PER_LINUX32;
@@ -42,12 +42,11 @@ retry:
                bb_show_usage();
 
        /* Try to set personality */
-       if (personality(pers) < 0)
-               goto failure;
+       if (personality(pers) >= 0) {
 
-       /* Try to execute the program */
-       execvp(argv[0], argv);
+               /* Try to execute the program */
+               execvp(argv[0], argv);
+       }
 
-failure:
        bb_perror_msg_and_die("%s", argv[0]);
 }