]> git.wh0rd.org - ICEs.git/blame - bfin-rets-insn/initramfs.i.3
initial import
[ICEs.git] / bfin-rets-insn / initramfs.i.3
CommitLineData
45516216 1typedef int (*initcall_t) (void);
2 char *message;
3 void error(char *x)
4{
5 if (!message)
6 message = x;
7}
8
9
10enum state {
11 Start, Collect, GotHeader, SkipIt, GotName, CopyFile, GotSymlink, Reset
12} state, next_state;
13
14long long this_header, next_header;
15
16char *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
45int (*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}
71extern 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;