| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
| From: | Juan Manuel Guerrero <juan DOT guerrero AT gmx DOT de> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Re: gcc difficulties on MSDOS 6.22 with LFN driver installed |
| Date: | Sun, 4 Sep 2011 08:08:45 -0700 (PDT) |
| Organization: | http://groups.google.com |
| Lines: | 96 |
| Message-ID: | <340dcc25-1777-4a76-b2fd-bbc636df9afc@t9g2000yqi.googlegroups.com> |
| References: | <201108310027 DOT 22056 DOT juan DOT guerrero AT gmx DOT de> <E1Qye2f-0005Iu-TI AT fencepost DOT gnu DOT org> |
| <201108312117 DOT 54522 DOT juan DOT guerrero AT gmx DOT de> <j3op85$567$1 AT speranza DOT aioe DOT org> | |
| <038ae4ff-44f2-4ad2-b806-a6ed9b6085a2 AT o9g2000vbo DOT googlegroups DOT com> | |
| <83zkincty6 DOT fsf AT gnu DOT org> <e5b1540d-525e-48b9-9b15-59e9ba823a23 AT s2g2000vby DOT googlegroups DOT com> | |
| <CAA2C=vA1fwBnmJh-L0g4Rw+BdoSD4VBXGd2WP-W5dws7KGFA-Q AT mail DOT gmail DOT com> | |
| <83pqjiuccr DOT fsf AT gnu DOT org> <306fc401-ad43-4c8c-9e86-382f90e32110 AT p10g2000yqi DOT googlegroups DOT com> | |
| <j3vko3$v6k$1 AT speranza DOT aioe DOT org> | |
| NNTP-Posting-Host: | 95.208.11.28 |
| Mime-Version: | 1.0 |
| X-Trace: | posting.google.com 1315149387 10006 127.0.0.1 (4 Sep 2011 15:16:27 GMT) |
| X-Complaints-To: | groups-abuse AT google DOT com |
| NNTP-Posting-Date: | Sun, 4 Sep 2011 15:16:27 +0000 (UTC) |
| Complaints-To: | groups-abuse AT google DOT com |
| Injection-Info: | t9g2000yqi.googlegroups.com; posting-host=95.208.11.28; posting-account=OsAajgoAAADdKJnkJkmhzqP0jo6I_P_0 |
| User-Agent: | G2/1.0 |
| X-Google-Web-Client: | true |
| X-Google-Header-Order: | HUALESNKRC |
| X-HTTP-UserAgent: | Mozilla/5.0 (X11; Linux x86_64; rv:6.0) Gecko/20100101 Firefox/6.0,gzip(gfe) |
| Bytes: | 4553 |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| X-MIME-Autoconverted: | from quoted-printable to 8bit by delorie.com id p84FU2Kf004603 |
| Reply-To: | djgpp AT delorie DOT com |
On 4 Sep., 12:43, "Rod Pemberton" <do_not_h DOT DOT DOT AT noavailemail DOT cmm>
wrote:
> "Juan Manuel Guerrero" <juan DOT guerr DOT DOT DOT AT gmx DOT de> wrote in messagenews:306fc401-ad43-4c8c-9e86-382f90e32110 AT p10g2000yqi DOT googlegroups DOT com...
> > On 2 Sep., 18:40, Eli Zaretskii <e DOT DOT DOT AT gnu DOT org> wrote:
> > > > Date: Fri, 2 Sep 2011 17:25:48 +0300
> > > > From: Ozkan Sezer <seze DOT DOT DOT AT gmail DOT com>
>
> > > > Something like the following then? (Very quick+dirty patch, I know.)
>
> > > Yes, thanks. Although it would be better to know whether DOSLFN
> > > returns -1 in offset 0x24 or non-zero in offset 0x20, and have a more
> > > fine-grain recovery here.
>
> > > > I also wonder whether fchmod() and/or fstat() are affected by this
> > > > lfn issue...
>
> > > Juan, can you test that?
>
> > I have found my old FreeDOS CD and installed DOSLFN 0.40c.
> > With this driver everthing works on MSDOS. Stepping into
> > the filelength() code shows that the 0.40e version does
> > not set the CF when it returns from 0x71A6 call while 0.40c
> > does so that it jumps directly into the 0x4201 code instead
> > of returning an EOVERFLOW.
>
> If 0.40e does not set the CF, shouldn't I be seeing the error with
> MS-DOS 7.10 too? I don't get why this is just 6.22 or FreeDOS ...
>
> Rod Pemberton
I do not know why the behaviour is as it is. But I can
confirm that that for some reason MSDOS and FreeDOS have
different behaviour. Both partitions use FAT16. If MSDOS
is used and DOSLFN-0.40c is used the CF is reset after
calling 0x71A6 and ax contents 0x7100. If I replace the
driver with DOSLFN-0.40e the the CF is not reseted but
ax contents 0x7100 too. This has the consequence that
the code below from filelength() generates an EOVERFLOW
if MSDOS is used.
if (_USE_LFN && (fhandle != 0 || _os_trueversion != 0x532))
{
regs.x.ax = 0x71A6;
regs.x.bx = fhandle;
regs.x.ds = __tb >> 4;
regs.x.dx = 0;
regs.x.flags |= 1;
__dpmi_int(0x21, ®s);
if ((regs.x.flags & 1) == 0)
{
/* Offset 0x24 contains the low 32-bits of the file size.
Offset 0x20 contains the high 32-bits. */
retval = _farpeekl(_dos_ds, __tb + 0x24);
if ((_farpeekl(_dos_ds, __tb + 0x20) != 0) || (retval == -1))
{
errno = EOVERFLOW;
return -1L;
}
return retval;
}
}
If FreeDOS is used, the CF is always reset no matter what
driver version is used. ax always contents 0x7100. This
has been verified with debugger sessions.
IMHO there are only 2 conclusions to this. Or DJGPP has
a bug somewhere in __dpmi_int() or the OS and driver have
a bug. Neitherless it is a fact that filelength should
have checked that 0x71A6 is supported at all.
Regards,
Juan M.Guerrero
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |