forked from xerub/img4lib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvfs.h
71 lines (61 loc) · 3.19 KB
/
vfs.h
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef VFS_H_included
#define VFS_H_included
typedef struct file_ops *FHANDLE;
struct file_ops {
ssize_t (*read)(FHANDLE fd, void *buf, size_t count);
ssize_t (*write)(FHANDLE fd, const void *buf, size_t count);
off_t (*lseek)(FHANDLE fd, off_t offset, int whence);
int (*ioctl)(FHANDLE fd, unsigned long request, ...);
int (*ftruncate)(FHANDLE fd, off_t length);
int (*fsync)(FHANDLE fd);
int (*close)(FHANDLE fd);
ssize_t (*length)(FHANDLE fd); /* convenience */
int flags;
};
#define IOCTL_MEM_GET_DATAPTR 10 /* (void **, size_t *) // working data of current file */
#define IOCTL_MEM_GET_BACKING 11 /* (void **, size_t *) // underlying backing store */
#define IOCTL_MEM_SET_FUNCS 12 /* (realloc_t, free_t) */
#define IOCTL_ENC_SET_NOENC 30 /* (void) */
#define IOCTL_LZSS_GET_WTOWER 40 /* (void **, size_t *) */
#define IOCTL_LZSS_SET_WTOWER 41 /* (void *, size_t) */
#define IOCTL_LZFSE_SET_LZSS 42 /* (void) */
#define IOCTL_LZFSE_SET_NOCOMP 43 /* (void) */
#define IOCTL_LZFSE_GET_LENGTH 44 /* (unsigned long long *) */
#define IOCTL_IMG4_GET_TYPE 60 /* (unsigned *) */
#define IOCTL_IMG4_SET_TYPE 61 /* (unsigned) */
#define IOCTL_IMG4_GET_MANIFEST 62 /* (void **, size_t *) */
#define IOCTL_IMG4_SET_MANIFEST 63 /* (void *, size_t) */
#define IOCTL_IMG4_GET_NONCE 64 /* (unsigned long long *) */
#define IOCTL_IMG4_SET_NONCE 65 /* (unsigned long long) */
#define IOCTL_IMG4_GET_KEYBAG 66 /* (void **, size_t *) */
#define IOCTL_IMG4_SET_KEYBAG 67 /* (void *, size_t) */
#define IOCTL_IMG4_GET_KEYBAG2 68 /* (unsigned char[48], unsigned char[48]) */
#define IOCTL_IMG4_SET_KEYBAG2 69 /* (unsigned char[48], unsigned char[48]) */
#define IOCTL_IMG4_GET_VERSION 70 /* (void **, size_t *) */
#define IOCTL_IMG4_SET_VERSION 71 /* (void *, size_t) */
#define IOCTL_IMG4_GET_EP_INFO 72 /* (void **, size_t *) */
#define IOCTL_IMG4_SET_EP_INFO 73 /* (void *, size_t) */
#define IOCTL_IMG4_QUERY_PROP 80 /* (const char *, unsigned char *, unsigned int *) */
#define IOCTL_IMG4_EVAL_TRUST 90 /* (void *) */
#define FLAG_IMG4_SKIP_DECOMPRESSION (1 << 0)
#define FLAG_IMG4_VERIFY_HASH (1 << 1)
#define FLAG_IMG4_UPDATE_HASH (1 << 2)
typedef void (*free_t)(void *ptr);
typedef void *(*realloc_t)(void *ptr, size_t size);
FHANDLE file_open(const char *pathname, int flags, ...);
/*
* buf is not freed on error, but is freed on close (see IOCTL_MEM_SET_FUNCS)
* buf may get reallocated any time. IOCTL_MEM_GET_DATAPTR to access the data
*/
FHANDLE memory_open(int flags, void *buf, size_t size);
FHANDLE memory_open_from_file(const char *filename, int flags);
/* these functions close 'other' in case of failure.
* writing, closing or altering 'other' is forbidden,
* though you may ioctl(GET) after fsync() the parent
*/
FHANDLE enc_reopen(FHANDLE other, const unsigned char iv[16], const unsigned char key[32]);
FHANDLE lzss_reopen(FHANDLE other);
FHANDLE lzfse_reopen(FHANDLE other, size_t usize); /* pass usize=0 to decompress as much as possible */
FHANDLE sub_reopen(FHANDLE other, size_t offset, off_t length); /* pass length<0 to slice to the end of file */
FHANDLE img4_reopen(FHANDLE other, const unsigned char *ivkey, int flags);
#endif