Signed-off-by: Gao Xiang <hsiang...@aol.com> --- fuse/Makefile.am | 2 +- fuse/main.c | 34 +++++++++++++++++++++-- fuse/read.c | 59 ---------------------------------------- fuse/read.h | 17 ------------ include/erofs/internal.h | 6 ++-- lib/data.c | 24 +++++++++++++--- lib/namei.c | 2 +- 7 files changed, 55 insertions(+), 89 deletions(-) delete mode 100644 fuse/read.c delete mode 100644 fuse/read.h
diff --git a/fuse/Makefile.am b/fuse/Makefile.am index f37069ff7f12..21a1ee975141 100644 --- a/fuse/Makefile.am +++ b/fuse/Makefile.am @@ -3,7 +3,7 @@ AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = erofsfuse -erofsfuse_SOURCES = main.c read.c readir.c +erofsfuse_SOURCES = main.c readir.c erofsfuse_CFLAGS = -Wall -Werror \ -I$(top_srcdir)/include \ $(shell pkg-config fuse --cflags) \ diff --git a/fuse/main.c b/fuse/main.c index fee90154a251..9ac8149c88d9 100644 --- a/fuse/main.c +++ b/fuse/main.c @@ -12,7 +12,6 @@ #include <stddef.h> #include "erofs/print.h" -#include "read.h" #include "readir.h" #include "erofs/io.h" @@ -151,12 +150,41 @@ int erofs_getattr(const char *path, struct stat *stbuf) return 0; } +static int erofsfuse_read(const char *path, char *buffer, + size_t size, off_t offset, + struct fuse_file_info *fi) +{ + int ret; + struct erofs_inode vi; + + UNUSED(fi); + erofs_info("path:%s size=%zd offset=%llu", path, size, (long long)offset); + + ret = erofs_ilookup(path, &vi); + if (ret) + return ret; + + ret = erofs_pread(&vi, buffer, size, offset); + if (ret) + return ret; + return size; +} + +static int erofsfuse_readlink(const char *path, char *buffer, size_t size) +{ + int ret = erofsfuse_read(path, buffer, size, 0, NULL); + + if (ret < 0) + return ret; + return 0; +} + static struct fuse_operations erofs_ops = { - .readlink = erofs_readlink, + .readlink = erofsfuse_readlink, .getattr = erofs_getattr, .readdir = erofs_readdir, .open = erofs_open, - .read = erofs_read, + .read = erofsfuse_read, .init = erofs_init, }; diff --git a/fuse/read.c b/fuse/read.c deleted file mode 100644 index 2ef979ddba63..000000000000 --- a/fuse/read.c +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * erofs-utils/fuse/read.c - * - * Created by Li Guifu <blucer...@gmail.com> - * Compression support by Huang Jianan <huangjia...@oppo.com> - */ -#include "read.h" -#include <errno.h> -#include <linux/fs.h> -#include <sys/stat.h> -#include <string.h> - -#include "erofs/defs.h" -#include "erofs/internal.h" -#include "erofs/print.h" -#include "erofs/io.h" -#include "erofs/decompress.h" - -int erofs_read(const char *path, char *buffer, size_t size, off_t offset, - struct fuse_file_info *fi) -{ - int ret; - struct erofs_inode vi; - - UNUSED(fi); - erofs_info("path:%s size=%zd offset=%llu", path, size, (long long)offset); - - ret = erofs_ilookup(path, &vi); - if (ret) - return ret; - - erofs_info("path:%s nid=%llu mode=%u", path, vi.nid | 0ULL, vi.datalayout); - switch (vi.datalayout) { - case EROFS_INODE_FLAT_PLAIN: - case EROFS_INODE_FLAT_INLINE: - ret = erofs_read_raw_data(&vi, buffer, offset, size); - break; - case EROFS_INODE_FLAT_COMPRESSION_LEGACY: - case EROFS_INODE_FLAT_COMPRESSION: - ret = z_erofs_read_data(&vi, buffer, offset, size); - break; - - default: - return -EINVAL; - } - - return ret ? ret : size; -} - -int erofs_readlink(const char *path, char *buffer, size_t size) -{ - int ret = erofs_read(path, buffer, size, 0, NULL); - - if (ret < 0) - return ret; - return 0; -} - diff --git a/fuse/read.h b/fuse/read.h deleted file mode 100644 index e901c607dc91..000000000000 --- a/fuse/read.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * erofs-utils/fuse/read.h - * - * Created by Li Guifu <blucer...@gmail.com> - */ -#ifndef __EROFS_READ_H -#define __EROFS_READ_H - -#include <fuse.h> -#include <fuse_opt.h> - -int erofs_read(const char *path, char *buffer, size_t size, off_t offset, - struct fuse_file_info *fi); -int erofs_readlink(const char *path, char *buffer, size_t size); - -#endif diff --git a/include/erofs/internal.h b/include/erofs/internal.h index 7357ed75e3f8..13420a8e7733 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -245,10 +245,8 @@ int erofs_read_superblock(void); int erofs_ilookup(const char *path, struct erofs_inode *vi); /* data.c */ -int erofs_read_raw_data(struct erofs_inode *inode, char *buffer, - erofs_off_t offset, erofs_off_t size); -int z_erofs_read_data(struct erofs_inode *inode, char *buffer, - erofs_off_t size, erofs_off_t offset); +int erofs_pread(struct erofs_inode *inode, char *buf, + erofs_off_t count, erofs_off_t offset); /* zmap.c */ int z_erofs_fill_inode(struct erofs_inode *vi); int z_erofs_map_blocks_iter(struct erofs_inode *vi, diff --git a/lib/data.c b/lib/data.c index 62fd057185ee..34811e49512f 100644 --- a/lib/data.c +++ b/lib/data.c @@ -70,8 +70,8 @@ err_out: return err; } -int erofs_read_raw_data(struct erofs_inode *inode, char *buffer, - erofs_off_t offset, erofs_off_t size) +static int erofs_read_raw_data(struct erofs_inode *inode, char *buffer, + erofs_off_t size, erofs_off_t offset) { struct erofs_map_blocks map = { .index = UINT_MAX, @@ -117,8 +117,8 @@ int erofs_read_raw_data(struct erofs_inode *inode, char *buffer, return 0; } -int z_erofs_read_data(struct erofs_inode *inode, char *buffer, - erofs_off_t offset, erofs_off_t size) +static int z_erofs_read_data(struct erofs_inode *inode, char *buffer, + erofs_off_t size, erofs_off_t offset) { int ret; erofs_off_t end, length, skip; @@ -188,3 +188,19 @@ int z_erofs_read_data(struct erofs_inode *inode, char *buffer, return 0; } +int erofs_pread(struct erofs_inode *inode, char *buf, + erofs_off_t count, erofs_off_t offset) +{ + switch (inode->datalayout) { + case EROFS_INODE_FLAT_PLAIN: + case EROFS_INODE_FLAT_INLINE: + return erofs_read_raw_data(inode, buf, count, offset); + case EROFS_INODE_FLAT_COMPRESSION_LEGACY: + case EROFS_INODE_FLAT_COMPRESSION: + return z_erofs_read_data(inode, buf, count, offset); + default: + break; + } + return -EINVAL; +} + diff --git a/lib/namei.c b/lib/namei.c index 2e024d88d93e..4e6aceb90df1 100644 --- a/lib/namei.c +++ b/lib/namei.c @@ -136,7 +136,7 @@ int erofs_namei(struct nameidata *nd, struct erofs_dirent *de = (void *)buf; unsigned int nameoff; - ret = erofs_read_raw_data(&vi, buf, offset, maxsize); + ret = erofs_pread(&vi, buf, maxsize, offset); if (ret) return ret; -- 2.24.0