From Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>:
Jessica Hamilton has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/5381 ;)
Change subject: ntfs: use volume size instead of empty labels when missing
......................................................................
ntfs: use volume size instead of empty labels when missing
* This reintroduces behaviour present in the previous NTFS
driver, making it slightly more useful than an empty label.
Change-Id: I6b993735e58cdfaf1f19af575e918614c7fe5679
---
M src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp
1 file changed, 33 insertions(+), 5 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/81/5381/1
diff --git a/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp
b/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp
index 3ffd8ed..1120d2a 100644
--- a/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/ntfs/kernel_interface.cpp
@@ -47,6 +47,36 @@
static status_t fs_access(fs_volume* _volume, fs_vnode* _node, int accessMode);
+static const char*
+get_volume_name(ntfs_volume &volume)
+{
+ static char name[B_PATH_NAME_LENGTH];
+
+ if (volume.vol_name != NULL && volume.vol_name[0] != '\0')
+ {
+ return volume.vol_name;
+ }
+ else
+ {
+ off_t diskSize = volume.cluster_size * volume.nr_clusters;
+ off_t divisor = 1ULL << 40;
+ char unit = 'T';
+ if (diskSize < divisor) {
+ divisor = 1UL << 30;
+ unit = 'G';
+ if (diskSize < divisor) {
+ divisor = 1UL << 20;
+ unit = 'M';
+ }
+ }
+
+ double size = (double)((10 * diskSize + divisor - 1) / divisor);
+ snprintf(name, B_PATH_NAME_LENGTH, "%g %cB NTFS Volume", size /
10, unit);
+ return name;
+ }
+}
+
+
// #pragma mark - Scanning
@@ -100,10 +130,7 @@
if (ntVolume == NULL)
return errno ? errno : B_ERROR;
- if (ntVolume->vol_name != NULL && ntVolume->vol_name[0] != '\0')
- partition->content_name = strdup(ntVolume->vol_name);
- else
- partition->content_name = strdup("");
+ partition->content_name = strdup(get_volume_name(*ntVolume));
ntfs_umount(ntVolume, true);
}
@@ -256,7 +283,8 @@
info->io_size = 65536;
- strlcpy(info->volume_name, volume->ntfs->vol_name,
sizeof(info->volume_name));
+ const char *name = get_volume_name(*volume->ntfs);
+ strlcpy(info->volume_name, name, sizeof(info->volume_name));
strlcpy(info->fsh_name, "NTFS", sizeof(info->fsh_name));
return B_OK;
--
To view, visit https://review.haiku-os.org/c/haiku/+/5381
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I6b993735e58cdfaf1f19af575e918614c7fe5679
Gerrit-Change-Number: 5381
Gerrit-PatchSet: 1
Gerrit-Owner: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>
Gerrit-MessageType: newchange