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 <hdego...@redhat.com>
---
  fs/ubifs/ubifs.c      | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++
  include/ubifs_uboot.h |  4 ++++
  2 files changed, 66 insertions(+)

Reviewed-by: Heiko Schocher <h...@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__ */


--
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to