
* hacked version, based on http://youpibouh.thefreecat.org/debian-hurd/util-linux/patch-util-linux

* do not forget to rerun ./autogen.sh 

diff -Nru util-linux-2.13.1.1/configure.ac util-linux-2.13.1.1/configure.ac
--- util-linux-2.13.1.1/configure.ac	2008-04-22 00:14:50.000000000 +0200
+++ util-linux-2.13.1.1/configure.ac	2008-08-07 20:37:34.000000000 +0200
@@ -235,6 +235,14 @@
 [AC_MSG_NOTICE([Your libc thinks that swapon has 1 arg only.])
 ])
 
+case "${host_os}" in
+  linux*)
+    AM_CONDITIONAL(LINUX,true)
+    ;;
+  *)
+    AM_CONDITIONAL(LINUX,false)
+    ;;
+esac
 
 dnl UTIL_SET_ARCH(ARCHNAME, PATTERN)
 dnl ---------------------------------
diff -Nru util-linux-2.13.1.1/debian/changelog util-linux-2.13.1.1/debian/changelog
--- util-linux-2.13.1.1/debian/changelog	2008-08-07 20:37:27.000000000 +0200
+++ util-linux-2.13.1.1/debian/changelog	2008-08-07 20:37:34.000000000 +0200
@@ -1,3 +1,9 @@
+util-linux (2.13.1.1-1+kfreebsd) unreleased; urgency=low
+
+  * Add support for GNU/kFreeBSD.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Thu, 07 Aug 2008 20:30:31 +0200
+
 util-linux (2.13.1.1-1) unstable; urgency=low
 
   [Steve Grubb]
diff -Nru util-linux-2.13.1.1/debian/rules util-linux-2.13.1.1/debian/rules
--- util-linux-2.13.1.1/debian/rules	2008-08-07 20:37:27.000000000 +0200
+++ util-linux-2.13.1.1/debian/rules	2008-08-07 20:37:34.000000000 +0200
@@ -75,7 +75,7 @@
 	$(MAKE) install DESTDIR=`pwd`/debian/util-linux INSTALL_STRIP_FLAG=""
 	dh_installdocs -i -s
 	install -m 644 login-utils/README.modems-with-agetty debian/util-linux/usr/share/doc/util-linux/README.modems-with-getty
-ifeq ($(DEB_HOST_ARCH_OS),linux)
+ifneq ($(DEB_HOST_ARCH_OS),hurd)
 	perl -pi.bak -e 's/agetty/getty/g' debian/util-linux/usr/share/man/man8/getty.8 \
 		  debian/util-linux/usr/share/doc/util-linux/README.*
 	rm `find debian/util-linux/usr -name \*.bak`
@@ -88,10 +88,12 @@
 	dh_movefiles --sourcedir=debian/util-linux -i -s
 	#
 	# XXX - push things to where debian has always(?) had them...
+ifeq ($(DEB_HOST_ARCH_OS),linux)
 	mv debian/util-linux/usr/sbin/*part* debian/util-linux/usr/bin
+	mv debian/util-linux/usr/bin/cytune debian/util-linux/usr/sbin
+endif
 	mv debian/util-linux/usr/bin/tailf debian/util-linux/bin
 	mv debian/util-linux/usr/bin/isosize debian/util-linux/sbin
-	mv debian/util-linux/usr/bin/cytune debian/util-linux/usr/sbin
 	mv debian/util-linux/usr/share/man/man8/linux32.8 debian/util-linux/usr/share/man/man1/linux32.1
 	mv debian/util-linux/usr/share/man/man8/linux64.8 debian/util-linux/usr/share/man/man1/linux64.1
 	# the version in bsdmainutils seems newer.
@@ -135,11 +137,13 @@
 else
 	cd debian/util-linux && if [ -f sbin/hwclock ] ; then ln -sf hwclock.8.gz usr/share/man/man8/clock.8.gz; fi
 endif
+	install -m 644 debian/mount.fstab debian/mount/usr/share/doc/mount/examples/fstab
+endif
+ifneq ($(DEB_HOST_ARCH_OS),hurd)
 	cd debian/util-linux/sbin ; mv agetty getty
 	cd debian/util-linux/usr/share/man/man8 ; mv agetty.8 getty.8
-	install -m 644 debian/mount.fstab debian/mount/usr/share/doc/mount/examples/fstab
 endif
-ifeq ($(DEB_HOST_GNU_SYSTEM),gnu)
+ifneq ($(DEB_HOST_ARCH_OS),linux)
 	cd debian/util-linux/sbin ; mv mkswap mkswap.linux
 	cd debian/util-linux/usr/share/man/man8 ; mv mkswap.8 mkswap.linux.8
 endif
@@ -167,7 +171,7 @@
 	dh_makeshlibs -s
 	dh_installdeb -s
 	dh_shlibdeps -s
-ifneq ($(DEB_HOST_ARCH_OS),linux)
+ifeq ($(DEB_HOST_ARCH_OS),hurd)
 	echo util-linux:Conflicts=getty >> debian/util-linux.substvars
 endif
 	dh_gencontrol -s -Xbsdutils
diff -Nru util-linux-2.13.1.1/disk-utils/Makefile.am util-linux-2.13.1.1/disk-utils/Makefile.am
--- util-linux-2.13.1.1/disk-utils/Makefile.am	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/disk-utils/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -1,6 +1,6 @@
 include $(top_srcdir)/config/include-Makefile.am
 
-man_MANS = blockdev.8 fdformat.8 isosize.8 mkfs.8 mkswap.8 \
+man_MANS = blockdev.8 isosize.8 mkfs.8 mkswap.8 \
            fsck.minix.8 mkfs.minix.8 mkfs.bfs.8
 
 sbin_PROGRAMS = mkfs mkswap blockdev fsck.minix mkfs.minix mkfs.bfs
@@ -9,7 +9,12 @@
 mkfs_bfs_SOURCES = mkfs.bfs.c
 mkswap_SOURCES = mkswap.c swapheader.h
 
-usrbinexec_PROGRAMS = fdformat isosize
+usrbinexec_PROGRAMS = isosize
+
+if LINUX
+man_MANS += fdformat.8
+usrbinexec_PROGRAMS += fdformat
+endif
 
 if BUILD_ELVTUNE
 sbin_PROGRAMS += elvtune
diff -Nru util-linux-2.13.1.1/fdisk/cfdisk.c util-linux-2.13.1.1/fdisk/cfdisk.c
--- util-linux-2.13.1.1/fdisk/cfdisk.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/cfdisk.c	2008-08-07 20:37:34.000000000 +0200
@@ -78,7 +78,6 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include <linux/types.h>
 
 #include "nls.h"
 #include "xstrncpy.h"
diff -Nru util-linux-2.13.1.1/fdisk/fdiskaixlabel.h util-linux-2.13.1.1/fdisk/fdiskaixlabel.h
--- util-linux-2.13.1.1/fdisk/fdiskaixlabel.h	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdiskaixlabel.h	2008-08-07 20:37:34.000000000 +0200
@@ -1,7 +1,7 @@
 #ifndef FDISK_AIX_LABEL_H
 #define FDISK_AIX_LABEL_H
 
-#include <linux/types.h>   /* for __u32 etc */
+#include <stdint.h>   /* for uint32_t etc */
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
  *	This file may be redistributed under
