docs: split old file io endpoint notes
This commit is contained in:
21
AI.md
21
AI.md
@@ -436,8 +436,10 @@ user.org.mars-nwe.afp.prodos-info=0x010203040506
|
||||
|
||||
## Latest endpoint audit checkpoint
|
||||
|
||||
As of patch `0203-docs-audit-old-direct-file-io-endpoints.patch`, the latest
|
||||
audited block is the old direct file-I/O group in `src/nwconn.c`:
|
||||
As of patch `0204-docs-split-old-file-io-endpoint-notes.patch`, the latest
|
||||
audited block is still the old direct file-I/O group in `src/nwconn.c`.
|
||||
Patch 0204 is a style follow-up to 0203: it splits the request/reply/coverage
|
||||
notes so each endpoint documents its own audit directly at its `case` label:
|
||||
|
||||
- `0x2222/65` / wire `0x41` Open File (old);
|
||||
- `0x2222/66` / wire `0x42` Close File;
|
||||
@@ -458,5 +460,18 @@ for example AFP `0x2222/35`, EA `0x2222/86`, namespace `0x2222/87`, packet
|
||||
burst `0x2222/97`/`101`, or resume deeper `0x2222/23` bindery/property/admin
|
||||
subfunction coverage, unless the user requests a specific family first.
|
||||
|
||||
The next patch number should be `0205` if `0204` was applied.
|
||||
|
||||
Remember: for every new endpoint-audit patch, also update this AI handoff file
|
||||
with the latest audited block and expected next patch number.
|
||||
with the latest audited block and expected next patch number. Put detailed
|
||||
Coverage/Request/Reply/Known-difference notes inline at each endpoint case rather
|
||||
than as one large audit block before the switch range.
|
||||
|
||||
Missing-endpoint rule: when an audited SDK/PDF/WebSDK/Header endpoint is not
|
||||
implemented, document it at the appropriate dispatch location as a disabled
|
||||
`#if 0` stub instead of only mentioning it in prose. This also applies to
|
||||
later NetWare 4.x/5.x/OES endpoints that are intentionally out of the default
|
||||
3.x-compatible runtime: add a clearly disabled stub with the selector path,
|
||||
name, request/reply sketch, provider/out-of-scope reason, and no active behavior
|
||||
change. Disabled stubs must not use misleading control flow such as `return(-1)`
|
||||
where that return value has no local handoff meaning.
|
||||
|
||||
172
src/nwconn.c
172
src/nwconn.c
@@ -6235,63 +6235,22 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
/*
|
||||
* Endpoint audit: old direct file-I/O calls, SDK 0x2222/65..77
|
||||
* / wire 0x41..0x4d. These are the pre-namespace DOS file
|
||||
* operations that sit immediately after the old commit/search calls.
|
||||
* They are direct top-level NCP functions, not 22/87 subfunctions.
|
||||
*
|
||||
* Coverage in this switch:
|
||||
*
|
||||
* 65 / 0x41 Open File (old)
|
||||
* 66 / 0x42 Close File
|
||||
* 67 / 0x43 Create File
|
||||
* 68 / 0x44 Erase File
|
||||
* 69 / 0x45 Rename File
|
||||
* 70 / 0x46 Set File Attributes
|
||||
* 71 / 0x47 Get Current Size of File
|
||||
* 72 / 0x48 Read From a File
|
||||
* 73 / 0x49 Write to a File
|
||||
* 74 / 0x4a Copy from One File to Another
|
||||
* 75 / 0x4b Set File Time Date Stamp
|
||||
* 76 / 0x4c Open File
|
||||
* 77 / 0x4d Create New File
|
||||
*
|
||||
* Request/reply shape compared with the NDK/Core-Protocols PDF and
|
||||
* the current parser:
|
||||
*
|
||||
* - Open/Create replies return the old six-byte NetWare FileHandle
|
||||
* slot followed by Reserved and NW_FILE_INFO. The SDK documents
|
||||
* FileHandle as byte[6] Hi-Lo and says clients use the most
|
||||
* significant four bytes. Current MARS-NWE compatibility replies
|
||||
* write zero extended-handle bytes and store the local four-byte
|
||||
* handle in the remaining slot; matching close/read/write/copy/time
|
||||
* handlers ignore the two extended bytes and use GET_32() on the
|
||||
* local four-byte handle.
|
||||
* - 65 Open File (old) is implemented by calling nw_creat_open_file()
|
||||
* with fixed read access. The PDF describes it as the pre-2.0a
|
||||
* form of 76 Open File and says it is equivalent to Open File with
|
||||
* DesiredAccessRights 0x13; this is a compatibility difference to
|
||||
* keep visible if old DOS clients expose it.
|
||||
* - 67 Create File and 77 Create New File share the same parser and
|
||||
* reply body. The code selects create mode 1 for 67 and mode 2 for
|
||||
* 77, matching the documented overwrite-vs-fail-on-exists split.
|
||||
* - 68, 69, and 70 have no reply payload; nwconn still sends the
|
||||
* normal NCP response envelope with Completion.
|
||||
* - 71 returns a four-byte size/position field in Hi-Lo order, as the
|
||||
* old Get Current Size of File reply requires.
|
||||
* - 72 and 73 use Hi-Lo file offsets and byte counts. Read preserves
|
||||
* the documented odd-offset padding quirk by adding one byte before
|
||||
* the returned data when the offset is odd.
|
||||
* - 74 returns only the actual four-byte transfer count.
|
||||
* - 75 updates date/time and has no reply payload.
|
||||
*
|
||||
* Missing-endpoint check: the PDF's direct old file-I/O block between
|
||||
* 65 and 77 is fully represented here. Later file APIs such as
|
||||
* 0x2222/84, 0x2222/87/* and 0x2222/89/* are separate namespace/open
|
||||
* families and should be audited in their own blocks.
|
||||
/* Old direct file-I/O calls, SDK 0x2222/65..77 / wire 0x41..0x4d.
|
||||
* These pre-namespace DOS file operations are direct top-level NCP
|
||||
* functions, not 22/87 subfunctions. Keep audit notes next to each
|
||||
* endpoint below so request/reply checks stay local to the parser.
|
||||
*/
|
||||
case 0x41 : { /* open file for reading */
|
||||
case 0x41 : { /* 65 Open File (old) / wire 0x41.
|
||||
* Coverage: implemented.
|
||||
* Request: DirHandle, SearchAttributes, PathLen, Path.
|
||||
* Reply: six-byte old FileHandle slot, Reserved,
|
||||
* NW_FILE_INFO. Current code writes zero extended
|
||||
* handle bytes and a local four-byte handle.
|
||||
* Difference: the NDK describes this pre-2.0a form as
|
||||
* equivalent to 76 Open File with DesiredAccessRights
|
||||
* 0x13, while this compatibility path uses fixed read
|
||||
* access.
|
||||
*/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 dirhandle; /* Dirhandle */
|
||||
@@ -6325,7 +6284,13 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x42 : /* close file */
|
||||
case 0x42 : /* 66 Close File / wire 0x42.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte plus old six-byte FileHandle slot.
|
||||
* Reply: no payload, normal Completion response.
|
||||
* Difference: the two extended handle bytes are ignored;
|
||||
* current code closes the local four-byte handle.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6346,8 +6311,19 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x43 : /* creat file, overwrite if exist */
|
||||
case 0x4D : /* create new file */
|
||||
case 0x43 : /* 67 Create File / wire 0x43.
|
||||
* Coverage: implemented by the shared 67/77 parser.
|
||||
* Request: DirHandle, FileAttributes, PathLen, Path.
|
||||
* Reply: six-byte old FileHandle slot, Reserved,
|
||||
* NW_FILE_INFO. Current code writes zero extended handle
|
||||
* bytes and a local four-byte handle.
|
||||
* Mode: 67 uses create mode 1, overwrite if the file exists.
|
||||
*/
|
||||
case 0x4D : /* 77 Create New File / wire 0x4d.
|
||||
* Coverage: implemented by the shared 67/77 parser.
|
||||
* Request/reply: same old create/open layout as 67.
|
||||
* Mode: 77 uses create mode 2, fail if the file exists.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6391,7 +6367,11 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x44 : /* file(s) delete */
|
||||
case 0x44 : /* 68 Erase File / wire 0x44.
|
||||
* Coverage: implemented.
|
||||
* Request: DirHandle, SearchAttributes, PathLen, Path.
|
||||
* Reply: no payload, normal Completion response.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6409,7 +6389,14 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x45 : /* rename file */
|
||||
case 0x45 : /* 69 Rename File / wire 0x45.
|
||||
* Coverage: implemented.
|
||||
* Request: DirHandle, SearchAttributes, old PathLen/Path,
|
||||
* reserved byte, new PathLen/Path.
|
||||
* Reply: no payload, normal Completion response.
|
||||
* Limitation: current code renames within the same
|
||||
* directory handle.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6430,7 +6417,12 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x46 : /* set file attributes */
|
||||
case 0x46 : /* 70 Set File Attributes / wire 0x46.
|
||||
* Coverage: implemented.
|
||||
* Request: FileAttributes, DirHandle, SearchAttributes,
|
||||
* PathLen, Path.
|
||||
* Reply: no payload, normal Completion response.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6449,8 +6441,13 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x47 : /* move pointer to end of file ???? */
|
||||
/* and return filesize ? */
|
||||
case 0x47 : /* 71 Get Current Size of File / wire 0x47.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte plus old six-byte FileHandle slot.
|
||||
* Reply: four-byte size/position in Hi-Lo order.
|
||||
* Difference: the two extended handle bytes are ignored;
|
||||
* current code seeks the local four-byte handle to EOF.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6471,7 +6468,16 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x48 : /* read file */
|
||||
case 0x48 : /* 72 Read From a File / wire 0x48.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte, old six-byte FileHandle slot,
|
||||
* Offset Hi-Lo, MaxBytes Hi-Lo.
|
||||
* Reply: BytesRead Hi-Lo plus data.
|
||||
* Compatibility: preserves the documented odd-offset
|
||||
* padding quirk by inserting one byte before returned data
|
||||
* when the offset is odd.
|
||||
* Difference: extended handle bytes are ignored.
|
||||
*/
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@@ -6506,7 +6512,13 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x49 : { /* write file */
|
||||
case 0x49 : { /* 73 Write to a File / wire 0x49.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte, old six-byte FileHandle slot,
|
||||
* Offset Hi-Lo, BytesToWrite Hi-Lo, data.
|
||||
* Reply: no payload, normal Completion response.
|
||||
* Difference: extended handle bytes are ignored.
|
||||
*/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 filler; /* 0 Filler ?? */
|
||||
@@ -6531,8 +6543,15 @@ static int handle_ncp_serv(void)
|
||||
break;
|
||||
|
||||
|
||||
case 0x4a : { /* File SERVER COPY */
|
||||
/* should be OK */
|
||||
case 0x4a : { /* 74 Copy from One File to Another / wire 0x4a.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte, old source/destination
|
||||
* FileHandle slots, source/destination offsets Hi-Lo,
|
||||
* CopySize Hi-Lo.
|
||||
* Reply: four-byte actual transfer count.
|
||||
* Difference: extended handle bytes are ignored for both
|
||||
* source and destination handles.
|
||||
*/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 reserved; /* Reserved by Novell */
|
||||
@@ -6564,7 +6583,13 @@ static int handle_ncp_serv(void)
|
||||
break;
|
||||
|
||||
|
||||
case 0x4b : { /* set date of file, file will be closed later */
|
||||
case 0x4b : { /* 75 Set File Time Date Stamp / wire 0x4b.
|
||||
* Coverage: implemented.
|
||||
* Request: reserved byte, old six-byte FileHandle slot,
|
||||
* DOS Time, DOS Date.
|
||||
* Reply: no payload, normal Completion response.
|
||||
* Difference: extended handle bytes are ignored.
|
||||
*/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 filler;
|
||||
@@ -6579,7 +6604,14 @@ static int handle_ncp_serv(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x4c : { /* open file */
|
||||
case 0x4c : { /* 76 Open File / wire 0x4c.
|
||||
* Coverage: implemented.
|
||||
* Request: DirHandle, SearchAttributes,
|
||||
* DesiredAccessRights, PathLen, Path.
|
||||
* Reply: six-byte old FileHandle slot, Reserved,
|
||||
* NW_FILE_INFO. Current code writes zero extended
|
||||
* handle bytes and a local four-byte handle.
|
||||
*/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 dirhandle; /* Dirhandle */
|
||||
|
||||
Reference in New Issue
Block a user