blob: 79137c9a7d7ca79c13fa2d2e2674d118181ca157 (
plain)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/* Part of libvboxfs - (c) 2012, D.C. van Moolenbroek */
#ifndef _VBOXFS_VBOXFS_H
#define _VBOXFS_VBOXFS_H
#define VBOXFS_CALL_CREATE 3 /* create, open, lookup */
#define VBOXFS_CALL_CLOSE 4 /* close handle */
#define VBOXFS_CALL_READ 5 /* read from file */
#define VBOXFS_CALL_WRITE 6 /* write to file */
#define VBOXFS_CALL_LIST 8 /* list directory contents */
#define VBOXFS_CALL_INFO 9 /* get/set file information */
#define VBOXFS_CALL_REMOVE 11 /* remove file or directory */
#define VBOXFS_CALL_UNMAP_FOLDER 13 /* unmap folder */
#define VBOXFS_CALL_RENAME 14 /* rename file or directory */
#define VBOXFS_CALL_SET_UTF8 16 /* switch to UTF8 */
#define VBOXFS_CALL_MAP_FOLDER 17 /* map folder */
#define VBOXFS_INVALID_HANDLE ((vboxfs_handle_t) ~0LL)
typedef u32_t vboxfs_root_t;
typedef u64_t vboxfs_handle_t;
typedef struct {
u16_t size;
u16_t len;
char data[PATH_MAX];
} vboxfs_path_t;
#define VBOXFS_NO_RESULT 0
#define VBOXFS_PATH_NOT_FOUND 1
#define VBOXFS_FILE_NOT_FOUND 2
#define VBOXFS_FILE_EXISTS 3
#define VBOXFS_FILE_CREATED 4
#define VBOXFS_FILE_REPLACED 5
#define VBOXFS_OBJATTR_ADD_NONE 1 /* no other attributes */
#define VBOXFS_OBJATTR_ADD_UNIX 2 /* POSIX attributes */
#define VBOXFS_OBJATTR_ADD_EATTR 3 /* extended attributes */
typedef struct {
u32_t mode;
u32_t add;
union {
struct {
u32_t uid;
u32_t gid;
u32_t nlinks;
u32_t dev;
u64_t inode;
u32_t flags;
u32_t gen;
u32_t rdev;
};
struct {
u64_t easize;
};
};
} vboxfs_objattr_t;
/* Thankfully, MINIX uses the universal UNIX mode values. */
#define VBOXFS_GET_MODE(mode) ((mode) & 0xffff)
#define VBOXFS_SET_MODE(type, perm) ((type) | ((perm) & ALLPERMS))
typedef struct {
u64_t size;
u64_t disksize;
u64_t atime;
u64_t mtime;
u64_t ctime;
u64_t crtime;
vboxfs_objattr_t attr;
} vboxfs_objinfo_t;
#define VBOXFS_CRFLAG_LOOKUP 0x00000001
#define VBOXFS_CRFLAG_DIRECTORY 0x00000004
#define VBOXFS_CRFLAG_OPEN_IF_EXISTS 0x00000000
#define VBOXFS_CRFLAG_FAIL_IF_EXISTS 0x00000010
#define VBOXFS_CRFLAG_REPLACE_IF_EXISTS 0x00000020
#define VBOXFS_CRFLAG_TRUNC_IF_EXISTS 0x00000030
#define VBOXFS_CRFLAG_CREATE_IF_NEW 0x00000000
#define VBOXFS_CRFLAG_FAIL_IF_NEW 0x00000100
#define VBOXFS_CRFLAG_READ 0x00001000
#define VBOXFS_CRFLAG_WRITE 0x00002000
#define VBOXFS_CRFLAG_APPEND 0x00004000
#define VBOXFS_CRFLAG_READ_ATTR 0x00010000
#define VBOXFS_CRFLAG_WRITE_ATTR 0x00020000
typedef struct {
vboxfs_handle_t handle;
u32_t result;
u32_t flags;
vboxfs_objinfo_t info;
} vboxfs_crinfo_t;
typedef struct {
vboxfs_objinfo_t info;
u16_t shortlen;
u16_t shortname[14];
vboxfs_path_t name; /* WARNING: name data size is dynamic! */
} vboxfs_dirinfo_t;
#define VBOXFS_INFO_GET 0x00 /* get file information */
#define VBOXFS_INFO_SET 0x01 /* set file information */
#define VBOXFS_INFO_SIZE 0x04 /* get/set file size */
#define VBOXFS_INFO_FILE 0x08 /* get/set file attributes */
#define VBOXFS_INFO_VOLUME 0x10 /* get volume information */
#define VBOXFS_REMOVE_FILE 0x01 /* remove file */
#define VBOXFS_REMOVE_DIR 0x02 /* remove directory */
#define VBOXFS_REMOVE_SYMLINK 0x04 /* remove symbolic link */
#define VBOXFS_RENAME_FILE 0x01 /* rename file */
#define VBOXFS_RENAME_DIR 0x02 /* rename directory */
#define VBOXFS_RENAME_REPLACE 0x04 /* replace target if it exists */
typedef struct {
u32_t namemax;
u8_t remote;
u8_t casesens;
u8_t readonly;
u8_t unicode;
u8_t fscomp;
u8_t filecomp;
u16_t reserved;
} vboxfs_fsprops_t;
typedef struct {
u64_t total;
u64_t free;
u32_t blocksize;
u32_t sectorsize;
u32_t serial;
vboxfs_fsprops_t props;
} vboxfs_volinfo_t;
#endif /* !_VBOXFS_VBOXFS_H */
|