diff -Nru util-linux-2.13.1.1/fdisk/fdiskbsdlabel.c util-linux-2.13.1.1/fdisk/fdiskbsdlabel.c
--- util-linux-2.13.1.1/fdisk/fdiskbsdlabel.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdiskbsdlabel.c	2008-08-07 20:37:34.000000000 +0200
@@ -62,6 +62,10 @@
 #define DKTYPENAMES
 #include "fdiskbsdlabel.h"
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 4096
+#endif
+
 static void xbsd_delete_part (void);
 static void xbsd_new_part (void);
 static void xbsd_write_disklabel (void);
diff -Nru util-linux-2.13.1.1/fdisk/fdiskbsdlabel.h util-linux-2.13.1.1/fdisk/fdiskbsdlabel.h
--- util-linux-2.13.1.1/fdisk/fdiskbsdlabel.h	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdiskbsdlabel.h	2008-08-07 20:37:34.000000000 +0200
@@ -34,10 +34,10 @@
  * SUCH DAMAGE.
  */
 
-#include <linux/types.h>	/* for __u32, __u16, __u8, __s16 */
+#include <stdint.h>	/* for uint32_t, uint16_t, uint8_t, int16_t */
 
 #ifndef BSD_DISKMAGIC
-#define BSD_DISKMAGIC     ((__u32) 0x82564557)
+#define BSD_DISKMAGIC     ((uint32_t) 0x82564557)
 #endif
 
 #ifndef BSD_MAXPARTITIONS
