From 4a8c30c6e20442e78e92680e0810645d542fb5a2 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Mon, 21 May 2007 02:17:44 +0000 Subject: [PATCH] Fix problem with an old game that calls findfirst with attribute 77a8: the kernel should not return a volume label in that case. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1322 6ac86273-5f31-0410-b378-82cca8765d1b --- kernel/fatdir.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel/fatdir.c b/kernel/fatdir.c index a836808..8634b4d 100644 --- a/kernel/fatdir.c +++ b/kernel/fatdir.c @@ -383,9 +383,15 @@ COUNT dos_findfirst(UCOUNT attr, BYTE * name) /* Special handling - the volume id is only in the root */ /* directory and only searched for once. So we need to open */ /* the root and return only the first entry that contains the */ - /* volume id bit set. */ - if ((attr & (D_VOLID|D_DIR))==D_VOLID) - i = 3; + /* volume id bit set (while ignoring LFN entries). */ + /* 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) /* if ONLY label wanted */ + i = 3; /* redirect search to root dir (?) in volume label case */ + else + attr &= ~D_VOLID; /* ignore volume mask */ + /* Now open this directory so that we can read the */ /* fnode entry and do a match on it. */