diff --git a/TODO.md b/TODO.md index 536e480..00ab9d8 100644 --- a/TODO.md +++ b/TODO.md @@ -638,6 +638,22 @@ AFP Get/Scan AccessPrivileges convergence: fallback AFP IDs because the existing directory-number reverse mapper is not a reliable file-entry reverse mapper on DOS namespace volumes. + +### AFP file fork handle lifecycle + +AFP Open File Fork returns a normal mars_nwe/NetWare file handle for the data +fork. File I/O uses the existing NetWare read/write handlers, and handle +lifetime is closed through the normal `NCP 0x42 Close File` path backed by +`nw_close_file()`. There is no separate AFP-private close operation and no +parallel POSIX close path in the AFP frontend. + +Runtime status: the full AFP smoke suite is verified with `failures=0` after +adding close-lifecycle probes. The suite opens the AFP data fork, performs a +read or write through the returned NetWare handle, closes that handle through +`NCP 0x42`, and verifies that later I/O on the old handle is rejected. The +same run keeps Resource Fork opens unsupported with the existing completion +code. + ### Final AFP endpoint audit before declaring compatibility slice complete After the current AFP smoke-covered endpoint set is otherwise complete, perform diff --git a/tests/afp/README.md b/tests/afp/README.md index aaa72ca..4438f16 100644 --- a/tests/afp/README.md +++ b/tests/afp/README.md @@ -1250,6 +1250,31 @@ NCP and verify that later reads or writes on the old handle fail. Resource Fork opens remain covered by the separate negative smoke and continue to return the unsupported completion. + +## AFP File Fork Close lifecycle smoke success + +AFP does not need a separate close-fork endpoint in the current compatibility +slice. AFP Open File Fork returns a normal mars_nwe/NetWare file handle, and +that handle is closed through the existing `NCP 0x42 Close File` implementation +which routes to `nw_close_file()`. + +Verified smoke run: + +```text +AFP File Fork Close rejects old read handle +AFP File Fork I/O read path=SYS:PUBLIC/pmdflts.ini entry_id=0x00000000 offset=0 requested=16 read=16 fork_len=8161 close-verified + +AFP File Fork Close rejects old write handle +AFP File Fork I/O write path=SYS:PUBLIC/atst3 entry_id=0x00000000 offset=0 size=14 verified close-verified + +Summary: failures=0 +``` + +The helper verifies the close by attempting I/O with the old handle after the +close call and requiring that operation to fail. This confirms that the AFP +fork handle participates in the normal mars_nwe handle lifecycle instead of +requiring an AFP-specific close path. + ## Final AFP endpoint audit TODO Before the AFP compatibility slice is marked complete, do one last audit of all