summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-12-31 02:38:13 +0300
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-12-31 16:32:27 +0300
commitc0029e4e25c10d627f4bff62cdb4074bb2c7eaf7 (patch)
treea7383efef0e84fc0eac5386eadd10c2fd8ee0c09 /fs
parentd0be67657d64523b4499d385390c08c2bafab1bc (diff)
downloadu-boot-c0029e4e25c10d627f4bff62cdb4074bb2c7eaf7.tar.xz
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>
Diffstat (limited to 'fs')
-rw-r--r--fs/fat/fat.c18
-rw-r--r--fs/fs.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index c9742d534b..157dad60a4 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -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;
+}
diff --git a/fs/fs.c b/fs/fs.c
index 7a4020607a..5e80648b5b 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -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,