struct sis_queue_fs {
struct fs fs;
- struct fs *super;
char *queue_dir;
};
static void fs_sis_queue_copy_error(struct sis_queue_fs *fs)
{
- fs_set_error(&fs->fs, "%s", fs_last_error(fs->super));
+ fs_set_error(&fs->fs, "%s", fs_last_error(fs->fs.parent));
}
static void fs_sis_queue_file_copy_error(struct sis_queue_fs_file *file)
parent_args = "";
else
parent_name = t_strdup_until(parent_name, parent_args++);
- if (fs_init(parent_name, parent_args, set, &fs->super, &error) < 0) {
+ if (fs_init(parent_name, parent_args, set, &_fs->parent, &error) < 0) {
fs_set_error(_fs, "%s", error);
return -1;
}
{
struct sis_queue_fs *fs = (struct sis_queue_fs *)_fs;
- if (fs->super != NULL)
- fs_deinit(&fs->super);
+ if (_fs->parent != NULL)
+ fs_deinit(&_fs->parent);
i_free(fs->queue_dir);
i_free(fs);
}
static enum fs_properties fs_sis_queue_get_properties(struct fs *_fs)
{
- struct sis_queue_fs *fs = (struct sis_queue_fs *)_fs;
-
- return fs_get_properties(fs->super);
+ return fs_get_properties(_fs->parent);
}
static struct fs_file *
if (mode == FS_OPEN_MODE_APPEND)
fs_set_error(_fs, "APPEND mode not supported");
else
- file->super = fs_file_init(fs->super, path, mode | flags);
+ file->super = fs_file_init(_fs->parent, path, mode | flags);
return &file->file;
}
static int fs_sis_queue_wait_async(struct fs *_fs)
{
- struct sis_queue_fs *fs = (struct sis_queue_fs *)_fs;
-
- return fs_wait_async(fs->super);
+ return fs_wait_async(_fs->parent);
}
static void
fname = path;
queue_path = t_strdup_printf("%s/%s", fs->queue_dir, fname);
- queue_file = fs_file_init(fs->super, queue_path, FS_OPEN_MODE_CREATE);
+ queue_file = fs_file_init(fs->fs.parent, queue_path, FS_OPEN_MODE_CREATE);
if (fs_write(queue_file, "", 0) < 0 && errno != EEXIST)
- i_error("fs-sis-queue: %s", fs_last_error(fs->super));
+ i_error("fs-sis-queue: %s", fs_last_error(fs->fs.parent));
fs_file_deinit(&queue_file);
}
fs_sis_queue_iter_init(struct fs *_fs, const char *path,
enum fs_iter_flags flags)
{
- struct sis_queue_fs *fs = (struct sis_queue_fs *)_fs;
-
- return fs_iter_init(fs->super, path, flags);
+ return fs_iter_init(_fs->parent, path, flags);
}
const struct fs fs_class_sis_queue = {
struct sis_fs {
struct fs fs;
- struct fs *super;
};
struct sis_fs_file {
static void fs_sis_copy_error(struct sis_fs *fs)
{
- fs_set_error(&fs->fs, "%s", fs_last_error(fs->super));
+ fs_set_error(&fs->fs, "%s", fs_last_error(fs->fs.parent));
}
static void fs_sis_file_copy_error(struct sis_fs_file *file)
static int
fs_sis_init(struct fs *_fs, const char *args, const struct fs_settings *set)
{
- struct sis_fs *fs = (struct sis_fs *)_fs;
enum fs_properties props;
const char *parent_name, *parent_args, *error;
parent_name = t_strdup_until(args, parent_args);
parent_args++;
}
- if (fs_init(parent_name, parent_args, set, &fs->super, &error) < 0) {
+ if (fs_init(parent_name, parent_args, set, &_fs->parent, &error) < 0) {
fs_set_error(_fs, "%s", error);
return -1;
}
- props = fs_get_properties(fs->super);
+ props = fs_get_properties(_fs->parent);
if ((props & FS_SIS_REQUIRED_PROPS) != FS_SIS_REQUIRED_PROPS) {
fs_set_error(_fs, "%s backend can't be used with SIS",
parent_name);
{
struct sis_fs *fs = (struct sis_fs *)_fs;
- if (fs->super != NULL)
- fs_deinit(&fs->super);
+ if (_fs->parent != NULL)
+ fs_deinit(&_fs->parent);
i_free(fs);
}
static enum fs_properties fs_sis_get_properties(struct fs *_fs)
{
- struct sis_fs *fs = (struct sis_fs *)_fs;
-
- return fs_get_properties(fs->super);
+ return fs_get_properties(_fs->parent);
}
static struct fs_file *
/* if hashes/<hash> already exists, open it */
file->hash_path = i_strdup_printf("%s/"HASH_DIR_NAME"/%s", dir, hash);
- file->hash_file = fs_file_init(fs->super, file->hash_path,
+ file->hash_file = fs_file_init(_fs->parent, file->hash_path,
FS_OPEN_MODE_READONLY);
file->hash_input = fs_read_stream(file->hash_file, IO_BLOCK_SIZE);
i_stream_destroy(&file->hash_input);
}
- file->super = fs_file_init(fs->super, path, mode | flags);
+ file->super = fs_file_init(_fs->parent, path, mode | flags);
return &file->file;
}
static int fs_sis_wait_async(struct fs *_fs)
{
- struct sis_fs *fs = (struct sis_fs *)_fs;
-
- return fs_wait_async(fs->super);
+ return fs_wait_async(_fs->parent);
}
static void
static struct fs_iter *
fs_sis_iter_init(struct fs *_fs, const char *path, enum fs_iter_flags flags)
{
- struct sis_fs *fs = (struct sis_fs *)_fs;
-
- return fs_iter_init(fs->super, path, flags);
+ return fs_iter_init(_fs->parent, path, flags);
}
const struct fs fs_class_sis = {