summaryrefslogtreecommitdiff
path: root/minix/lib/libvboxfs/vboxfs.h
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 */