KFS initrd supports symlinks
[akaros.git] / kern / include / cpio.h
1 #ifndef ROS_KERN_CPIO_H
2 #define ROS_KERN_CPIO_H
3
4 #define CPIO_NEW_ASCII  070701
5 #define CPIO_CRC_ASCII  070702
6 /* Mode bits */
7 #define CPIO_FILE_MASK  0170000
8 #define CPIO_SOCKET             0120000
9 #define CPIO_SYMLINK    0120000
10 #define CPIO_REG_FILE   0100000
11 #define CPIO_BLK_SPEC   0060000
12 #define CPIO_DIRECTORY  0040000
13 #define CPIO_CHAR_SPEC  0020000
14 #define CPIO_FIFO_PIPE  0010000
15 #define CPIO_SUID               0004000
16 #define CPIO_SGID               0002000
17 #define CPIO_STICKY             0001000
18 #define CPIO_PERM_MASK  0000777
19
20 struct cpio_newc_header
21 {
22         char c_magic[6];
23         char c_ino[8];
24         char c_mode[8];
25         char c_uid[8];
26         char c_gid[8];
27         char c_nlink[8];
28         char c_mtime[8];
29         char c_filesize[8];     /* must be 0 for FIFOs and directories */
30         char c_dev_maj[8];
31         char c_dev_min[8];
32         char c_rdev_maj[8];     /* only valid for chr and blk special files */
33         char c_rdev_min[8];     /* only valid for chr and blk special files */
34         char c_namesize[8];     /* count includes terminating NUL in pathname */
35         char c_chksum[8];       /* for CRC format the sum of all the bytes in the file*/
36 };
37
38 /* Header passed around when initing a FS based on a CPIO archive */
39 struct cpio_bin_hdr
40 {
41         unsigned long   c_ino;  /* FYI: we ignore this */
42         int                             c_mode;
43         uid_t                   c_uid;
44         gid_t                   c_gid;
45         unsigned int    c_nlink; /* not sure how this makes CPIO-sense, ignoring */
46         unsigned long   c_mtime;
47         size_t                  c_filesize;
48         unsigned long   c_dev_maj;
49         unsigned long   c_dev_min;
50         unsigned long   c_rdev_maj;
51         unsigned long   c_rdev_min;
52         char                    *c_filename;
53         void                    *c_filestart;
54 };
55
56 void parse_cpio_entries(struct super_block *sb, void *cpio_b);
57
58 /* Helper function: converts src non-null-term string's n bytes from base 16 to
59  * a long, using buf as space.  Make sure buf is n + 1. */
60 static inline long cpio_strntol(char *buf, char *src, size_t n)
61 {
62         memcpy(buf, src, n);
63         buf[n] = '\0';
64         return strtol(buf, 0, 16);
65 }
66
67 #endif  /* ROS_KERN_CPIO_H */