@@ -63,31 +63,31 @@
 #define	BSD_SBSIZE        8192		/* max size of fs superblock */
 
 struct xbsd_disklabel {
-	__u32	d_magic;		/* the magic number */
-	__s16	d_type;			/* drive type */
-	__s16	d_subtype;		/* controller/d_type specific */
+	uint32_t	d_magic;		/* the magic number */
+	int16_t	d_type;			/* drive type */
+	int16_t	d_subtype;		/* controller/d_type specific */
 	char	d_typename[16];		/* type name, e.g. "eagle" */
 	char	d_packname[16];			/* pack identifier */ 
 			/* disk geometry: */
-	__u32	d_secsize;		/* # of bytes per sector */
-	__u32	d_nsectors;		/* # of data sectors per track */
-	__u32	d_ntracks;		/* # of tracks per cylinder */
-	__u32	d_ncylinders;		/* # of data cylinders per unit */
-	__u32	d_secpercyl;		/* # of data sectors per cylinder */
-	__u32	d_secperunit;		/* # of data sectors per unit */
+	uint32_t	d_secsize;		/* # of bytes per sector */
+	uint32_t	d_nsectors;		/* # of data sectors per track */
+	uint32_t	d_ntracks;		/* # of tracks per cylinder */
+	uint32_t	d_ncylinders;		/* # of data cylinders per unit */
+	uint32_t	d_secpercyl;		/* # of data sectors per cylinder */
+	uint32_t	d_secperunit;		/* # of data sectors per unit */
 	/*
 	 * Spares (bad sector replacements) below
 	 * are not counted in d_nsectors or d_secpercyl.
 	 * Spare sectors are assumed to be physical sectors
 	 * which occupy space at the end of each track and/or cylinder.
 	 */
-	__u16	d_sparespertrack;	/* # of spare sectors per track */
-	__u16	d_sparespercyl;		/* # of spare sectors per cylinder */
+	uint16_t	d_sparespertrack;	/* # of spare sectors per track */
+	uint16_t	d_sparespercyl;		/* # of spare sectors per cylinder */
 	/*
 	 * Alternate cylinders include maintenance, replacement,
 	 * configuration description areas, etc.
 	 */
-	__u32	d_acylinders;		/* # of alt. cylinders per unit */
+	uint32_t	d_acylinders;		/* # of alt. cylinders per unit */
 
 			/* hardware characteristics: */
 	/*
@@ -106,30 +106,30 @@
 	 * Finally, d_cylskew is the offset of sector 0 on cylinder N
 	 * relative to sector 0 on cylinder N-1.
 	 */
-	__u16	d_rpm;			/* rotational speed */
-	__u16	d_interleave;		/* hardware sector interleave */
-	__u16	d_trackskew;		/* sector 0 skew, per track */
-	__u16	d_cylskew;		/* sector 0 skew, per cylinder */
-	__u32	d_headswitch;		/* head switch time, usec */
-	__u32	d_trkseek;		/* track-to-track seek, usec */
-	__u32	d_flags;		/* generic flags */
+	uint16_t	d_rpm;			/* rotational speed */
+	uint16_t	d_interleave;		/* hardware sector interleave */
+	uint16_t	d_trackskew;		/* sector 0 skew, per track */
+	uint16_t	d_cylskew;		/* sector 0 skew, per cylinder */
+	uint32_t	d_headswitch;		/* head switch time, usec */
+	uint32_t	d_trkseek;		/* track-to-track seek, usec */
+	uint32_t	d_flags;		/* generic flags */
 #define NDDATA 5
-	__u32	d_drivedata[NDDATA];	/* drive-type specific information */
+	uint32_t	d_drivedata[NDDATA];	/* drive-type specific information */
 #define NSPARE 5
-	__u32	d_spare[NSPARE];	/* reserved for future use */
-	__u32	d_magic2;		/* the magic number (again) */
-	__u16	d_checksum;		/* xor of data incl. partitions */
+	uint32_t	d_spare[NSPARE];	/* reserved for future use */
+	uint32_t	d_magic2;		/* the magic number (again) */
+	uint16_t	d_checksum;		/* xor of data incl. partitions */
 			/* filesystem and partition information: */
-	__u16	d_npartitions;	        /* number of partitions in following */
-	__u32	d_bbsize;	        /* size of boot area at sn0, bytes */
-	__u32	d_sbsize;	        /* max size of fs superblock, bytes */
+	uint16_t	d_npartitions;	        /* number of partitions in following */
+	uint32_t	d_bbsize;	        /* size of boot area at sn0, bytes */
+	uint32_t	d_sbsize;	        /* max size of fs superblock, bytes */
 	struct xbsd_partition	 {	/* the partition table */
-		__u32	p_size;	        /* number of sectors in partition */
-		__u32	p_offset;       /* starting sector */
-		__u32	p_fsize;        /* filesystem basic fragment size */
-		__u8	p_fstype;       /* filesystem type, see below */
-		__u8	p_frag;	        /* filesystem fragments per block */
-		__u16	p_cpg;	        /* filesystem cylinders per group */
+		uint32_t	p_size;	        /* number of sectors in partition */
+		uint32_t	p_offset;       /* starting sector */
+		uint32_t	p_fsize;        /* filesystem basic fragment size */
+		uint8_t	p_fstype;       /* filesystem type, see below */
+		uint8_t	p_frag;	        /* filesystem fragments per block */
+		uint16_t	p_cpg;	        /* filesystem cylinders per group */
 	} d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */
 };
 
diff -Nru util-linux-2.13.1.1/fdisk/fdiskmaclabel.h util-linux-2.13.1.1/fdisk/fdiskmaclabel.h
--- util-linux-2.13.1.1/fdisk/fdiskmaclabel.h	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdiskmaclabel.h	2008-08-07 20:37:34.000000000 +0200
@@ -1,7 +1,7 @@
 #ifndef FDISK_MAC_LABEL_H
 #define FDISK_MAC_LABEL_H
 
-#include <linux/types.h>   /* for __u32 etc */
+#include <stdint.h>   /* for uint32_t etc */
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
  *	This file may be redistributed under
diff -Nru util-linux-2.13.1.1/fdisk/fdisksgilabel.c util-linux-2.13.1.1/fdisk/fdisksgilabel.c
--- util-linux-2.13.1.1/fdisk/fdisksgilabel.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdisksgilabel.c	2008-08-07 20:37:34.000000000 +0200
@@ -19,10 +19,10 @@
 #include <sys/ioctl.h>          /* ioctl */
 #include <sys/stat.h>           /* stat */
 #include <assert.h>             /* assert */
+#include <stdint.h>		/* uint*_t */
 
 #include <endian.h>
 #include "nls.h"
-#include <linux/major.h>        /* FLOPPY_MAJOR */
 
 #include "common.h"
 #include "fdisk.h"
@@ -100,11 +100,11 @@
 
 static inline unsigned short
 __swap16(unsigned short x) {
-        return (((__u16)(x) & 0xFF) << 8) | (((__u16)(x) & 0xFF00) >> 8);
+        return (((uint16_t)(x) & 0xFF) << 8) | (((uint16_t)(x) & 0xFF00) >> 8);
 }
 
