-
Notifications
You must be signed in to change notification settings - Fork 18
Description
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.