It looks like in old systems, the EOF attribute of INDEXF.SYS wasn't properly updated (yet the map area properly described all extents).
As a result, file IDs beyond the (stale) EOF block would be flagged as "Not in index file" by access.c (built with -DDEBUG):
15,1,0, 0 Not in index file
Accessfile fail status 00000910
That would result in
FILE.EXT;1 %SYSTEM-W-NOSUCHFILE, no such file
showing in the directory listing (instead of e.g. size and/or date).
Removing the offending condition, like so:
if (vcbdev->idxfcb->head != NULL) {
#if 0
if (idxblk >=
F11SWAP(vcbdev->idxfcb->head->fh2$w_recattr.fat$l_efblk)) {
#if DEBUG
printf("%u,%u,%u, %u Not in index file\n",
fid->fid$w_num, fid->fid$w_seq, fid->fid$b_rvn, fid->fid$b_nmx);
#endif
return SS$_NOSUCHFILE;
}
#endif
}
allowed to process all files successfully.
The ODS-2 documentation says that all file header blocks in INDEXF.SYS should be considered depending on their contents, and no other conditions. If a block passes the validity checks (well-known fields, including the checksum) it is a valid file header (even regardless of the INDEXF.SYS-own header bitmap). EOF is an RMS attribute, which is the next level up in the file structure.
It looks like in old systems, the EOF attribute of
INDEXF.SYSwasn't properly updated (yet the map area properly described all extents).As a result, file IDs beyond the (stale) EOF block would be flagged as "Not in index file" by
access.c(built with-DDEBUG):That would result in
showing in the directory listing (instead of e.g. size and/or date).
Removing the offending condition, like so:
allowed to process all files successfully.
The ODS-2 documentation says that all file header blocks in
INDEXF.SYSshould be considered depending on their contents, and no other conditions. If a block passes the validity checks (well-known fields, including the checksum) it is a valid file header (even regardless of theINDEXF.SYS-own header bitmap). EOF is an RMS attribute, which is the next level up in the file structure.