Contents of /trunk/mkinitrd-magellan/busybox/util-linux/setarch.c
Parent Directory | Revision Log
Revision 532 -
(show annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
File MIME type: text/plain
File size: 1104 byte(s)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
File MIME type: text/plain
File size: 1104 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
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 <stdlib.h> |
11 | #include <unistd.h> |
12 | #include <string.h> |
13 | #include <errno.h> |
14 | #include <stdio.h> |
15 | #include <sys/personality.h> |
16 | |
17 | #include "busybox.h" |
18 | |
19 | int setarch_main(int ATTRIBUTE_UNUSED argc, char **argv) |
20 | { |
21 | int pers = -1; |
22 | |
23 | /* Figure out what personality we are supposed to switch to ... |
24 | * we can be invoked as either: |
25 | * argv[0],argv[1] -> "setarch","personality" |
26 | * argv[0] -> "personality" |
27 | */ |
28 | retry: |
29 | if (argv[0][5] == '6') /* linux64 */ |
30 | pers = PER_LINUX; |
31 | else if (argv[0][5] == '3') /* linux32 */ |
32 | pers = PER_LINUX32; |
33 | else if (pers == -1 && argv[1] != NULL) { |
34 | pers = PER_LINUX32; |
35 | ++argv; |
36 | goto retry; |
37 | } |
38 | |
39 | /* make user actually gave us something to do */ |
40 | ++argv; |
41 | if (argv[0] == NULL) |
42 | bb_show_usage(); |
43 | |
44 | /* Try to set personality */ |
45 | if (personality(pers) >= 0) { |
46 | |
47 | /* Try to execute the program */ |
48 | execvp(argv[0], argv); |
49 | } |
50 | |
51 | bb_perror_msg_and_die("%s", argv[0]); |
52 | } |