X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fvolume_id%2Flib%2Ffat.c;h=c0cfed82c008ccfd9d18c3a37f466f45ea7abbcf;hb=387a8271207b4e921258194cf359039babbc33b9;hp=e30318cf0967477e5931c58efd7dee6252fce42c;hpb=3e39ff63658ed76398d0ee98f361221744fe591f;p=elogind.git diff --git a/extras/volume_id/lib/fat.c b/extras/volume_id/lib/fat.c index e30318cf0..c0cfed82c 100644 --- a/extras/volume_id/lib/fat.c +++ b/extras/volume_id/lib/fat.c @@ -411,7 +411,11 @@ magic: fat32: info("looking for FAT32\n"); - /* FAT32 should have a valid signature in the fsinfo block */ + /* + * FAT32 should have a valid signature in the fsinfo block, + * but also allow all bytes set to '\0', because some volumes + * do not set the signature at all. + */ fsinfo_sect = le16_to_cpu(vs->type.fat32.fsinfo_sector); buf = volume_id_get_buffer(id, off + (fsinfo_sect * sector_size), 0x200); if (buf == NULL) @@ -423,11 +427,13 @@ fat32: info("signature2: 0x%02x%02x%02x%02x\n", fsinfo->signature2[0], fsinfo->signature2[1], fsinfo->signature2[2], fsinfo->signature2[3]); - if (memcmp(fsinfo->signature1, "\x52\x52\x61\x41", 4) != 0) + if (memcmp(fsinfo->signature1, "\x52\x52\x61\x41", 4) != 0 && + memcmp(fsinfo->signature1, "\x00\x00\x00\x00", 4) != 0) return -1; - if (memcmp(fsinfo->signature2, "\x72\x72\x41\x61", 4) != 0) + if (memcmp(fsinfo->signature2, "\x72\x72\x41\x61", 4) != 0 && + memcmp(fsinfo->signature2, "\x00\x00\x00\x00", 4) != 0) return -1 ; - info("FAT32 signatures match\n"); + info("FAT32 signatures ok\n"); vs = (struct vfat_super_block *) volume_id_get_buffer(id, off, 0x200); if (vs == NULL) @@ -497,6 +503,7 @@ fat32: found: volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); id->type = "vfat"; - + /* we think this is fat, but we make sure no other signatures are found */ + id->force_unique_result = 1; return 0; }