This is a part of the CLFS silo patch found at http://svn.cross-lfs.org/svn/repos/cross-lfs/trunk/patches/silo-1.4.13-fixes-3.patch diff -Naur silo-1.4.13.orig/second/fs/ufs.c silo-1.4.13/second/fs/ufs.c --- silo-1.4.13.orig/second/fs/ufs.c 2006-06-01 13:24:53.000000000 -0400 +++ silo-1.4.13/second/fs/ufs.c 2007-04-03 17:02:53.000000000 -0400 @@ -40,28 +40,18 @@ ino_t inode = 0; -#ifdef UFS_CIGAM -/* Apparently new header */ - #define ufsi_size(x) ((unsigned int)((x)->ui_size)) #define ufsi_db(x) ((unsigned int *)((x)->ui_u2.ui_addr.ui_db)) #define ufsi_ib(x) ((unsigned int *)((x)->ui_u2.ui_addr.ui_ib)) #define ufsd_namlen(x) ((unsigned char)((x)->d_u.d_44.d_namlen)) -#ifdef UFS_MINFREE -/* Apparently even newer header */ -#define ufs_superblock ufs_super_block +struct ufs_superblock_full { + struct ufs_super_block_first first; + struct ufs_super_block_second second; + struct ufs_super_block_third third; +}; +#define ufs_superblock ufs_super_block_first #define ufs_direct ufs_dir_entry -#endif - -#else - -#define ufsi_size(x) (((x)->ui_size.val[1])) -#define ufsi_db(x) ((unsigned int *)((x)->ui_db)) -#define ufsi_ib(x) ((unsigned int *)((x)->ui_ib)) -#define ufsd_namlen(x) ((unsigned char)((x)->d_namlen)) - -#endif #ifndef S_ISLNK #include @@ -92,25 +82,22 @@ return p; } -static struct ufs_superblock *ufs_read_super(ufs_filsys fs) +static struct ufs_superblock_full *ufs_read_super(ufs_filsys fs) { - struct ufs_superblock *usb; + struct ufs_superblock_full *usb; - usb = (struct ufs_superblock *) malloc (2048); + usb = (struct ufs_superblock_full *) malloc (2048); if (!usb) return 0; if (io_channel_read_blk (fs->io, UFS_SBLOCK/1024, -2048, (char *)usb)) return 0; - if (usb->fs_magic != UFS_MAGIC) { - /* XXX - replace hard-coded constant with a byte-swap macro */ - if (usb->fs_magic == 0x54190100) { - } + if (usb->third.fs_magic != UFS_MAGIC) { return 0; } - if (usb->fs_bsize != UFS_BSIZE) + if (usb->first.fs_bsize != UFS_BSIZE) return 0; - if (usb->fs_fsize != UFS_FSIZE) + if (usb->first.fs_fsize != UFS_FSIZE) return 0; - io_channel_set_blksize (fs->io, usb->fs_fsize); + io_channel_set_blksize (fs->io, usb->first.fs_fsize); return usb; }