return ret;
}
-
-
int fs_lock(struct fs_file *file, unsigned int secs, struct fs_lock **lock_r)
{
int ret;
{
int ret;
+ if (file->fs->v.stat == NULL) {
+ fs_set_error(file->fs, "fs_stat() not supported");
+ return -1;
+ }
+
if (!file->read_or_prefetch_counted &&
!file->lookup_metadata_counted && !file->stat_counted) {
file->stat_counted = TRUE;
i_assert(src->fs == dest->fs);
+ if (src->fs->v.copy == NULL) {
+ fs_set_error(src->fs, "fs_copy() not supported");
+ return -1;
+ }
+
dest->fs->stats.copy_count++;
fs_file_timing_start(dest, FS_OP_COPY);
T_BEGIN {
if (gettimeofday(&now, NULL) < 0)
i_fatal("gettimeofday() failed: %m");
}
- T_BEGIN {
+ if (fs->v.iter_init == NULL) {
+ iter = i_new(struct fs_iter, 1);
+ iter->fs = fs;
+ } else T_BEGIN {
iter = fs->v.iter_init(fs, path, flags);
} T_END;
iter->start_time = now;
*_iter = NULL;
DLLIST_REMOVE(&iter->fs->iters, iter);
- T_BEGIN {
+
+ if (iter->fs->v.iter_deinit == NULL) {
+ fs_set_error(iter->fs, "FS teration not supported");
+ i_free(iter);
+ ret = -1;
+ } else T_BEGIN {
ret = iter->fs->v.iter_deinit(iter);
} T_END;
return ret;
{
const char *ret;
+ if (iter->fs->v.iter_next == NULL)
+ return NULL;
T_BEGIN {
ret = iter->fs->v.iter_next(iter);
} T_END;