[haiku-commits] Change in haiku[master]: ntfs: use volume size instead of empty labels when missing

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 14 Jun 2022 02:23:24 +0000

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

Other related posts:

  • » [haiku-commits] Change in haiku[master]: ntfs: use volume size instead of empty labels when missing - Gerrit