mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 19:34:35 +00:00
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>
This commit is contained in:
parent
ad15749b6d
commit
29cc5bcadf
2 changed files with 69 additions and 0 deletions
|
@ -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:
|
||||||
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:
|
||||||
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);
|
||||||
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__ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue