docs: tighten sync fall-through selector notes

This commit is contained in:
Mario Fetka
2026-06-02 20:29:30 +00:00
parent 4f58e2d085
commit 6b00f1b522
3 changed files with 126 additions and 120 deletions

View File

@@ -2838,34 +2838,29 @@ static int handle_ncp_serv(void)
}
break;
case 0x4 : /* Lock File Set (old) */
case 0x6a : { /* Lock File Set */
/*
* NCP 0x2222/04 Lock File Set (old) and NCP 0x2222/106 Lock
* File Set lock all files logged by the calling client's current
* task.
*
* SDK request:
*
* 0x04 old: word LockTimeout, documented as Lo-Hi.
* 0x6a new: word LockTimeout, documented as Hi-Lo.
*
* SDK reply: no reply data.
* SDK completion: 0x00 success; old 0x04 documents 0xfe timeout
* and 0xff lock error, while newer 0x6a also documents
* 0x7f ERR_LOCK_WAITING.
*
* The newer 0x6a call replaces the old 0x04 call for later
* clients. MARS-NWE currently handles both calls in one branch
* and reads the timeout with GET_BE16(). That matches the 0x6a
* Hi-Lo SDK layout; the old 0x04 SDK page documents Lo-Hi. This
* comment records the wire-layout difference only; the parser is
* intentionally left unchanged in this documentation pass.
*
* MARS-NWE records file-set members through Log File (0x03), then
* uses the shared set handler for Lock/Release/Clear File Set
* operations.
*/
case 0x4 : /* SDK 04 Lock File Set (old) */
/*
* Request: LockTimeout word, documented Lo-Hi in the
* old NDK page.
* Response: no reply payload; Completion reports success,
* timeout, or lock error.
*/
case 0x6a : { /* SDK 106 Lock File Set */
/*
* Request: LockTimeout word, documented Hi-Lo.
* Response: no reply payload; Completion reports success,
* ERR_LOCK_WAITING, timeout, or lock error.
*
* Parser comparison: the active fall-through handler reads
* both old 0x04 and newer 0x6a LockTimeout with
* GET_BE16(). That matches SDK 106 but not the old SDK 04
* Lo-Hi note; keep behavior unchanged until requester
* traces justify a parser split.
*
* MARS-NWE records file-set members through Log File
* (0x03), then uses the shared set handler for
* Lock/Release/Clear File Set operations.
*/
struct INPUT {
uint8 header[7]; /* Requestheader */
uint8 timeout[2]; /* HI LO */
@@ -2878,31 +2873,27 @@ static int handle_ncp_serv(void)
}
break;
case 0x5 : /* Release File */
case 0x7 : { /* Clear File, removes file from logset */
/*
* NCP 0x2222/05 Release File (old) releases one previously
* locked file but leaves it in the client's logged file table.
* NCP 0x2222/07 Clear File (old) removes one file from that
* table; if it is locked/open, the server releases/closes it.
*
* SDK request for both calls:
*
* byte DirectoryHandle
* byte FileNameLen
* bytes FileName
*
* SDK reply: no reply data.
* SDK completion for 0x05: 0x00 success, 0x9c invalid path,
* 0xff unlock error.
* SDK completion for 0x07 additionally documents 0x96 server out
* of memory, 0x98 disk map error, 0x9b bad directory handle,
* 0xa1 directory I/O error, and 0xfd bad station number.
*
* The current INPUT layout matches the documented old request
* header offsets: FunctionCode at offset 6, DirectoryHandle at
* offset 7, FileNameLen at offset 8, and FileName at offset 9.
*/
case 0x5 : /* SDK 05 Release File (old) */
/*
* Request: DirectoryHandle, FileNameLen, FileName.
* Response: no reply payload; Completion reports success,
* invalid path, or unlock error.
* Semantics: release/unlock the named file but keep it in
* the caller's logged file table.
*/
case 0x7 : { /* SDK 07 Clear File (old) */
/*
* Request: DirectoryHandle, FileNameLen, FileName.
* Response: no reply payload; Completion reports success,
* path/handle/server-resource errors, or unlock error.
* Semantics: release the named file and remove it from the
* caller's logged file table.
*
* Parser comparison: the shared INPUT layout matches the
* documented old request offsets: FunctionCode at offset 6,
* DirectoryHandle at offset 7, FileNameLen at offset 8,
* and FileName at offset 9.
*/
struct INPUT {
uint8 header[7]; /* Requestheader */
uint8 dir_handle;
@@ -2920,27 +2911,25 @@ static int handle_ncp_serv(void)
}
break;
case 0x6 : /* Release File Set */
case 0x8 : { /* Clear File Set */
/*
* NCP 0x2222/06 Release File Set releases all currently logged
* or locked files, but keeps the file-log table entries.
* NCP 0x2222/08 Clear File Set releases/removes all logged files;
* open server-side file handles are invalidated by the NetWare
* semantics described in the SDK.
*
* SDK request for both calls:
*
* byte LockFlag
*
* SDK reply: no reply data.
* SDK completion: 0x00 success.
*
* MARS-NWE currently does not read the documented LockFlag byte
* and forwards the operation directly to share_handle_lock_sets().
* This documentation patch records that parser difference only;
* endpoint behaviour is intentionally unchanged here.
*/
case 0x6 : /* SDK 06 Release File Set */
/*
* Request: LockFlag byte.
* Response: no reply payload; Completion reports success.
* Semantics: release currently logged/locked files while
* retaining the file-log table entries.
*/
case 0x8 : { /* SDK 08 Clear File Set */
/*
* Request: LockFlag byte.
* Response: no reply payload; Completion reports success.
* Semantics: release and remove all logged files; NetWare
* semantics also invalidate related open server handles.
*
* Parser comparison: the active shared handler does not
* read the documented LockFlag byte and selects release or
* clear solely from FunctionCode. Keep behavior unchanged
* until requester traces justify consuming LockFlag.
*/
int result = share_handle_lock_sets(
1, /* File Set */
(function==0x8)
@@ -3026,31 +3015,26 @@ static int handle_ncp_serv(void)
}
break;
case 0xb : /* Clear Logical Record */
case 0xc : { /* Release Logical Record */
/*
* SDK: NCP 0x2222/11 Clear Logical Record removes one logical
* record from the calling task's synchronization table.
*
* SDK: NCP 0x2222/12 Release Logical Record releases/unlocks one
* synchronization string held by the calling client. Both requests
* use the old direct layout:
*
* byte SynchNameLen
* bytes SynchName
*
* They return no reply data and report success or Unlock Error
* through the completion code.
*
* Compared against the SDK/PDF: the current INPUT layout matches
* the documented old request offsets: FunctionCode at offset 6,
* SynchNameLen at offset 7, and SynchName at offset 8.
*
* Important semantic difference: Release Logical Record leaves the
* string in the caller's synchronization string table so a later
* Lock Logical Record Set can relock it. Clear Logical Record
* unlocks and removes it from the table.
*/
case 0xb : /* SDK 11 Clear Logical Record */
/*
* Request: SynchNameLen, SynchName.
* Response: no reply payload; Completion reports success
* or unlock error.
* Semantics: unlock and remove the synchronization string
* from the caller's logical-record table.
*/
case 0xc : { /* SDK 12 Release Logical Record */
/*
* Request: SynchNameLen, SynchName.
* Response: no reply payload; Completion reports success
* or unlock error.
* Semantics: release/unlock the synchronization string but
* keep it logged so Lock Logical Record Set can relock it.
*
* Parser comparison: the shared INPUT layout matches the
* documented old offsets: FunctionCode at offset 6,
* SynchNameLen at offset 7, and SynchName at offset 8.
*/
struct INPUT {
uint8 header[7]; /* Requestheader */
uint8 len; /* synch name len */
@@ -3067,26 +3051,25 @@ static int handle_ncp_serv(void)
}
break;
case 0xe : /* Clear Logical Record Set */
case 0xd : { /* Release Logical Record Set */
/*
* NCP 0x2222/13 Release Logical Record Set releases all currently
* locked logical records but keeps the synchronization-string table.
* NCP 0x2222/14 Clear Logical Record Set releases all logical
* records and clears that table.
*
* SDK request for both calls:
*
* byte LockFlag
*
* SDK reply: no reply data.
* SDK completion: 0x00 success.
*
* MARS-NWE currently does not read the documented LockFlag byte
* and forwards the operation directly to share_handle_lock_sets().
* This documentation patch records that parser difference only;
* endpoint behaviour is intentionally unchanged here.
*/
case 0xe : /* SDK 14 Clear Logical Record Set */
/*
* Request: LockFlag byte.
* Response: no reply payload; Completion reports success.
* Semantics: release all locked logical records and clear
* the synchronization-string table.
*/
case 0xd : { /* SDK 13 Release Logical Record Set */
/*
* Request: LockFlag byte.
* Response: no reply payload; Completion reports success.
* Semantics: release all currently locked logical records
* but keep the synchronization-string table.
*
* Parser comparison: the active shared handler does not
* read the documented LockFlag byte and selects release or
* clear solely from FunctionCode. Keep behavior unchanged
* until requester traces justify consuming LockFlag.
*/
int result = share_handle_lock_sets(
2, /* Logical Record Set */
(function==0xe)