-// /* get volume name */
-// s.type = FSW_STRING_TYPE_ISO88591;
-// s.size = s.len = kHFSMaxVolumeNameChars;
-// s.data = vol->catalog_tree.file->g.name.data;
-// status = fsw_strdup_coerce(&vol->g.label, vol->g.host_string_type, &s);
-// CHECK(status);
+ //nms42
+ /* Take Volume Name before tree_header overwritten */
+ firstLeafNum = be32_to_cpu(tree_header.firstLeafNode);
+ catfOffset = firstLeafNum * vol->catalog_tree.node_size;
+
+ r = fsw_hfs_read_file(vol->catalog_tree.file, catfOffset, sizeof (cbuff), cbuff);
+
+ if (r == sizeof (cbuff))
+ {
+ BTNodeDescriptor* btnd;
+ HFSPlusCatalogKey* ck;
+
+ btnd = (BTNodeDescriptor*) cbuff;
+ ck = (HFSPlusCatalogKey*) (cbuff + sizeof(BTNodeDescriptor));
+ if (btnd->kind == kBTLeafNode && be32_to_cpu (ck->parentID) == kHFSRootParentID)
+ {
+ struct fsw_string vn;
+
+ vn.type = FSW_STRING_TYPE_UTF16_BE;
+ vn.len = be16_to_cpu (ck->nodeName.length);
+ vn.size = vn.len * sizeof (fsw_u16);
+ vn.data = ck->nodeName.unicode;
+ fsw_strfree (&vol->g.label);
+ status = fsw_strdup_coerce(&vol->g.label, vol->g.host_string_type, &vn);
+ CHECK(status);
+ } // if
+ } // if