X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Fsetarch.c;h=7d5dc247c48fd242cfb12cb97cf31e2e1c3634bc;hb=38292b68c962b9d470fa4e577020749c8c69226d;hp=3543eb6a203beabdad7ee6b26ffd1f4f3488cb88;hpb=0a6b0bfa7a821b594d237611e3f1effb1b3692fc;p=oweals%2Fbusybox.git diff --git a/util-linux/setarch.c b/util-linux/setarch.c index 3543eb6a2..7d5dc247c 100644 --- a/util-linux/setarch.c +++ b/util-linux/setarch.c @@ -1,54 +1,48 @@ /* vi: set sw=4 ts=4: */ /* - * Linux32/linux64 allows for changing uname emulation. + * linux32/linux64 allows for changing uname emulation. * * Copyright 2002 Andi Kleen, SuSE Labs. - * This file is subject to the GNU General Public License v2 * - * Licensed under GPL v2 or later, see file License for details. + * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ -#include -#include -#include -#include -#include #include -#include "busybox.h" +#include "libbb.h" -int setarch_main(int argc, char **argv) +int setarch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int setarch_main(int argc UNUSED_PARAM, char **argv) { - int pers = -1; + int pers; /* Figure out what personality we are supposed to switch to ... * we can be invoked as either: - * argv[0],argv[1] -> "setarch","personality" - * argv[0] -> "personality" + * argv[0],argv[1] == "setarch","personality" + * argv[0] == "personality" */ -retry: - if (!strcmp(argv[0], "linux64")) + if (ENABLE_SETARCH && applet_name[0] == 's' + && argv[1] && strncpy(argv[1], "linux", 5) + ) { + applet_name = argv[1]; + argv++; + } + if (applet_name[5] == '6') /* linux64 */ pers = PER_LINUX; - else if (!strcmp(argv[0], "linux32")) - pers = PER_LINUX32; - else if (pers == -1 && argv[1] != NULL) { + else if (applet_name[5] == '3') /* linux32 */ pers = PER_LINUX32; - ++argv; - goto retry; - } + else + bb_show_usage(); - /* make user actually gave us something to do */ - ++argv; + argv++; if (argv[0] == NULL) bb_show_usage(); /* Try to set personality */ - if (personality(pers) < 0) - goto failure; - - /* Try to execute the program */ - execvp(argv[0], argv); + if (personality(pers) >= 0) { + /* Try to execute the program */ + BB_EXECVP(argv[0], argv); + } -failure: - bb_perror_msg_and_die(argv[0]); + bb_simple_perror_msg_and_die(argv[0]); }