Re: OLD kernel BUG with volume label? (MS works,2026..2027rc not)

Bart Oldeman <[email protected]> Tue, 05 Nov 2002 20:00:45 -0500 (EST)
Newsgroups gmane.os.freedos.devel
Message-ID <[email protected]>
On Wed, 6 Nov 2002, Arkady V.Belousov wrote:

> BO> int21 ah=4eh cx=21h ds:dx->"dodevlo"
> BO> int21 ah=4eh cx=21h ds:dx->"dodevlo*.*"
> BO> int21 ah=4eh cx=21h ds:dx->"dodevlo\*.*"
> BO> int21 ah=4eh cx=21h ds:dx->".dodevlo"
> BO> int21 ah=4eh cx=21h ds:dx->".dodevlo\*.*"
> BO> Might be 2,18,3,2,3
>
>      Nice choice: missing plain name - "no file found", missing name with
> wildcards - "no more files". :)

Right, this was following the DR-DOS docs here:
http://vger.timpanogas.net/drdos/sysprog/chap4.htm

" On return, if the Carry flag is set, AX contains error code 2 or 18.
Error code 2 indicates that the file was not found. Error code 18
indicates that no matching files could be found, when question mark
characters were used."

In any case, the documentation (attention Matthias!) is wrong here:
testing your debug script in DR-DOS 7.03 I got the same behaviour that you
found in MS-DOS. MS-DOS 7.10 also behaves in the same way.

>      Well, debug script:
[snip, thanks, I needed to make some small adjustments to get it to work
with FreeDOS debug]

>      ? Strange suggestion - 0 for missing name. MS-DOS returns same as above
> (18,18,3,3,3) in both case of existing _other_ vlabel and none vlabels.

I had the impression that for cx=8, the volume label was returned
regardless of the path given at ds:dx. So that's not true.

>      In all cases (any combination of asked attributes and attributes of
> other label) returned same results.

To conclude:
findfirst returns the following errors (besides critical errors):
3 if anything goes wrong before searching the directory (directory does
not exist, supplied name or pattern contains invalid DOS characters)
18 if the directory is searched but the pattern (regardless of question
marks) was not matched.

Volume labels:
if (cx & 8) then
  DOS tries to match the pattern against the volume label in the root of
  the drive. In this search the value of cx is ignored.

a volume label may also have r/o and archive bits set.

DR-DOS, unlike MS-DOS 7.1 treats root directory entries with the
volume label bit set and (system or hidden) bits set ALSO as volume
labels.

This means that if the drive has no volume label, but does contain LFN
entries in the root directory, then DRDOS displays a bogus volume label
and MSDOS correctly says "no volume label".

It is obvious that FreeDOS should mimic MSDOS and not DRDOS here.

The only question: why does RBIL state "2" as a possible return value,
where it seems to be impossible to get it?

Bart