-static inline __u32
-__swap32(__u32 x) {
+static inline uint32_t
+__swap32(uint32_t x) {
         return (((x & 0xFF) << 24) |
 		((x & 0xFF00) << 8) |
 		((x & 0xFF0000) >> 8) |
@@ -222,8 +222,8 @@
 	       w + 1, _("Device"));
 	for (i = 0 ; i < partitions; i++) {
 		if (sgi_get_num_sectors(i) || debug) {
-			__u32 start = sgi_get_start_sector(i);
-			__u32 len = sgi_get_num_sectors(i);
+			uint32_t start = sgi_get_start_sector(i);
+			uint32_t len = sgi_get_num_sectors(i);
 			kpi++;		/* only count nonempty partitions */
 			printf(
 				"%2d: %s %4s %9ld %9ld %9ld  %2x  %s\n",
@@ -244,8 +244,8 @@
 	       sgilabel->boot_file);
 	for (i = 0 ; i < volumes; i++) {
 		if (sgilabel->directory[i].vol_file_size) {
-			__u32 start = SSWAP32(sgilabel->directory[i].vol_file_start);
-			__u32 len = SSWAP32(sgilabel->directory[i].vol_file_size);
+			uint32_t start = SSWAP32(sgilabel->directory[i].vol_file_start);
+			uint32_t len = SSWAP32(sgilabel->directory[i].vol_file_size);
 			unsigned char *name = sgilabel->directory[i].vol_file_name;
 			printf(_("%2d: %-10s sector%5u size%8u\n"),
 			       i, name, (unsigned int) start,
diff -Nru util-linux-2.13.1.1/fdisk/fdisksgilabel.h util-linux-2.13.1.1/fdisk/fdisksgilabel.h
--- util-linux-2.13.1.1/fdisk/fdisksgilabel.h	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdisksgilabel.h	2008-08-07 20:37:34.000000000 +0200
@@ -1,7 +1,7 @@
 #ifndef FDISK_SGI_LABEL_H
 #define FDISK_SGI_LABEL_H
 
-#include <linux/types.h>   /* for __u32 etc */
+#include <stdint.h>   /* for uint32_t etc */
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
  *	This file may be modified and redistributed under
@@ -99,9 +99,9 @@
 #define	SGI_INFO_MAGIC		0x00072959
 #define	SGI_INFO_MAGIC_SWAPPED	0x59290700
 #define SSWAP16(x) (other_endian ? __swap16(x) \
-                                 : (__u16)(x))
+                                 : (uint16_t)(x))
 #define SSWAP32(x) (other_endian ? __swap32(x) \
-                                 : (__u32)(x))
+                                 : (uint32_t)(x))
 
 /* fdisk.c */
 #define sgilabel ((sgi_partition *)MBRbuffer)
diff -Nru util-linux-2.13.1.1/fdisk/fdisksunlabel.c util-linux-2.13.1.1/fdisk/fdisksunlabel.c
--- util-linux-2.13.1.1/fdisk/fdisksunlabel.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdisksunlabel.c	2008-08-07 20:37:34.000000000 +0200
@@ -17,6 +17,7 @@
 #include <sys/ioctl.h>		/* ioctl */
 #include <sys/stat.h>		/* stat */
 #include <sys/sysmacros.h>	/* major */
+#include <stdint.h>		/* uint*_t */
 
 #include "nls.h"
 
@@ -26,7 +27,9 @@
 #include <scsi/scsi.h>		/* SCSI_IOCTL_GET_IDLUN */
 #undef u_char
 #endif
+#ifdef __linux__
 #include <linux/major.h>	/* FLOPPY_MAJOR */
+#endif
 
 #include "common.h"
 #include "fdisk.h"
@@ -57,17 +60,20 @@
 };
 
 static inline unsigned short __swap16(unsigned short x) {
-        return (((__u16)(x) & 0xFF) << 8) | (((__u16)(x) & 0xFF00) >> 8);
+        return (((uint16_t)(x) & 0xFF) << 8) | (((uint16_t)(x) & 0xFF00) >> 8);
 }
-static inline __u32 __swap32(__u32 x) {
-        return (((__u32)(x) & 0xFF) << 24) | (((__u32)(x) & 0xFF00) << 8) | (((__u32)(x) & 0xFF0000) >> 8) | (((__u32)(x) & 0xFF000000) >> 24);
+static inline uint32_t __swap32(uint32_t x) {
+        return (((uint32_t)(x) & 0xFF) << 24) | (((uint32_t)(x) & 0xFF00) << 8) | (((uint32_t)(x) & 0xFF0000) >> 8) | (((uint32_t)(x) & 0xFF000000) >> 24);
 }
 
 #define SSWAP16(x) (other_endian ? __swap16(x) \
-				 : (__u16)(x))
+				 : (uint16_t)(x))
 #define SSWAP32(x) (other_endian ? __swap32(x) \
-				 : (__u32)(x))
+				 : (uint32_t)(x))
 
+#ifndef FLOPPY_MAJOR
+#define FLOPPY_MAJOR 2
+#endif
 #ifndef IDE0_MAJOR
 #define IDE0_MAJOR 3
 #endif
@@ -96,7 +102,7 @@
 	}
 }
 
-static void set_sun_partition(int i, __u32 start, __u32 stop, __u16 sysid)
+static void set_sun_partition(int i, uint32_t start, uint32_t stop, uint16_t sysid)
 {
 	sunlabel->part_tags[i].tag = SSWAP16(sysid);
 	sunlabel->part_tags[i].flag = SSWAP16(0);
@@ -270,7 +276,7 @@
 	set_changed(0);
 }
 
-void toggle_sunflags(int i, __u16 mask)
+void toggle_sunflags(int i, uint16_t mask)
 {
 	struct sun_tag_flag *p = &sunlabel->part_tags[i];
 
@@ -279,7 +285,7 @@
 	set_changed(i);
 }
 
-static void fetch_sun(__u32 *starts, __u32 *lens, __u32 *start, __u32 *stop)
+static void fetch_sun(uint32_t *starts, uint32_t *lens, uint32_t *start, uint32_t *stop)
 {
 	int i, continuous = 1;
 
@@ -328,7 +334,7 @@
 
 void verify_sun(void)
 {
-    __u32 starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS], start, stop;
+    uint32_t starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS], start, stop;
     int i,j,k,starto,endo;
     int array[SUN_NUM_PARTITIONS];
 
@@ -394,10 +400,10 @@
 
 void add_sun_partition(int n, int sys)
 {
-	__u32 starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS];
+	uint32_t starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS];
 	struct sun_partition *part = &sunlabel->partitions[n];
 	struct sun_tag_flag *tag = &sunlabel->part_tags[n];
-	__u32 start, stop, stop2;
+	uint32_t start, stop, stop2;
 	int whole_disk = 0;
 		
 	char mesg[256];
@@ -530,7 +536,7 @@
 	part->num_sectors = 0;
 }
 
