be more restrictive in what we consider a volume label search

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/branches/UNSTABLE@1095 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Kenneth J Davis 2005-01-15 19:33:37 +00:00
parent 51e7674e84
commit ba36e777f0
1 changed files with 9 additions and 3 deletions

View File

@ -383,9 +383,15 @@ COUNT dos_findfirst(UCOUNT attr, BYTE * name)
/* Special handling - the volume id is only in the root */ /* Special handling - the volume id is only in the root */
/* directory and only searched for once. So we need to open */ /* directory and only searched for once. So we need to open */
/* the root and return only the first entry that contains the */ /* the root and return only the first entry that contains the */
/* volume id bit set. */ /* volume id bit set (while ignoring LFN entries). */
if ((attr & (D_VOLID|D_DIR))==D_VOLID) /* RBIL: ignore ReaDONLY and ARCHIVE bits */
/* For compatibility with bad search requests, only treat as */
/* volume search if only volume bit set, else ignore it. */
if ((attr & ~(D_RDONLY | D_ARCHIVE))==D_VOLID)
i = 3; i = 3;
else
attr &= ~D_VOLID; /* ignore volume mask */
/* Now open this directory so that we can read the */ /* Now open this directory so that we can read the */
/* fnode entry and do a match on it. */ /* fnode entry and do a match on it. */
@ -406,7 +412,7 @@ COUNT dos_findfirst(UCOUNT attr, BYTE * name)
/* Copy the raw pattern from our data segment to the DTA. */ /* Copy the raw pattern from our data segment to the DTA. */
fmemcpy(dmp->dm_name_pat, SearchDir.dir_name, FNAME_SIZE + FEXT_SIZE); fmemcpy(dmp->dm_name_pat, SearchDir.dir_name, FNAME_SIZE + FEXT_SIZE);
if ((attr & (D_VOLID|D_DIR))==D_VOLID) if ((attr & D_VOLID)==D_VOLID) /* search for VOL label ignore RDONLY & ARCHIVE */
{ {
/* Now do the search */ /* Now do the search */
while (dir_read(fnp) == 1) while (dir_read(fnp) == 1)