|
1 | | -# XDF Restore — Deferred Files |
2 | | - |
3 | | -Two v3.7.0 XDF files were intentionally NOT restored in this pass |
4 | | -because they depend on modules that don't exist in v4.1.x or break |
5 | | -Windows/MinGW portability. |
6 | | - |
7 | | -## `uft_xdf_adapter.c` (256 LOC) — deferred |
8 | | - |
9 | | -Depends on `include/uft/core/uft_error_codes.h` (14 KB) and its |
10 | | -companion `.c` (13 KB). Restoring those would pull a parallel error- |
11 | | -code system into the tree, conflicting with the SSOT-error work |
12 | | -closed by MF-003 in M1 (`data/errors.tsv` → `include/uft/uft_error.h`). |
13 | | - |
14 | | -Re-implementing the adapter against the current SSOT error system |
15 | | -is a separate task — scope: ~50 LOC of error-code remapping. |
16 | | - |
17 | | -The adapter's header `include/uft/xdf/uft_xdf_adapter.h` is restored |
18 | | -so consumers can see the API surface; they'll just get unresolved |
19 | | -references until the impl lands. |
20 | | - |
21 | | -## `uft_xdf_api_impl.c` (1088 LOC) — deferred |
22 | | - |
23 | | -Uses `<fnmatch.h>` (POSIX) for filename-pattern matching at |
24 | | -`uft_xdf_api.c:103` (`fnmatch(pattern, entry->d_name, 0)`). MinGW/ |
25 | | -Windows does not provide this header. Restoration requires either: |
26 | | - |
27 | | - (a) A portable fnmatch replacement (small, ~80 LOC glob matcher) |
28 | | - (b) `#ifdef _WIN32` guards around the fnmatch branches |
29 | | - (c) A conditional include that falls back to our own globbing |
30 | | - |
31 | | -The other ~1000 LOC of this file is portable and is the main |
32 | | -catalog-of-disk-images implementation. Well worth a follow-up. |
33 | | - |
34 | | -## Restored successfully |
35 | | - |
36 | | -- `uft_xdf_core.c` (875 LOC) — XDF file-format reader/writer core |
37 | | -- `uft_xdf_api.c` (910 LOC) — public API + probe functions for 6 |
38 | | - source formats (ADF, D64, IMG, ST, TRD, XDF) |
39 | | - |
40 | | -Both compile clean under `-Wall -Wextra -Werror` after minor |
41 | | -unused-parameter fixes that v3.7 shipped with. |
| 1 | +# XDF — Stand, gemessen (MF-959, 2026-09-08) |
| 2 | + |
| 3 | +**Diese Datei stand 4½ Monate falsch.** Sie erklärte |
| 4 | +`uft_xdf_adapter.c` und `uft_xdf_api_impl.c` für *„intentionally NOT |
| 5 | +restored"* und nannte `<fnmatch.h>` als Windows-Blocker. **Am Tag nach |
| 6 | +ihrer Entstehung** lieferte `1535dfab` (2026-04-25) beides — der |
| 7 | +Commit-Titel sagt wörtlich *„fnmatch shim + xdf adapter"*. |
| 8 | + |
| 9 | +`docs/KNOWN_ISSUES.md` hielt schon in MF-459 fest, das Dokument sei |
| 10 | +veraltet; korrigiert wurde es nicht. Das ist dieselbe Klasse wie MF-938: |
| 11 | +eine Behauptung wird weitergetragen statt nachgemessen. |
| 12 | + |
| 13 | +## Was heute wirklich im Baum liegt |
| 14 | + |
| 15 | +| Datei | Zeilen | in `SOURCES` | |
| 16 | +|---|---|---| |
| 17 | +| `uft_xdf_core.c` | 1006 | ja | |
| 18 | +| `uft_xdf_api.c` | 941 | ja | |
| 19 | +| `uft_xdf_api_impl.c` | 1124 | ja | |
| 20 | +| `uft_xdf_adapter.c` | 254 | ja | |
| 21 | + |
| 22 | +Der `fnmatch`-Blocker ist gelöst: `uft_xdf_api_impl.c:39` bindet |
| 23 | +`uft/compat/uft_fnmatch.h` ein, hinter `#ifdef _WIN32`. |
| 24 | + |
| 25 | +## Was wirklich offen ist |
| 26 | + |
| 27 | +**Nicht die Restaurierung — die Erreichbarkeit.** Der Zweig wird gebaut |
| 28 | +und ruft niemand: |
| 29 | + |
| 30 | +* die öffentliche API (`xdf_api_batch_create`, `xdf_api_batch_process`, |
| 31 | + `xdf_api_compare`) hat **null** Aufrufer in `src/` und `tests/` |
| 32 | + (ARCH-18) |
| 33 | +* `import_d64` liest D64 mit **eigener** Zonentabelle — eine zweite |
| 34 | + Format-Schicht neben dem D64-Plugin (ARCH-6) |
| 35 | +* vier Header sagen zusammen **39 Funktionen** zu, die es nicht gibt: |
| 36 | + `uft_xdf_{dxdf,pxdf,txdf,zxdf}.h`, 900 Zeilen, **0** Umsetzungen, |
| 37 | + **0** Aufrufe. `uft_xdf_api_impl.c` bindet alle vier ein und ruft |
| 38 | + keine. Sie stehen seit dem v4.1.0-Release (2026-02-08). **P3-254** — |
| 39 | + ihr fünfter Bruder `uft_xdf_mxdf.h` wurde in PH-2/MF-549 aus |
| 40 | + derselben `#include`-Gruppe entfernt, die vier blieben stehen. |
| 41 | + |
| 42 | +## Was hier NICHT entschieden ist |
| 43 | + |
| 44 | +Ob der Zweig verdrahtet oder entfernt wird. Verdrahten hieße, eine |
| 45 | +zweite Format-Schicht scharf zu schalten, die ARCH-6 gerade abbaut; |
| 46 | +Entfernen ist ein eigener Schritt mit der MF-369-Beweispipeline. Beides |
| 47 | +gehört zu **ARCH-6**, nicht hierher. Diese Datei sagt nur noch, was |
| 48 | +gemessen ist. |
0 commit comments