CPIO parsing, kfs building, vfs tweaks
[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
7 struct cpio_newc_header
8 {
9         char c_magic[6];
10         char c_ino[8];
11         char c_mode[8];
12         char c_uid[8];
13         char c_gid[8];
14         char c_nlink[8];
15         char c_mtime[8];
16         char c_filesize[8];     /* must be 0 for FIFOs and directories */
17         char c_dev_maj[8];
18         char c_dev_min[8];
19         char c_rdev_maj[8];     /* only valid for chr and blk special files */
20         char c_rdev_min[8];     /* only valid for chr and blk special files */
21         char c_namesize[8];     /* count includes terminating NUL in pathname */
22         char c_chksum[8];       /* for CRC format the sum of all the bytes in the file*/
23 };
24
25 /* Header passed around when initing a FS based on a CPIO archive */
26 struct cpio_bin_hdr
27 {
28         unsigned long   c_ino;  /* FYI: we ignore this */
29         int                             c_mode;
30         uid_t                   c_uid;
31         gid_t                   c_gid;
32         unsigned int    c_nlink; /* not sure how this makes CPIO-sense, ignoring */
33         unsigned long   c_mtime;
34         size_t                  c_filesize;
35         unsigned long   c_dev_maj;
36         unsigned long   c_dev_min;
37         unsigned long   c_rdev_maj;
38         unsigned long   c_rdev_min;
39         char                    *c_filename;
40         void                    *c_filestart;
41 };
42
43 void parse_cpio_entries(struct super_block *sb, void *cpio_b);
44
45 /* Helper function: converts src non-null-term string's n bytes from base 16 to
46  * a long, using buf as space.  Make sure buf is n + 1. */
47 static inline long cpio_strntol(char *buf, char *src, size_t n)
48 {
49         memcpy(buf, src, n);
50         buf[n] = '\0';
51         return strtol(buf, 0, 16);
52 }
53
54 #endif  /* ROS_KERN_CPIO_H */