Ejemplo n.º 1
0
static int subdir_link(const char *from, const char *to)
{
	struct subdir *d = subdir_get();
	char *newfrom;
	char *newto;
	int err = subdir_addpath(d, from, &newfrom);
	if (!err) {
		err = subdir_addpath(d, to, &newto);
		if (!err) {
			err = fuse_fs_link(d->next, newfrom, newto);
			free(newto);
		}
		free(newfrom);
	}
	return err;
}
Ejemplo n.º 2
0
static int subdir_rename(const char *from, const char *to, unsigned int flags)
{
	struct subdir *d = subdir_get();
	char *newfrom;
	char *newto;
	int err = subdir_addpath(d, from, &newfrom);
	if (!err) {
		err = subdir_addpath(d, to, &newto);
		if (!err) {
			err = fuse_fs_rename(d->next, newfrom, newto, flags);
			free(newto);
		}
		free(newfrom);
	}
	return err;
}
Ejemplo n.º 3
0
static int subdir_access(const char *path, int mask)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_access(d->next, newpath, mask);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 4
0
static int subdir_utimens(const char *path, const struct timespec ts[2])
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_utimens(d->next, newpath, ts);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 5
0
static int subdir_truncate(const char *path, off_t size)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_truncate(d->next, newpath, size);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 6
0
static int subdir_removexattr(const char *path, const char *name)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_removexattr(d->next, newpath, name);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 7
0
static int subdir_bmap(const char *path, size_t blocksize, uint64_t *idx)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_bmap(d->next, newpath, blocksize, idx);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 8
0
static int subdir_listxattr(const char *path, char *list, size_t size)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_listxattr(d->next, newpath, list, size);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 9
0
static int subdir_release(const char *path, struct fuse_file_info *fi)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_release(d->next, newpath, fi);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 10
0
static int subdir_chmod(const char *path, mode_t mode)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_chmod(d->next, newpath, mode);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 11
0
static int subdir_statfs(const char *path, struct statvfs *stbuf)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_statfs(d->next, newpath, stbuf);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 12
0
static int subdir_symlink(const char *from, const char *path)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_symlink(d->next, from, newpath);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 13
0
static int subdir_chown(const char *path, uid_t uid, gid_t gid)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_chown(d->next, newpath, uid, gid);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 14
0
static int subdir_setcrtime(const char *path, const struct timespec *crtime)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_setcrtime(d->next, newpath, crtime);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 15
0
static int subdir_chflags(const char *path, uint32_t flags)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_chflags(d->next, newpath, flags);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 16
0
static int subdir_setattr_x(const char *path, struct setattr_x *attr)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_setattr_x(d->next, newpath, attr);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 17
0
static int subdir_fsyncdir(const char *path, int isdatasync,
			   struct fuse_file_info *fi)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_fsyncdir(d->next, newpath, isdatasync, fi);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 18
0
static int subdir_lock(const char *path, struct fuse_file_info *fi, int cmd,
		       struct flock *lock)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_lock(d->next, newpath, fi, cmd, lock);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 19
0
static int subdir_write_buf(const char *path, struct fuse_bufvec *buf,
			off_t offset, struct fuse_file_info *fi)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_write_buf(d->next, newpath, buf, offset, fi);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 20
0
static int subdir_readlink(const char *path, char *buf, size_t size)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_readlink(d->next, newpath, buf, size);
		if (!err && d->rellinks)
			transform_symlink(d, newpath, buf, size);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 21
0
static int subdir_setxattr(const char *path, const char *name,
			   const char *value, size_t size, int flags)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_setxattr(d->next, newpath, name, value, size,
				       flags);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 22
0
static int subdir_exchange(const char *path1, const char *path2,
			   unsigned long options)
{
	struct subdir *d = subdir_get();
	char *new1;
	char *new2;
	int err;

	err = subdir_addpath(d, path1, &new1);
	if (err) {
		return err;
	}
	err = subdir_addpath(d, path2, &new2);
	if (err) {
		free(new1);
		return err;
	}
	err = fuse_fs_exchange(d->next, new1, new2, options);
	free(new1);
	free(new2);
	return err;
}
Ejemplo n.º 23
0
static int subdir_readdir(const char *path, void *buf,
			  fuse_fill_dir_t filler, off_t offset,
			  struct fuse_file_info *fi)
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
		err = fuse_fs_readdir(d->next, newpath, buf, filler, offset,
				      fi);
		free(newpath);
	}
	return err;
}
Ejemplo n.º 24
0
static int subdir_getxattr(const char *path, const char *name, char *value,
			   size_t size)
#endif
{
	struct subdir *d = subdir_get();
	char *newpath;
	int err = subdir_addpath(d, path, &newpath);
	if (!err) {
#ifdef __APPLE__
		err = fuse_fs_getxattr(d->next, newpath, name, value, size, position);
#else
		err = fuse_fs_getxattr(d->next, newpath, name, value, size);
#endif
		free(newpath);
	}
	return err;
}