fs/fat: implement fsuuid command

The FAT file system does not have a UUID but a 4 byte volume ID.
Let the fsuuid command show it in XXXX-XXXX format.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2020-12-31 00:38:13 +01:00
parent d0be67657d
commit c0029e4e25
3 changed files with 31 additions and 1 deletions

View File

@ -1377,3 +1377,21 @@ void fat_closedir(struct fs_dir_stream *dirs)
void fat_close(void)
{
}
int fat_uuid(char *uuid_str)
{
boot_sector bs;
volume_info volinfo;
int fatsize;
int ret;
u8 *id;
ret = read_bootsectandvi(&bs, &volinfo, &fatsize);
if (ret)
return ret;
id = volinfo.volume_id;
sprintf(uuid_str, "%02X%02X-%02X%02X", id[3], id[2], id[1], id[0]);
return 0;
}

View File

@ -194,7 +194,7 @@ static struct fstype_info fstypes[] = {
.unlink = fs_unlink_unsupported,
.mkdir = fs_mkdir_unsupported,
#endif
.uuid = fs_uuid_unsupported,
.uuid = fat_uuid,
.opendir = fat_opendir,
.readdir = fat_readdir,
.closedir = fat_closedir,

View File

@ -212,4 +212,16 @@ int fat_unlink(const char *filename);
int fat_mkdir(const char *dirname);
void fat_close(void);
void *fat_next_cluster(fat_itr *itr, unsigned int *nbytes);
/**
* fat_uuid() - get FAT volume ID
*
* The FAT volume ID returned in @uuid_str as hexadecimal number in XXXX-XXXX
* format.
*
* @uuid_str: caller allocated buffer of at least 10 bytes for the volume ID
* Return: 0 on success
*/
int fat_uuid(char *uuid_str);
#endif /* _FAT_H_ */