]>
Commit | Line | Data |
---|---|---|
45516216 | 1 | typedef int (*initcall_t) (void); |
2 | char *message; | |
3 | void error(char *x) | |
4 | { | |
5 | if (!message) | |
6 | message = x; | |
7 | } | |
8 | ||
9 | ||
10 | enum state { | |
11 | Start, Collect, GotHeader, SkipIt, GotName, CopyFile, GotSymlink, Reset | |
12 | } state, next_state; | |
13 | ||
14 | long long this_header, next_header; | |
15 | ||
16 | char *collected; | |
17 | int do_start(void) | |
18 | { | |
19 | } | |
20 | int do_collect(void) | |
21 | { | |
22 | } | |
23 | int do_header(void) | |
24 | { | |
25 | if (memcmp(collected, "070707", 6) == 0) { | |
26 | error("incorrect cpio method used: use -H newc option"); | |
27 | } | |
28 | } | |
29 | int do_skip(void) | |
30 | { | |
31 | } | |
32 | int do_reset(void) | |
33 | { | |
34 | } | |
35 | int do_name(void) | |
36 | { | |
37 | } | |
38 | int do_copy(void) | |
39 | { | |
40 | } | |
41 | int do_symlink(void) | |
42 | { | |
43 | } | |
44 | ||
45 | int (*actions[]) (void) = | |
46 | { | |
47 | [Start] = do_start,[Collect] = do_collect,[GotHeader] = | |
48 | do_header,[SkipIt] = do_skip,[GotName] = | |
49 | do_name,[CopyFile] = do_copy,[GotSymlink] = | |
50 | do_symlink,[Reset] = do_reset,}; | |
51 | int | |
52 | write_buffer(char *buf, | |
53 | unsigned len) | |
54 | { | |
55 | while (!actions[state] ()) ; | |
56 | } | |
57 | char * | |
58 | unpack_to_rootfs(char *buf, | |
59 | unsigned len, | |
60 | int check_only) | |
61 | { | |
62 | int written; | |
63 | while (!message && len) { | |
64 | if (*buf == '0' && !(this_header & 3)) { | |
65 | written = write_buffer(buf, len); | |
66 | } | |
67 | if (state != Reset) | |
68 | error("junk in gzipped archive"); | |
69 | } | |
70 | } | |
71 | extern char __initramfs_start[], __initramfs_end[]; | |
72 | int populate_rootfs(void) | |
73 | { | |
74 | char *err = | |
75 | unpack_to_rootfs(__initramfs_start, | |
76 | __initramfs_end - __initramfs_start, 0); | |
77 | } | |
78 | initcall_t __initcall_populate_rootfsrootfs __attribute__ ((__used__)) | |
79 | = | |
80 | populate_rootfs; |