fix(format): list soft links as their targets, like h5py
Group::datasets()/groups() (and the Mmap/Lazy handles) listed only hard links, so a soft link to a dataset or group was missing, and dataset(name) / group(name) on a group handle could not open one. In old-style (symbol table) groups a soft link's entry has no object header address, and the listing failed outright trying to parse one. The three facade handles each had their own copy of the child-listing code; they now share group_v2::resolve_group_children, which returns hard links plus soft links resolved to their targets (relative targets from the group holding the link, via the new resolve_path_from). A dangling or cyclic soft link, an external link and a user-defined link are left out — h5py lists their names but cannot open them. Any other error met while resolving is returned, not hidden. Path resolution now walks a relative soft link's target from the group holding it instead of rebuilding the path from the root (same result, one less re-walk), and ignores "." components. Regression test: soft_links_are_listed_as_their_targets (h5py writes absolute, relative, group, dangling, cyclic and external links with libver latest and earliest; listings compared with h5py for File, MmapFile and LazyFile). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -327,6 +327,16 @@
|
||||
cannot be followed without the application that registered the class, so
|
||||
they are now left out of `datasets()`/`groups()` and path lookup, as h5py
|
||||
leaves out links it cannot open; reserved link types are still an error.
|
||||
- `clawhdf5` — soft links are listed, as h5py lists them: `datasets()` and
|
||||
`groups()` on `Group`/`MmapGroup`/`LazyGroup` include each soft link under
|
||||
its own name as the kind of object it resolves to, and `dataset(name)` /
|
||||
`group(name)` open through it. Relative targets resolve from the group
|
||||
holding the link. Dangling or cyclic soft links, external links and
|
||||
user-defined links are left out (h5py lists their names but cannot open
|
||||
them). Previously soft links were missing from the listings, and in
|
||||
old-style (symbol table) groups a soft link made the listing fail. New
|
||||
`group_v2::resolve_group_children` / `resolve_path_from` and
|
||||
`group_v1::v1_soft_links` in `clawhdf5-format`.
|
||||
- `clawhdf5-format` writer — **files libhdf5 rejects or reads wrong:**
|
||||
- Extensible Array (one unlimited dimension): chunks from index 244 on were
|
||||
written but never indexed and read as 0, by libhdf5 and by us.
|
||||
|
||||
Reference in New Issue
Block a user