-int sun_change_sysid(int i, __u16 sys)
+int sun_change_sysid(int i, uint16_t sys)
 {
 	struct sun_partition *part = &sunlabel->partitions[i];
 	struct sun_tag_flag *tag = &sunlabel->part_tags[i];
@@ -597,8 +603,8 @@
 		struct sun_tag_flag *tag = &sunlabel->part_tags[i];
 
 		if (part->num_sectors) {
-			__u32 start = SSWAP32(part->start_cylinder) * heads * sectors;
-			__u32 len = SSWAP32(part->num_sectors);
+			uint32_t start = SSWAP32(part->start_cylinder) * heads * sectors;
+			uint32_t len = SSWAP32(part->num_sectors);
 			printf(
 			    "%s %c%c %9ld %9ld %9ld%c  %2x  %s\n",
 /* device */		  partname(disk_device, i+1, w),
diff -Nru util-linux-2.13.1.1/fdisk/fdisksunlabel.h util-linux-2.13.1.1/fdisk/fdisksunlabel.h
--- util-linux-2.13.1.1/fdisk/fdisksunlabel.h	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/fdisksunlabel.h	2008-08-07 20:37:34.000000000 +0200
@@ -1,15 +1,15 @@
 #ifndef FDISK_SUN_LABEL_H
 #define FDISK_SUN_LABEL_H
 
-#include <linux/types.h>   /* for __u16, __u32 */
+#include <stdint.h>   /* for uint16_t, uint32_t */
 
 struct sun_partition {
-	__u32	start_cylinder;
-	__u32	num_sectors;
+	uint32_t	start_cylinder;
+	uint32_t	num_sectors;
 };
 
 struct sun_tag_flag {
-	__u16	tag;
+	uint16_t	tag;
 #define SUN_TAG_UNASSIGNED	0x00	/* Unassigned partition */
 #define SUN_TAG_BOOT		0x01	/* Boot partition	*/
 #define SUN_TAG_ROOT		0x02	/* Root filesystem	*/
@@ -27,7 +27,7 @@
 #define SUN_TAG_LINUX_LVM	0x8e	/* Linux LVM		*/
 #define SUN_TAG_LINUX_RAID	0xfd	/* LInux RAID		*/
 
-	__u16	flag;
+	uint16_t	flag;
 #define SUN_FLAG_UNMNT		0x01	/* Unmountable partition*/
 #define SUN_FLAG_RONLY		0x10	/* Read only		*/
 };
@@ -43,32 +43,32 @@
 
 struct sun_disk_label {
 	char			label_id[SUN_LABEL_ID_SIZE];
-	__u32			version;
+	uint32_t			version;
 	char			volume_id[SUN_VOLUME_ID_SIZE];
-	__u16			num_partitions;
+	uint16_t			num_partitions;
 	struct sun_tag_flag	part_tags[SUN_NUM_PARTITIONS];
-	__u32			bootinfo[3];
-	__u32			sanity;
-	__u32			resv[10];
-	__u32			part_timestamps[SUN_NUM_PARTITIONS];
-	__u32			write_reinstruct;
-	__u32			read_reinstruct;
-	__u8			pad[148];
-	__u16			rpm;
-	__u16			pcyl;
-	__u16			apc;
-	__u16			resv1;
-	__u16			resv2;
-	__u16			intrlv;
-	__u16			ncyl;
-	__u16			acyl;
-	__u16			nhead;
-	__u16			nsect;
-	__u16			resv3;
-	__u16			resv4;
+	uint32_t			bootinfo[3];
+	uint32_t			sanity;
+	uint32_t			resv[10];
+	uint32_t			part_timestamps[SUN_NUM_PARTITIONS];
+	uint32_t			write_reinstruct;
+	uint32_t			read_reinstruct;
+	uint8_t			pad[148];
+	uint16_t			rpm;
+	uint16_t			pcyl;
+	uint16_t			apc;
+	uint16_t			resv1;
+	uint16_t			resv2;
+	uint16_t			intrlv;
+	uint16_t			ncyl;
+	uint16_t			acyl;
+	uint16_t			nhead;
+	uint16_t			nsect;
+	uint16_t			resv3;
+	uint16_t			resv4;
 	struct sun_partition	partitions[SUN_NUM_PARTITIONS];
-	__u16			magic;
-	__u16			cksum;
+	uint16_t			magic;
+	uint16_t			cksum;
 };
 
 #define SUN_LABEL_MAGIC		0xDABE
@@ -82,7 +82,7 @@
 extern void sun_nolabel(void);
 extern void create_sunlabel(void);
 extern void sun_delete_partition(int i);
-extern int sun_change_sysid(int i, __u16 sys);
+extern int sun_change_sysid(int i, uint16_t sys);
 extern void sun_list_table(int xtra);
 extern void verify_sun(void);
 extern void add_sun_partition(int n, int sys);
@@ -93,7 +93,7 @@
 extern void sun_set_ilfact(void);
 extern void sun_set_rspeed(void);
 extern void sun_set_pcylcount(void);
-extern void toggle_sunflags(int i, __u16 mask);
+extern void toggle_sunflags(int i, uint16_t mask);
 extern int sun_get_sysid(int i);
 
 #endif /* FDISK_SUN_LABEL_H */
diff -Nru util-linux-2.13.1.1/fdisk/sfdisk.c util-linux-2.13.1.1/fdisk/sfdisk.c
--- util-linux-2.13.1.1/fdisk/sfdisk.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/fdisk/sfdisk.c	2008-08-07 20:37:34.000000000 +0200
@@ -46,7 +46,6 @@
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <sys/utsname.h>
-#include <linux/unistd.h>	/* _syscall */
 #include "nls.h"
 #include "common.h"
 
diff -Nru util-linux-2.13.1.1/login-utils/agetty.c util-linux-2.13.1.1/login-utils/agetty.c
--- util-linux-2.13.1.1/login-utils/agetty.c	2008-08-07 20:37:27.000000000 +0200
+++ util-linux-2.13.1.1/login-utils/agetty.c	2008-08-07 20:37:34.000000000 +0200
@@ -18,7 +18,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/ioctl.h>
-#include <termio.h>
+#include <termios.h>
 #include <signal.h>
 #include <errno.h>
 #include <sys/types.h>
@@ -36,10 +36,12 @@
 #include "xstrncpy.h"
 #include "nls.h"
 
-#ifdef __linux__
+#if 1
 #include "pathnames.h"
 #include <sys/param.h>
 #define USE_SYSLOG
+#elif defined(__GNU__)
+#define _PATH_LOGIN "/bin/login"
 #endif
 
  /* If USE_SYSLOG is undefined all diagnostics go directly to /dev/console. */
@@ -116,6 +118,10 @@
 #define	TCSETAW	TCSETSW
 #endif
 
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+#define termio termios
+#endif
+
  /*
   * This program tries to not use the standard-i/o library.  This keeps the
   * executable small on systems that do not have shared libraries (System V
@@ -313,9 +319,7 @@
 
     parse_args(argc, argv, &options);
 
-#ifdef __linux__
 	setsid();
-#endif
 	
     /* Update the utmp file. */
 
@@ -706,10 +710,21 @@
      * 5 seconds seems to be a good value.
      */
 
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    if (tcgetattr(0, tp) < 0)
+#else
     if (ioctl(0, TCGETA, tp) < 0)
+#endif
 	error("%s: ioctl: %m", tty);
 
     /*
+     * login_tty: steal tty from other process group.
+     */
+#if defined(__FreeBSD_kernel__)
+    login_tty (0);	
+#endif
+
+    /*
      * It seems to be a terminal. Set proper protections and ownership. Mode
      * 0622 is suitable for SYSV <4 because /bin/login does not change
      * protections. SunOS 4 login will change the protections to 0620 (write
@@ -743,17 +758,26 @@
      * reads will be done in raw mode anyway. Errors will be dealt with
      * lateron.
      */
-#ifdef __linux__
+#if defined(__linux__) || defined(__GNU__) || defined(__FreeBSD_kernel__)
     /* flush input and output queues, important for modems! */
-    (void) ioctl(0, TCFLSH, TCIOFLUSH);
+    (void) tcflush(0, TCIOFLUSH);
 #endif
 
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    tp->c_cflag = CS8 | HUPCL | CREAD;
+    cfsetispeed(tp, speed);
+    cfsetospeed(tp, speed);
+#else
     tp->c_cflag = CS8 | HUPCL | CREAD | speed;
+#endif
     if (op->flags & F_LOCAL) {
 	tp->c_cflag |= CLOCAL;
     }
 
-    tp->c_iflag = tp->c_lflag = tp->c_oflag = tp->c_line = 0;
+    tp->c_iflag = tp->c_lflag = tp->c_oflag = 0;
+#if !defined(__GNU__) && !defined(__FreeBSD_kernel__)
+    tp->c_line = 0;
+#endif
     tp->c_cc[VMIN] = 1;
     tp->c_cc[VTIME] = 0;
 
@@ -764,7 +788,11 @@
 	tp->c_cflag |= CRTSCTS;
 #endif
 
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    (void) tcsetattr(0, TCSANOW, tp);
+#else
     (void) ioctl(0, TCSETA, tp);
+#endif
 
     /* go to blocking input even in local mode */
     fcntl(0, F_SETFL, fcntl(0, F_GETFL, 0) & ~O_NONBLOCK);
@@ -808,7 +836,11 @@
     tp->c_iflag |= ISTRIP;			/* enable 8th-bit stripping */
     vmin = tp->c_cc[VMIN];
     tp->c_cc[VMIN] = 0;				/* don't block if queue empty */
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    (void) tcsetattr(0, TCSANOW, tp);
+#else
     (void) ioctl(0, TCSETA, tp);
+#endif
 
     /*
      * Wait for a while, then read everything the modem has said so far and
@@ -821,8 +853,13 @@
 	for (bp = buf; bp < buf + nread; bp++) {
 	    if (isascii(*bp) && isdigit(*bp)) {
 		if ((speed = bcode(bp))) {
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+		    cfsetispeed(tp, speed);
+		    cfsetospeed(tp, speed);
+#else
 		    tp->c_cflag &= ~CBAUD;
 		    tp->c_cflag |= speed;
+#endif
 		}
 		break;
 	    }
@@ -832,7 +869,11 @@
 
     tp->c_iflag = iflag;
     tp->c_cc[VMIN] = vmin;
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    (void) tcsetattr(0, TCSANOW, tp);
+#else
     (void) ioctl(0, TCSETA, tp);
+#endif
 }
 
 /* do_prompt - show login prompt, optionally preceded by /etc/issue contents */
@@ -855,7 +896,11 @@
     if ((op->flags & F_ISSUE) && (fd = fopen(op->issue, "r"))) {
 	oflag = tp->c_oflag;			/* save current setting */
 	tp->c_oflag |= (ONLCR | OPOST);		/* map NL in output to CR-NL */
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+	(void) tcsetattr(0, TCSADRAIN, tp);
+#else
 	(void) ioctl(0, TCSETAW, tp);
+#endif
 
 
 	while ((c = getc(fd)) != EOF)
@@ -888,7 +933,7 @@
 
 		  case 'o':
 		   {
-		     char domainname[HOST_NAME_MAX+1];
+		     char domainname[HOSTNAME_LENGTH+1];
 #ifdef HAVE_GETDOMAINNAME
 		     if (getdomainname(domainname, sizeof(domainname)))
 #endif
@@ -901,7 +946,7 @@
 		  case 'O':
 		   {
 			char *dom = "unknown_domain";
-			char host[HOST_NAME_MAX + 1];
+			char host[HOSTNAME_LENGTH + 1];
 			struct addrinfo hints, *info = NULL;
 
 			memset(&hints, 0, sizeof(hints));
@@ -959,7 +1004,11 @@
 			int i;
 
 			for (i = 0; speedtab[i].speed; i++) {
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+			    if (speedtab[i].code == cfgetispeed(tp)) {
+#else
 			    if (speedtab[i].code == (tp->c_cflag & CBAUD)) {
+#endif
 				printf("%ld", speedtab[i].speed);
 				break;
 			    }
@@ -991,12 +1040,16 @@
 	fflush(stdout);
 
 	tp->c_oflag = oflag;			/* restore settings */
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+	(void) tcsetattr(0, TCSADRAIN, tp);
+#else
 	(void) ioctl(0, TCSETAW, tp);		/* wait till output is gone */
+#endif
 	(void) fclose(fd);
     }
 #endif
     {
-	char hn[HOST_NAME_MAX+1];
+	char hn[HOSTNAME_LENGTH+1];
 	if (gethostname(hn, sizeof(hn)) == 0)
 	    write(1, hn, strlen(hn));
     }
@@ -1012,9 +1065,15 @@
     static int baud_index = FIRST_SPEED;/* current speed index */
 
     baud_index = (baud_index + 1) % op->numspeed;
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    cfsetispeed(tp, op->speeds[baud_index]);
+    cfsetospeed(tp, op->speeds[baud_index]);
+    (void) tcsetattr(0, TCSANOW, tp);
+#else
     tp->c_cflag &= ~CBAUD;
     tp->c_cflag |= op->speeds[baud_index];
     (void) ioctl(0, TCSETA, tp);
+#endif
 }
 
 /* get_logname - get user name, establish parity, speed, erase, kill, eol */
@@ -1044,7 +1103,7 @@
     /* Flush pending input (esp. after parsing or switching the baud rate). */
 
     (void) sleep(1);
-    (void) ioctl(0, TCFLSH, TCIFLUSH);
+    (void) tcflush(0, TCIFLUSH);
 
     /* Prompt for and read a login name. */
 
@@ -1148,7 +1207,7 @@
     tp->c_cc[VEOL] = DEF_EOL;
 #ifdef __linux__
     tp->c_cc[VSWTC] = DEF_SWITCH;		/* default switch character */
-#else
+#elif defined(VSWTCH)
     tp->c_cc[VSWTCH] = DEF_SWITCH;		/* default switch character */
 #endif
 
@@ -1181,9 +1240,15 @@
     /* Account for upper case without lower case. */
 
     if (cp->capslock) {
+#ifdef  IUCLC
 	tp->c_iflag |= IUCLC;
+#endif	
+#ifdef XCASE
 	tp->c_lflag |= XCASE;
+#endif
+#ifdef OLCUC
 	tp->c_oflag |= OLCUC;
+#endif	
     }
     /* Optionally enable hardware flow control */
 
@@ -1194,7 +1259,11 @@
 
     /* Finally, make the new settings effective */
 
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    if (tcsetattr(0, TCSANOW, tp) < 0)
+#else
     if (ioctl(0, TCSETA, tp) < 0)
+#endif
 	error("%s: ioctl: TCSETA: %m", op->tty);
 }
 
diff -Nru util-linux-2.13.1.1/login-utils/checktty.c util-linux-2.13.1.1/login-utils/checktty.c
--- util-linux-2.13.1.1/login-utils/checktty.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/login-utils/checktty.c	2008-08-07 20:37:34.000000000 +0200
@@ -25,7 +25,9 @@
 #include "nls.h"
 
 #include <sys/sysmacros.h>
+#ifdef __linux__
 #include <linux/major.h>
+#endif
 
 #include "pathnames.h"
 #include "login.h"
@@ -118,6 +120,7 @@
 static int
 isapty(const char *tty)
 {
+#ifdef __linux__
     char devname[100];
     struct stat stb;
 
@@ -147,6 +150,7 @@
 #endif
 
     }
+#endif
     return 0;
 }
 
diff -Nru util-linux-2.13.1.1/login-utils/Makefile.am util-linux-2.13.1.1/login-utils/Makefile.am
--- util-linux-2.13.1.1/login-utils/Makefile.am	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/login-utils/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -11,6 +11,7 @@
 if BUILD_AGETTY
 sbin_PROGRAMS += agetty
 man_MANS += agetty.8
+agetty_LDADD = -lutil
 endif
 
 if BUILD_INIT
diff -Nru util-linux-2.13.1.1/login-utils/wall.c util-linux-2.13.1.1/login-utils/wall.c
--- util-linux-2.13.1.1/login-utils/wall.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/login-utils/wall.c	2008-08-07 20:37:34.000000000 +0200
@@ -63,6 +63,10 @@
 #include "pathnames.h"
 #include "carefulputc.h"
 
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 64
+#endif
+
 void	makemsg __P((char *));
 
 #define	IGNOREUSER	"sleeper"
diff -Nru util-linux-2.13.1.1/Makefile.am util-linux-2.13.1.1/Makefile.am
--- util-linux-2.13.1.1/Makefile.am	2008-04-21 14:58:42.000000000 +0200
+++ util-linux-2.13.1.1/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -8,14 +8,19 @@
 	hwclock \
 	login-utils \
 	misc-utils \
-	mount \
-        partx \
 	po \
 	schedutils \
 	sys-utils \
 	text-utils \
 	tests
 
+if LINUX
+SUBDIRS += \
+	mount \
+	partx
+endif
+
+
 ACLOCAL_AMFLAGS = -I m4
 
 EXTRA_DIST = \
diff -Nru util-linux-2.13.1.1/misc-utils/Makefile.am util-linux-2.13.1.1/misc-utils/Makefile.am
--- util-linux-2.13.1.1/misc-utils/Makefile.am	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/misc-utils/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -34,8 +34,10 @@
 endif
 
 if HAVE_NCURSES
+if LINUX
 usrbinexec_PROGRAMS += setterm
 man_MANS += setterm.1
+endif
 if HAVE_TINFO
 setterm_LDADD = -ltinfo
 else
diff -Nru util-linux-2.13.1.1/misc-utils/namei.c util-linux-2.13.1.1/misc-utils/namei.c
--- util-linux-2.13.1.1/misc-utils/namei.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/misc-utils/namei.c	2008-08-07 20:37:34.000000000 +0200
@@ -59,6 +59,10 @@
 #include <sys/param.h>
 #include "nls.h"
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 4096
+#endif
+
 #define ERR	strerror(errno),errno
 
 int symcount;
diff -Nru util-linux-2.13.1.1/misc-utils/script.c util-linux-2.13.1.1/misc-utils/script.c
--- util-linux-2.13.1.1/misc-utils/script.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/misc-utils/script.c	2008-08-07 20:37:34.000000000 +0200
@@ -53,12 +53,12 @@
 #include <sys/file.h>
 #include <sys/signal.h>
 #include <errno.h>
+#include <getopt.h>
+#include <string.h>
 #include "nls.h"
 
-#ifdef __linux__
 #include <unistd.h>
 #include <string.h>
-#endif
 
 #ifdef HAVE_LIBUTIL
 #include <pty.h>
diff -Nru util-linux-2.13.1.1/schedutils/Makefile.am util-linux-2.13.1.1/schedutils/Makefile.am
--- util-linux-2.13.1.1/schedutils/Makefile.am	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/schedutils/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -2,12 +2,16 @@
 
 if BUILD_SCHEDUTILS
 
-usrbinexec_PROGRAMS = chrt ionice
-man_MANS = chrt.1 ionice.1
+usrbinexec_PROGRAMS =
+man_MANS =
 
+if LINUX
+usrbinexec_PROGRAMS += ionice chrt
+man_MANS += ionice.1  chrt.1
 if HAVE_SCHED_GETAFFINITY
 usrbinexec_PROGRAMS += taskset
 man_MANS += taskset.1
 endif
+endif
 
 endif
diff -Nru util-linux-2.13.1.1/sys-utils/Makefile.am util-linux-2.13.1.1/sys-utils/Makefile.am
--- util-linux-2.13.1.1/sys-utils/Makefile.am	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/sys-utils/Makefile.am	2008-08-07 20:37:34.000000000 +0200
@@ -1,14 +1,25 @@
 include $(top_srcdir)/config/include-Makefile.am
 
-bin_PROGRAMS = dmesg
+bin_PROGRAMS =
+if LINUX
+bin_PROGRAMS += dmesg
+endif
 
-usrbinexec_PROGRAMS = cytune flock ipcrm ipcs renice setsid setarch
+usrbinexec_PROGRAMS = flock renice setsid 
+if LINUX
+usrbinexec_PROGRAMS += cytune setarch ipcrm ipcs
+endif
 
 cytune_SOURCES = cytune.c cyclades.h
 
+if LINUX
 sbin_PROGRAMS = ctrlaltdel
+endif
 
-usrsbinexec_PROGRAMS = readprofile tunelp rtcwake
+usrsbinexec_PROGRAMS = readprofile 
+if LINUX
+usrsbinexec_PROGRAMS += tunelp rtcwake
+endif
 
 tunelp_SOURCES = tunelp.c lp.h
 
diff -Nru util-linux-2.13.1.1/sys-utils/rdev.c util-linux-2.13.1.1/sys-utils/rdev.c
--- util-linux-2.13.1.1/sys-utils/rdev.c	2007-04-25 14:43:38.000000000 +0200
+++ util-linux-2.13.1.1/sys-utils/rdev.c	2008-08-07 20:37:34.000000000 +0200
@@ -94,6 +94,10 @@
 
 #define DEFAULT_OFFSET 508
 
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
 
 static void
 die(char *msg) {
diff -Nru util-linux-2.13.1.1/text-utils/more.c util-linux-2.13.1.1/text-utils/more.c
--- util-linux-2.13.1.1/text-utils/more.c	2008-04-21 14:58:43.000000000 +0200
+++ util-linux-2.13.1.1/text-utils/more.c	2008-08-07 20:37:34.000000000 +0200
@@ -1573,7 +1573,7 @@
     }
     if (feof (file)) {
 	if (!no_intty) {
-#ifndef __linux__
+#if !defined(__linux__) && !defined(__GLIBC__)
 				/* No longer in libc 4.5.8. . . */
 	    file->_flags &= ~STDIO_S_EOF_SEEN; /* why doesn't fseek do this ??!!??! */
 #endif
@@ -1817,8 +1817,16 @@
     no_intty = tcgetattr(fileno(stdin), &otty);
     tcgetattr(fileno(stderr), &otty);
     savetty0 = otty;
+#if defined(__GNU__) || defined(__FreeBSD_kernel__)
+    slow_tty = cfgetispeed(&otty) < B1200;
+#else
     slow_tty = (otty.c_cflag & CBAUD) < B1200;
+#endif
+#if defined(__FreeBSD_kernel__)
+    hardtabs = 1;
+#else
     hardtabs = (otty.c_oflag & TABDLY) != XTABS;
+#endif    
     if (!no_tty) {
 	otty.c_lflag &= ~(ICANON|ECHO);
 	otty.c_cc[VMIN] = 1;
