minix/include/minix/sffs.h
David van Moolenbroek ef7b484e5c Create SFFS library out of HGFS
This Shared Folders File System library (libsffs) now contains all the
file system logic originally in HGFS. The actual HGFS server code is
now a stub that passes on all the work to libsffs. The libhgfs library
is changed accordingly.
2012-04-09 18:08:26 +02:00

70 lines
2.4 KiB
C

/* Part of libsffs - (c) 2012, D.C. van Moolenbroek */
#ifndef _MINIX_SFFS_H
#define _MINIX_SFFS_H
#include <sys/types.h>
#include <sys/time.h>
#include <minix/u64.h>
typedef void *sffs_file_t; /* handle to open file */
typedef void *sffs_dir_t; /* handle to directory search */
struct sffs_attr {
u32_t a_mask; /* which fields to retrieve/set */
mode_t a_mode; /* file type and permissions */
u64_t a_size; /* file size */
struct timespec a_crtime; /* file creation time */
struct timespec a_atime; /* file access time */
struct timespec a_mtime; /* file modification time */
struct timespec a_ctime; /* file change time */
};
#define SFFS_ATTR_SIZE 0x01 /* get/set file size */
#define SFFS_ATTR_CRTIME 0x02 /* get/set file creation time */
#define SFFS_ATTR_ATIME 0x04 /* get/set file access time */
#define SFFS_ATTR_MTIME 0x08 /* get/set file modification time */
#define SFFS_ATTR_CTIME 0x10 /* get/set file change time */
#define SFFS_ATTR_MODE 0x20 /* get/set file mode */
struct sffs_table {
int (*t_open)(char *path, int flags, int mode, sffs_file_t *handle);
ssize_t (*t_read)(sffs_file_t handle, char *buf, size_t size, u64_t pos);
ssize_t (*t_write)(sffs_file_t handle, char *buf, size_t size, u64_t pos);
int (*t_close)(sffs_file_t handle);
size_t (*t_readbuf)(char **ptr);
size_t (*t_writebuf)(char **ptr);
int (*t_opendir)(char *path, sffs_dir_t *handle);
int (*t_readdir)(sffs_dir_t handle, unsigned int index, char *buf,
size_t size, struct sffs_attr *attr);
int (*t_closedir)(sffs_dir_t handle);
int (*t_getattr)(char *path, struct sffs_attr *attr);
int (*t_setattr)(char *path, struct sffs_attr *attr);
int (*t_mkdir)(char *path, int mode);
int (*t_unlink)(char *path);
int (*t_rmdir)(char *path);
int (*t_rename)(char *opath, char *npath);
int (*t_queryvol)(char *path, u64_t *free, u64_t *total);
};
struct sffs_params {
char p_prefix[PATH_MAX]; /* prefix for all paths used */
uid_t p_uid; /* UID that owns all files */
gid_t p_gid; /* GID that owns all files */
unsigned int p_file_mask; /* AND-mask to apply to file permissions */
unsigned int p_dir_mask; /* AND-mask to apply to directory perms */
int p_case_insens; /* case insensitivity flag */
};
int sffs_init(char *name, const struct sffs_table *table,
struct sffs_params *params);
void sffs_signal(int signo);
void sffs_loop(void);
#endif /* _MINIX_SFFS_H */