diff -Naur util-linux-2.11f/fdisk/cfdisk.c util-linux/fdisk/cfdisk.c --- util-linux-2.11f/fdisk/cfdisk.c Thu Jun 7 15:55:16 2001 +++ util-linux/fdisk/cfdisk.c Sat Jun 30 03:25:09 2001 @@ -47,6 +47,8 @@ * Some more i18n. * Sun Jul 18 03:19:42 MEST 1999 * Terabyte-sized disks. + * Sat Jun 30 05:23:19 EST 2001 + * XFS label recognition. * ****************************************************************************/ @@ -397,6 +399,8 @@ else if (p_info[i].id == LINUX) { if (!strcmp(p_info[i].fstype, "ext2")) return _("Linux ext2"); + else if (!strcmp(p_info[i].fstype, "xfs")) + return _("Linux XFS"); else return _("Linux"); } else if (p_info[i].id == OS2_OR_NTFS) { @@ -612,7 +616,7 @@ } static void -get_ext2_label(int i) { +get_linux_label(int i) { #define EXT2_SUPER_MAGIC 0xEF53 #define EXT2LABELSZ 16 struct ext2_super_block { @@ -622,22 +626,48 @@ char s_volume_name[EXT2LABELSZ]; char s_last_mounted[64]; char s_dummy2[824]; - } sb; - char *label = sb.s_volume_name; + } e2fsb; +#define XFS_SUPER_MAGIC "XFSB" +#define XFS_SUPER_MAGIC2 "BFSX" +#define XFSLABELSZ 12 + struct xfs_super_block { + unsigned char s_magic[4]; + unsigned char s_dummy0[104]; + unsigned char s_fname[XFSLABELSZ]; + unsigned char s_dummy1[904]; + } xfsb; + char *label; ext2_loff_t offset; int j; offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset) * SECTOR_SIZE + 1024; if (ext2_llseek(fd, offset, SEEK_SET) == offset - && read(fd, &sb, sizeof(sb)) == sizeof(sb) - && sb.s_magic[0] + 256*sb.s_magic[1] == EXT2_SUPER_MAGIC) { + && read(fd, &e2fsb, sizeof(e2fsb)) == sizeof(e2fsb) + && e2fsb.s_magic[0] + 256*e2fsb.s_magic[1] == EXT2_SUPER_MAGIC) { + label = e2fsb.s_volume_name; for(j=0; j