From: "Javier Martín" <lordhabbit@gmail.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: [PATCH] r1986 broke FAT detection
Date: Tue, 10 Feb 2009 01:19:20 +0100 [thread overview]
Message-ID: <1234225160.10940.25.camel@localhost> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 916 bytes --]
At r1985, "sudo ./grub-probe -t fs -d /dev/fd0" outputs "fat" with a
freshly-formatted VFAT floppy in the drive. At r1986, it spits "error:
unknown filesystem". The cause is this error, repeated three times:
if (! grub_strncmp(something, "FAT12", 5))
goto fail;
Strncmp does not return a boolean result (i.e. matches or doesn't), but
an _integer_ that is supposed to establish a comparison order between
strings. Thus, a return value of 0 is actually a match. See why I insist
on treating semantic-ints different than semantic-bools even though the
language does not? The correction is obvious (a patch is attached):
if (0 != grub_strncmp(something, "FAT12",5))
goto fail;
And I remark the 0 != instead of a simple if (strncmp()) test. BTW, I
think the "FATx" constants should be made into macros or SLT... Magic
constants creep me out.
-- Lazy Oblivious, Rational Disaster -- Habbit
[-- Attachment #1.2: damned_int_bool_identity.patch --]
[-- Type: text/x-patch, Size: 898 bytes --]
Index: fs/fat.c
===================================================================
--- fs/fat.c (revision 1987)
+++ fs/fat.c (working copy)
@@ -187,9 +187,9 @@
if (grub_disk_read (disk, 0, 0, sizeof (bpb), (char *) &bpb))
goto fail;
- if (! grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT12",5)
- || ! grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT16",5)
- || ! grub_strncmp((const char *) bpb.version_specific.fat32.fstype, "FAT32",5))
+ if (0 != grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT12", 5)
+ && 0 != grub_strncmp((const char *) bpb.version_specific.fat12_or_fat16.fstype, "FAT16", 5)
+ && 0 != grub_strncmp((const char *) bpb.version_specific.fat32.fstype, "FAT32", 5))
goto fail;
/* Get the sizes of logical sectors and clusters. */
[-- Attachment #2: Esta parte del mensaje está firmada digitalmente --]
[-- Type: application/pgp-signature, Size: 835 bytes --]
next reply other threads:[~2009-02-10 0:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-10 0:19 Javier Martín [this message]
2009-02-10 9:50 ` [PATCH] r1986 broke FAT detection Felix Zielcke
2009-02-10 11:44 ` Javier Martín
2009-02-21 13:13 ` Robert Millan
2009-02-22 14:08 ` Javier Martín
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1234225160.10940.25.camel@localhost \
--to=lordhabbit@gmail.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.