setarch: do not try to use non-existent data in argv[]

diff --git a/util-linux/setarch.c b/util-linux/setarch.c
index 250a938..8213382 100644
--- a/util-linux/setarch.c
+++ b/util-linux/setarch.c
@@ -1,6 +1,6 @@
 /* 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.
  *
@@ -14,32 +14,32 @@
 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 (argv[0][5] == '6') /* linux64 */
-		pers = PER_LINUX;
-	else if (argv[0][5] == '3') /* linux32 */
-		pers = PER_LINUX32;
-	else if (pers == -1 && argv[1] != NULL) {
-		pers = PER_LINUX32;
-		++argv;
-		goto retry;
+	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 (applet_name[5] == '3') /* linux32 */
+		pers = PER_LINUX32;
+	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) {
-
 		/* Try to execute the program */
 		BB_EXECVP(argv[0], argv);
 	}