Skip to content
Snippets Groups Projects
Commit 29cc5bca authored by Hans de Goede's avatar Hans de Goede Committed by Tom Rini
Browse files

ubifs: Add functions for generic fs use


Implement the necessary functions for implementing generic fs support
for ubifs.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarHeiko Schocher <hs@denx.de>
parent ad15749b
No related branches found
No related tags found
No related merge requests found
...@@ -570,6 +570,25 @@ static unsigned long ubifs_findfile(struct super_block *sb, char *filename) ...@@ -570,6 +570,25 @@ static unsigned long ubifs_findfile(struct super_block *sb, char *filename)
return 0; 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) int ubifs_ls(const char *filename)
{ {
struct ubifs_info *c = ubifs_sb->s_fs_info; struct ubifs_info *c = ubifs_sb->s_fs_info;
...@@ -618,6 +637,48 @@ out: ...@@ -618,6 +637,48 @@ out:
return ret; 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... * ubifsload...
*/ */
...@@ -875,6 +936,10 @@ out: ...@@ -875,6 +936,10 @@ out:
return err; return err;
} }
void ubifs_close(void)
{
}
/* Compat wrappers for common/cmd_ubifs.c */ /* Compat wrappers for common/cmd_ubifs.c */
int ubifs_load(char *filename, u32 addr, u32 size) int ubifs_load(char *filename, u32 addr, u32 size)
{ {
......
...@@ -21,8 +21,12 @@ void uboot_ubifs_umount(void); ...@@ -21,8 +21,12 @@ void uboot_ubifs_umount(void);
int ubifs_is_mounted(void); int ubifs_is_mounted(void);
int ubifs_load(char *filename, u32 addr, u32 size); 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_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, int ubifs_read(const char *filename, void *buf, loff_t offset,
loff_t size, loff_t *actread); loff_t size, loff_t *actread);
void ubifs_close(void);
#endif /* __UBIFS_UBOOT_H__ */ #endif /* __UBIFS_UBOOT_H__ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment