72
72
* query information about a mounted file system
74
extern int sfprov_get_blksize(sfp_mount_t *, uint64_t *);
75
extern int sfprov_get_blksused(sfp_mount_t *, uint64_t *);
76
extern int sfprov_get_blksavail(sfp_mount_t *, uint64_t *);
77
extern int sfprov_get_maxnamesize(sfp_mount_t *, uint32_t *);
78
extern int sfprov_get_readonly(sfp_mount_t *, uint32_t *);
74
typedef struct sffs_fsinfo {
82
extern int sfprov_get_fsinfo(sfp_mount_t *, sffs_fsinfo_t *);
81
85
* File operations: open/close/read/write/etc.
83
87
* open/create can return any relevant errno, however ENOENT
84
88
* generally means that the host file didn't exist.
90
typedef struct sffs_stat {
86
99
typedef struct sfp_file sfp_file_t;
88
extern int sfprov_create(sfp_mount_t *, char *path, sfp_file_t **fp);
101
extern int sfprov_create(sfp_mount_t *, char *path, mode_t mode,
102
sfp_file_t **fp, sffs_stat_t *stat);
89
103
extern int sfprov_open(sfp_mount_t *, char *path, sfp_file_t **fp);
90
104
extern int sfprov_close(sfp_file_t *fp);
91
105
extern int sfprov_read(sfp_file_t *, char * buffer, uint64_t offset,
103
117
extern int sfprov_get_atime(sfp_mount_t *, char *, timestruc_t *);
104
118
extern int sfprov_get_mtime(sfp_mount_t *, char *, timestruc_t *);
105
119
extern int sfprov_get_ctime(sfp_mount_t *, char *, timestruc_t *);
106
extern int sfprov_get_attr(sfp_mount_t *, char *, mode_t *, uint64_t *,
107
timestruc_t *, timestruc_t *, timestruc_t *);
120
extern int sfprov_get_attr(sfp_mount_t *, char *, sffs_stat_t *);
108
121
extern int sfprov_set_attr(sfp_mount_t *, char *, uint_t, mode_t,
109
122
timestruc_t, timestruc_t, timestruc_t);
110
123
extern int sfprov_set_size(sfp_mount_t *, char *, uint64_t);
114
127
* File/Directory operations
116
129
extern int sfprov_trunc(sfp_mount_t *, char *);
117
extern int sfprov_remove(sfp_mount_t *, char *path);
118
extern int sfprov_mkdir(sfp_mount_t *, char *path, sfp_file_t **fp);
130
extern int sfprov_remove(sfp_mount_t *, char *path, uint_t is_link);
131
extern int sfprov_mkdir(sfp_mount_t *, char *path, mode_t mode,
132
sfp_file_t **fp, sffs_stat_t *stat);
119
133
extern int sfprov_rmdir(sfp_mount_t *, char *path);
120
134
extern int sfprov_rename(sfp_mount_t *, char *from, char *to, uint_t is_dir);
138
* Symbolic link operations
140
extern int sfprov_set_show_symlinks(void);
141
extern int sfprov_readlink(sfp_mount_t *, char *path, char *target,
143
extern int sfprov_symlink(sfp_mount_t *, char *linkname, char *target,
123
148
* Read directory entries.
126
* a singly linked list of buffers, each containing an array of dirent's.
151
* a singly linked list of buffers, each containing an array of stat's+dirent's.
127
152
* sf_len is length of the sf_entries array, in bytes.
129
154
typedef struct sffs_dirents {
130
155
struct sffs_dirents *sf_next;
132
dirent64_t sf_entries[1];
159
dirent64_t sf_entry; /* this is variable length */
133
161
} sffs_dirents_t;
135
163
#define SFFS_DIRENTS_SIZE 8192
136
164
#define SFFS_DIRENTS_OFF (offsetof(sffs_dirents_t, sf_entries[0]))
137
#define SFFS_STATS_LEN 100
139
typedef struct sffs_stat {
142
timestruc_t sf_atime;
143
timestruc_t sf_mtime;
144
timestruc_t sf_ctime;
147
typedef struct sffs_stats {
148
struct sffs_stats *sf_next;
150
sffs_stat_t sf_stats[SFFS_STATS_LEN];
153
extern int sfprov_readdir(sfp_mount_t *mnt, char *path, sffs_dirents_t **dirents,
154
sffs_stats_t **stats);
166
extern int sfprov_readdir(sfp_mount_t *mnt, char *path,
167
sffs_dirents_t **dirents);
156
169
#ifdef __cplusplus