Cross Reference: /dovecot/src/lib-fs/fs-api-private.h
fs-api-private.h revision 2766f1de8141c09767a959d2d2c3065c5a300bf0
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
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen#ifndef FS_API_PRIVATE_H
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen#define FS_API_PRIVATE_H
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainen#include "fs-api.h"
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenstruct fs_vfuncs {
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen struct fs *(*alloc)(void);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen int (*init)(struct fs *fs, const char *args,
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen const struct fs_settings *set);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen void (*deinit)(struct fs *fs);
e09c7dc961cb9cab04ec7cc79215c2f6318fbde0Timo Sirainen
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen enum fs_properties (*get_properties)(struct fs *fs);
e09c7dc961cb9cab04ec7cc79215c2f6318fbde0Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct fs_file *(*file_init)(struct fs *fs, const char *path,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen enum fs_open_mode mode,
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen enum fs_open_flags flags);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen void (*file_deinit)(struct fs_file *file);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen void (*set_async_callback)(struct fs_file *file,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen fs_file_async_callback_t *callback,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen void *context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen int (*wait_async)(struct fs *fs);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen void (*set_metadata)(struct fs_file *file, const char *key,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen const char *value);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen int (*get_metadata)(struct fs_file *file,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen const ARRAY_TYPE(fs_metadata) **metadata_r);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen bool (*prefetch)(struct fs_file *file, uoff_t length);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen ssize_t (*read)(struct fs_file *file, void *buf, size_t size);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen struct istream *(*read_stream)(struct fs_file *file,
0f9a8663b0ff6fe30389d02284a2b002c40914ebTimo Sirainen size_t max_buffer_size);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a9efdb661eb7a8a33aacfdcc3486dcc675a21543Timo Sirainen int (*write)(struct fs_file *file, const void *data, size_t size);
a9efdb661eb7a8a33aacfdcc3486dcc675a21543Timo Sirainen void (*write_stream)(struct fs_file *file);
fab850a6aee4aaef4f4795bd7946807a3ba45041Timo Sirainen int (*write_stream_finish)(struct fs_file *file, bool success);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen int (*lock)(struct fs_file *file, unsigned int secs,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen struct fs_lock **lock_r);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen void (*unlock)(struct fs_lock *lock);
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen int (*exists)(struct fs_file *file);
97afa073e3e1e0301dc41173ec34beb08edcce50Timo Sirainen int (*stat)(struct fs_file *file, struct stat *st_r);
97afa073e3e1e0301dc41173ec34beb08edcce50Timo Sirainen int (*copy)(struct fs_file *src, struct fs_file *dest);
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen int (*rename)(struct fs_file *src, struct fs_file *dest);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen int (*delete_file)(struct fs_file *file);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct fs_iter *(*iter_init)(struct fs *fs, const char *path);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *(*iter_next)(struct fs_iter *iter);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen int (*iter_deinit)(struct fs_iter *iter);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen};
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct fs {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *name;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct fs_vfuncs v;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct fs_settings set;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen string_t *last_error;
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen unsigned int files_open_count;
};
struct fs_file {
struct fs *fs;
struct ostream *output;
char *path;
};
struct fs_lock {
struct fs_file *file;
};
struct fs_iter {
struct fs *fs;
};
extern struct fs fs_class_posix;
extern struct fs fs_class_sis;
extern struct fs fs_class_sis_queue;
void fs_set_error(struct fs *fs, const char *fmt, ...) ATTR_FORMAT(2, 3);
void fs_set_critical(struct fs *fs, const char *fmt, ...) ATTR_FORMAT(2, 3);
void fs_set_error_async(struct fs *fs);
#endif