1/* vi: set sw=4 ts=4: */ 2/* 3 * linux32/linux64 allows for changing uname emulation. 4 * 5 * Copyright 2002 Andi Kleen, SuSE Labs. 6 * 7 * Licensed under GPL v2 or later, see file License for details. 8*/ 9 10#include <sys/personality.h> 11 12#include "libbb.h" 13 14int setarch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 15int setarch_main(int argc UNUSED_PARAM, char **argv) 16{ 17 int pers; 18 19 /* Figure out what personality we are supposed to switch to ... 20 * we can be invoked as either: 21 * argv[0],argv[1] == "setarch","personality" 22 * argv[0] == "personality" 23 */ 24 if (ENABLE_SETARCH && applet_name[0] == 's' 25 && argv[1] && strncpy(argv[1], "linux", 5) 26 ) { 27 applet_name = argv[1]; 28 argv++; 29 } 30 if (applet_name[5] == '6') /* linux64 */ 31 pers = PER_LINUX; 32 else if (applet_name[5] == '3') /* linux32 */ 33 pers = PER_LINUX32; 34 else 35 bb_show_usage(); 36 37 argv++; 38 if (argv[0] == NULL) 39 bb_show_usage(); 40 41 /* Try to set personality */ 42 if (personality(pers) >= 0) { 43 /* Try to execute the program */ 44 BB_EXECVP(argv[0], argv); 45 } 46 47 bb_simple_perror_msg_and_die(argv[0]); 48} 49