137 lines
3.6 KiB
C
137 lines
3.6 KiB
C
/* 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 */
|