Mail Archives: djgpp-workers/1999/01/04/08:32:39
On Mon, 4 Jan 1999, Martin Str|mberg wrote:
> Here's the result this far.
Okay, I tested these new versions. Here are the results:
- on Windows 95:
* local hard disks return FAT16, as they should
* floppies return FAT12, also as expected
* I didn't try a Novell drives, since I think they might have been
the reason for the wedges the other day
* a CD-ROM was reported as FAT16 (??)
- on Windows/NT (v4.00):
* NTFS partition is reported as NTFS (good!)
* networked drive mounted via NFS is reported as InterDri
(InterDrive is the name of the installed redirector)
* a floppy formatted for DOS/Windows 95 is reported as just FAT (!!)
So, as usual, NT screws up everything a bit: the filesystem name is not
guaranteed to be 8-character long (the "NTFS" and "FAT" strings were NOT
blank-padded), and they don't bother to put the FAT size into the name.
Seems like the code will need to be prepared for these atrocities.
I don't have any machine, including NT, with access to FAT32 drives, so
it would be interesting to know what does NT return for a FAT32 drive (if
and when it supports it), or whether NT at all supports FAT32 features
for DOS programs. Anybody?
I have still to test in plain DOS.
Allow me several comments about the code:
> int /* 0 == error; 1 == result_str filled in. */
> _get_fs_type(const int drive /* drive number (1=A:). */
> , char *const result_str /* String to put result in. At
^^^^^^^^^^^^^^^^^^^^^^
Why does this have to be "char * const"? It might be quite a nuisance
for some programs compiled with -Wall or stricter switches, and I don't
see any reason for that. Shouldn't "char *" be enough?
> /* Get the file system type. */
> for(n = 0; n < 8; n++)
> {
> result_str[n] = _farpeekb( _dos_ds, __tb + 0x11 + n);
> }
> result_str[8] = 0;
I suggest to remove the trailing blanks from the result.
> if( _get_fs_type( drive, s ) )
> {
> if( sscanf(s, " FAT%d", &n) == 1 )
`sscanf' seems too gross. This function will be linked into every DJGPP
image, so something leaner, like a literal test for `F', then `A', then
`T', and a simple loop that computes the number from what follows, is a
much better idea, I think.
- Raw text -