Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


cramfs_fs.h
01: #ifndef __CRAMFS_H
02: #define __CRAMFS_H
03: 
04: #include <linux/types.h>
05: #include <linux/magic.h>
06: 
07: #define CRAMFS_SIGNATURE        "Compressed ROMFS"
08: 
09: /*
10:  * Width of various bitfields in struct cramfs_inode.
11:  * Primarily used to generate warnings in mkcramfs.
12:  */
13: #define CRAMFS_MODE_WIDTH 16
14: #define CRAMFS_UID_WIDTH 16
15: #define CRAMFS_SIZE_WIDTH 24
16: #define CRAMFS_GID_WIDTH 8
17: #define CRAMFS_NAMELEN_WIDTH 6
18: #define CRAMFS_OFFSET_WIDTH 26
19: 
20: /*
21:  * Since inode.namelen is a unsigned 6-bit number, the maximum cramfs
22:  * path length is 63 << 2 = 252.
23:  */
24: #define CRAMFS_MAXPATHLEN (((1 << CRAMFS_NAMELEN_WIDTH) - 1) << 2)
25: 
26: /*
27:  * Reasonably terse representation of the inode data.
28:  */
29: struct cramfs_inode {
30:         __u32 mode:CRAMFS_MODE_WIDTH, uid:CRAMFS_UID_WIDTH;
31:         /* SIZE for device files is i_rdev */
32:         __u32 size:CRAMFS_SIZE_WIDTH, gid:CRAMFS_GID_WIDTH;
33:         /* NAMELEN is the length of the file name, divided by 4 and
34:            rounded up.  (cramfs doesn't support hard links.) */
35:         /* OFFSET: For symlinks and non-empty regular files, this
36:            contains the offset (divided by 4) of the file data in
37:            compressed form (starting with an array of block pointers;
38:            see README).  For non-empty directories it is the offset
39:            (divided by 4) of the inode of the first file in that
40:            directory.  For anything else, offset is zero. */
41:         __u32 namelen:CRAMFS_NAMELEN_WIDTH, offset:CRAMFS_OFFSET_WIDTH;
42: };
43: 
44: struct cramfs_info {
45:         __u32 crc;
46:         __u32 edition;
47:         __u32 blocks;
48:         __u32 files;
49: };
50: 
51: /*
52:  * Superblock information at the beginning of the FS.
53:  */
54: struct cramfs_super {
55:         __u32 magic;                    /* 0x28cd3d45 - random number */
56:         __u32 size;                     /* length in bytes */
57:         __u32 flags;                    /* feature flags */
58:         __u32 future;                   /* reserved for future use */
59:         __u8 signature[16];             /* "Compressed ROMFS" */
60:         struct cramfs_info fsid;        /* unique filesystem info */
61:         __u8 name[16];                  /* user-defined name */
62:         struct cramfs_inode root;       /* root inode data */
63: };
64: 
65: /*
66:  * Feature flags
67:  *
68:  * 0x00000000 - 0x000000ff: features that work for all past kernels
69:  * 0x00000100 - 0xffffffff: features that don't work for past kernels
70:  */
71: #define CRAMFS_FLAG_FSID_VERSION_2      0x00000001      /* fsid version #2 */
72: #define CRAMFS_FLAG_SORTED_DIRS         0x00000002      /* sorted dirs */
73: #define CRAMFS_FLAG_HOLES               0x00000100      /* support for holes */
74: #define CRAMFS_FLAG_WRONG_SIGNATURE     0x00000200      /* reserved */
75: #define CRAMFS_FLAG_SHIFTED_ROOT_OFFSET 0x00000400      /* shifted root fs */
76: 
77: /*
78:  * Valid values in super.flags.  Currently we refuse to mount
79:  * if (flags & ~CRAMFS_SUPPORTED_FLAGS).  Maybe that should be
80:  * changed to test super.future instead.
81:  */
82: #define CRAMFS_SUPPORTED_FLAGS  ( 0x000000ff \
83:                                 | CRAMFS_FLAG_HOLES \
84:                                 | CRAMFS_FLAG_WRONG_SIGNATURE \
85:                                 | CRAMFS_FLAG_SHIFTED_ROOT_OFFSET )
86: 
87: 
88: #endif
89: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/