summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-09-17 18:46:57 -0400
committerTom Rini <trini@konsulko.com>2015-10-24 13:50:32 -0400
commit29cc5bcadfc36957574fd0d17238a23419cac7da (patch)
tree1c1d4809fc140cf0078b6e860008e004f5bcd367 /fs
parentad15749b6d2b26bf7afe8a9d8724027ba1165b25 (diff)
ubifs: Add functions for generic fs use
Implement the necessary functions for implementing generic fs support for ubifs. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'fs')
-rw-r--r--fs/ubifs/ubifs.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c
index 0a7a7bff09f..d7f307b02bf 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -570,6 +570,25 @@ 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)
+{
+ if (rbdd) {
+ debug("UBIFS cannot be used with normal block devices\n");
+ return -1;
+ }
+
+ /*
+ * Should never happen since get_device_and_partition() already checks
+ * this, but better safe then sorry.
+ */
+ if (!ubifs_is_mounted()) {
+ debug("UBIFS not mounted, use ubifsmount to mount volume first!\n");
+ return -1;
+ }
+
+ return 0;
+}
+
int ubifs_ls(const char *filename)
{
struct ubifs_info *c = ubifs_sb->s_fs_info;
@@ -618,6 +637,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...
*/
@@ -875,6 +936,10 @@ out:
return err;
}
+void ubifs_close(void)
+{
+}
+
/* Compat wrappers for common/cmd_ubifs.c */
int ubifs_load(char *filename, u32 addr, u32 size)
{