
Hello Hans,
Am 22.08.2015 um 20:04 schrieb Hans de Goede:
Implement the necessary functions for implementing generic fs support for ubifs.
Signed-off-by: Hans de Goede hdegoede@redhat.com
fs/ubifs/ubifs.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/ubifs_uboot.h | 4 ++++ 2 files changed, 66 insertions(+)
Reviewed-by: Heiko Schocher hs@denx.de
bye, Heiko
diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c index 5af861c..89f1f2a 100644 --- a/fs/ubifs/ubifs.c +++ b/fs/ubifs/ubifs.c @@ -568,6 +568,22 @@ static unsigned long ubifs_findfile(struct super_block *sb, char *filename) return 0; }
+int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info) +{
- /* Check that ubifs is mounted and that we are not being a blkdev */
- if (!ubifs_mounted) {
printf("UBIFS not mounted, use ubifsmount to mount volume first!\n");
return -1;
- }
- if (rbdd) {
printf("UBIFS cannot be used with normal block devices\n");
return -1;
- }
- return 0;
+}
- int ubifs_ls(const char *filename) { struct ubifs_info *c = ubifs_sb->s_fs_info;
@@ -616,6 +632,48 @@ out: return ret; }
+int ubifs_exists(const char *filename) +{
- struct ubifs_info *c = ubifs_sb->s_fs_info;
- unsigned long inum;
- c->ubi = ubi_open_volume(c->vi.ubi_num, c->vi.vol_id, UBI_READONLY);
- inum = ubifs_findfile(ubifs_sb, (char *)filename);
- ubi_close_volume(c->ubi);
- return inum != 0;
+}
+int ubifs_size(const char *filename, loff_t *size) +{
- struct ubifs_info *c = ubifs_sb->s_fs_info;
- unsigned long inum;
- struct inode *inode;
- int err = 0;
- c->ubi = ubi_open_volume(c->vi.ubi_num, c->vi.vol_id, UBI_READONLY);
- inum = ubifs_findfile(ubifs_sb, (char *)filename);
- if (!inum) {
err = -1;
goto out;
- }
- inode = ubifs_iget(ubifs_sb, inum);
- if (IS_ERR(inode)) {
printf("%s: Error reading inode %ld!\n", __func__, inum);
err = PTR_ERR(inode);
goto out;
- }
- *size = inode->i_size;
- ubifs_iput(inode);
+out:
- ubi_close_volume(c->ubi);
- return err;
+}
- /*
*/
- ubifsload...
@@ -873,6 +931,10 @@ out: return err; }
+void ubifs_close(void) +{ +}
- /* Compat wrappers for common/cmd_ubifs.c */ int ubifs_load(char *filename, u32 addr, u32 size) {
diff --git a/include/ubifs_uboot.h b/include/ubifs_uboot.h index d10a909..c600e38 100644 --- a/include/ubifs_uboot.h +++ b/include/ubifs_uboot.h @@ -22,8 +22,12 @@ int uboot_ubifs_mount(char *vol_name); void uboot_ubifs_umount(void); int ubifs_load(char *filename, u32 addr, u32 size);
+int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); int ubifs_ls(const char *dir_name); +int ubifs_exists(const char *filename); +int ubifs_size(const char *filename, loff_t *size); int ubifs_read(const char *filename, void *buf, loff_t offset, loff_t size, loff_t *actread); +void ubifs_close(void);
#endif /* __UBIFS_UBOOT_H__ */