delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/12/16/03:34:24

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: Rob Kramer <robk AT starhub DOT net DOT sg>
Subject: statfs() doc patch.
Newsgroups: comp.os.msdos.djgpp
Lines: 47
User-Agent: KNode/0.7.2
MIME-Version: 1.0
Message-ID: <EizDb.3309281$Of.514843@news.easynews.com>
X-Complaints-To: abuse AT easynews DOT com
Organization: EasyNews, UseNet made Easy!
X-Complaints-Info: Please be sure to forward a copy of ALL headers otherwise we will be unable to process your complaint properly.
Date: Tue, 16 Dec 2003 08:24:04 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi,

I recently spent some time figuring out why my statfs calls were
intermittently misreporting the number of free blocks. I'm using latest CVS
on a Win98 DOS-mode OS with a 20GB FAT16 drive split in many 2GB partitions
(ugh).

With some tracing I found out it was because I didn't specify the drive
letter fully ("c:" instead of "c:\"), causing the call to return -1 for
blocks free, or sometimes the correct value. RBIL explains this:

INT 21 - Windows95 - FAT32 - GET EXTENDED FREE SPACE ON DRIVE
        AX = 7303h

[chop]

    under DOS 7.x (i.e. "MSDOS Mode" under Windows95), the ASCIZ string
    pointed at by DS:DX *must* include the drive letter, or this function
    will return CF set/AX=0015h (invalid drive).  In a DOS box, omitting
    the drive letter (DS:DX -> "\") results in the free space for the
    current default drive, as expected

On FAT32 the problem doesn't occur, either because 0x7303 works, or because
0x7302 is used. 

Perhaps a note in the documentation would be a good idea:


diff -u -3 -p -r1.8 statfs.txh
--- statfs.txh  7 Feb 2003 18:13:52 -0000       1.8
+++ statfs.txh  16 Dec 2003 08:06:54 -0000
@@ -33,6 +33,10 @@ struct statfs
 Note that if INT 21h is hooked by a TSR, the total size is limited
 to approximately 2GB (@pxref{statvfs}).

+On FAT16 filesystems running Windows 95/98 in DOS mode, @var{filename}
+must contain a complete drive letter specification (e.g. "c:\"), or
+@code{statfs} will return incorrect values.
+
 Note that there is a POSIX-compliant function @code{statvfs}
 (@pxref{statvfs}), which returns similar information.


Cheers,

    Rob

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019