I've been trying to build a project stored on a Fat32FS USB pen drive and found make wasn't locating any of the files using the wildcard function. The wildcard was looking for *.cc files so I believe it is to do with suffix swapping.
After further investigation I think I've tracked the problem down to the unixlib directory iteration in the unix/dirent.c file. I believe the following comments from the top of the file are relevant.
/* It is a common mistake to assume that the offsets returned from
OS_GBPB is monotonic increasing with unity steps from the start
offset 0 onwards. Accoring to the PRMs, the only thing you may
be sure of is that offset 0 starts the GBPB enumeration and
offset -1 returned indicates the end of the enumeration.
...
/* After preaching the passion, now the hack : when we're going to do
the reverse suffix swapping, we will have up to two outstanding OS_GBPB
sessions : one in the main dir and another in the suffix dir.
How we're going to give an 'off_t' result in telldir describing these
two offsets in OS_GBPB ? Well, we are going to rely on unity monotonic
increase of the offsets and this up to GBPB_MAX_ENUM. If these
conditions are not fullfilled, we stop the enumeration.
Another solution is to return table index numbers which, when presented
to seekdir, will get looked up in a table giving the two internal dir
offsets. */
From comments when I mentioned this bug on the ROOL forum it made me think Fat32FS does not increment the value as expected by the hack.
Is there anybody who could look at to confirm my findings (and possibly fix) this?
Regards,
Alan
No comments:
Post a Comment