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