Hi,

Right, it may sound a bit odd, but util-linux is pretty much useful for
non-linux OSes too.  Here is a patch that makes it work on GNU/Hurd, and
will probably help a lot for other OSes too.

It leaves the linux part untouched, except

- #include <linux/types.h> is turned into #include <stdint.h>, much more
  portable, and __uxy were turned into uintxy_t.
- #include <termio.h> turned into #include <termios.h>: termio.h is
  deprecated since a lot time, we should really use termios.h instead.
- ioctl(0, TCFLSH, x) is turned into tcflush(0, x). These are really
  equivalents (see the glibc implementation of tcflush). TCSA &such
  ioctls should most probably also be replaced by tcsetattr & such, but
  since glibc's implementation is not that straightforward and according
  to comments there are some kludges, I preferred to do this change for
  GNU/Hurd only.

Samuel
diff -ur util-linux-2.13~rc3/configure.ac util-linux-2.13~rc3-mine/configure.ac
--- util-linux-2.13~rc3/configure.ac    2007-08-10 17:51:27.000000000 +0000
+++ util-linux-2.13~rc3-mine/configure.ac       2007-08-10 18:01:55.000000000 
+0000
@@ -224,6 +224,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 ---------------------------------
--- util-linux-2.13~rc3/disk-utils/Makefile.am  2007-05-17 08:31:16.000000000 
+0000
+++ util-linux-2.13~rc3-mine/disk-utils/Makefile.am     2007-08-10 
18:03:02.000000000 +0000
@@ -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
--- util-linux-2.13~rc3/fdisk/cfdisk.c  2007-07-02 14:55:45.000000000 +0000
+++ util-linux-2.13~rc3-mine/fdisk/cfdisk.c     2007-08-10 16:42:16.000000000 
+0000
@@ -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"
--- util-linux-2.13~rc3/fdisk/fdiskaixlabel.h   2007-06-29 10:19:43.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdiskaixlabel.h      2007-08-10 
16:32:11.000000000 +0000
@@ -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
--- util-linux-2.13~rc3/fdisk/fdiskbsdlabel.c   2007-04-25 12:43:38.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdiskbsdlabel.c      2007-08-10 
18:12:36.000000000 +0000
@@ -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);
--- util-linux-2.13~rc3/fdisk/fdiskbsdlabel.h   2007-06-29 10:19:43.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdiskbsdlabel.h      2007-08-10 
16:32:11.000000000 +0000
@@ -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 */
 };
 
--- util-linux-2.13~rc3/fdisk/fdiskmaclabel.h   2007-06-29 10:19:43.500000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdiskmaclabel.h      2007-08-10 
16:32:11.000000000 +0000
@@ -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
--- util-linux-2.13~rc3/fdisk/fdisksgilabel.c   2007-07-16 21:15:33.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdisksgilabel.c      2007-08-10 
16:39:03.000000000 +0000
@@ -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,
--- util-linux-2.13~rc3/fdisk/fdisksgilabel.h   2007-07-16 21:15:33.610000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdisksgilabel.h      2007-08-10 
16:32:11.000000000 +0000
@@ -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)
--- util-linux-2.13~rc3/fdisk/fdisksunlabel.c   2007-07-16 21:15:33.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdisksunlabel.c      2007-08-10 
16:41:20.000000000 +0000
@@ -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),
--- util-linux-2.13~rc3/fdisk/fdisksunlabel.h   2007-07-16 21:15:33.000000000 
+0000
+++ util-linux-2.13~rc3-mine/fdisk/fdisksunlabel.h      2007-08-10 
16:32:11.980000000 +0000
@@ -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 */
--- util-linux-2.13~rc3/fdisk/sfdisk.c  2007-07-10 23:18:26.000000000 +0000
+++ util-linux-2.13~rc3-mine/fdisk/sfdisk.c     2007-08-10 16:41:50.000000000 
+0000
@@ -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"
 
--- util-linux-2.13~rc3/login-utils/agetty.c    2007-08-10 17:51:27.000000000 
+0000
+++ util-linux-2.13~rc3-mine/login-utils/agetty.c       2007-08-10 
18:17:53.000000000 +0000
@@ -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>
@@ -40,6 +40,8 @@
 #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
 
+#ifdef __GNU__
+#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
@@ -789,7 +795,11 @@
      * 5 seconds seems to be a good value.
      */
 
+#ifdef __GNU__
+    if (tcgetattr(0, tp) < 0)
+#else
     if (ioctl(0, TCGETA, tp) < 0)
+#endif
        error("%s: ioctl: %m", tty);
 
     /*
@@ -826,17 +836,26 @@
      * reads will be done in raw mode anyway. Errors will be dealt with
      * lateron.
      */
-#ifdef __linux__
+#if defined(__linux__) || defined(__GNU__)
     /* flush input and output queues, important for modems! */
-    (void) ioctl(0, TCFLSH, TCIOFLUSH);
+    (void) tcflush(0, TCIOFLUSH);
 #endif
 
+#ifdef __GNU__
+    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;
+#ifndef __GNU__
+    tp->c_line = 0;
+#endif
     tp->c_cc[VMIN] = 1;
     tp->c_cc[VTIME] = 0;
 
@@ -847,7 +866,11 @@
        tp->c_cflag |= CRTSCTS;
 #endif
 
+#ifdef __GNU__
+    (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);
@@ -891,7 +914,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 */
+#ifdef __GNU__
+    (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
@@ -904,8 +931,13 @@
        for (bp = buf; bp < buf + nread; bp++) {
            if (isascii(*bp) && isdigit(*bp)) {
                if ((speed = bcode(bp))) {
+#ifdef __GNU__
+                   cfsetispeed(tp, speed);
+                   cfsetospeed(tp, speed);
+#else
                    tp->c_cflag &= ~CBAUD;
                    tp->c_cflag |= speed;
+#endif
                }
                break;
            }
@@ -915,7 +947,11 @@
 
     tp->c_iflag = iflag;
     tp->c_cc[VMIN] = vmin;
+#ifdef __GNU__
+    (void) tcsetattr(0, TCSANOW, tp);
+#else
     (void) ioctl(0, TCSETA, tp);
+#endif
 }
 
 /* do_prompt - show login prompt, optionally preceded by /etc/issue contents */
@@ -938,7 +974,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 */
+#ifdef __GNU__
+       (void) tcsetattr(0, TCSADRAIN, tp);
+#else
        (void) ioctl(0, TCSETAW, tp);
+#endif
 
 
        while ((c = getc(fd)) != EOF)
@@ -971,7 +1011,7 @@
 
                  case 'o':
                   {
-                    char domainname[HOST_NAME_MAX+1];
+                    char domainname[HOSTNAME_LENGTH+1];
 #ifdef HAVE_GETDOMAINNAME
                     if (getdomainname(domainname, sizeof(domainname)))
 #endif
@@ -984,7 +1024,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));
@@ -1042,7 +1082,11 @@
                        int i;
 
                        for (i = 0; speedtab[i].speed; i++) {
+#ifdef __GNU__
+                           if (speedtab[i].code == cfgetispeed(tp)) {
+#else
                            if (speedtab[i].code == (tp->c_cflag & CBAUD)) {
+#endif
                                printf("%ld", speedtab[i].speed);
                                break;
                            }
@@ -1074,12 +1118,16 @@
        fflush(stdout);
 
        tp->c_oflag = oflag;                    /* restore settings */
+#ifdef __GNU__
+       (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));
     }
@@ -1095,9 +1143,15 @@
     static int baud_index = FIRST_SPEED;/* current speed index */
 
     baud_index = (baud_index + 1) % op->numspeed;
+#ifdef __GNU__
+    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 */
@@ -1127,7 +1181,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. */
 
@@ -1232,7 +1286,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
 
@@ -1266,7 +1320,9 @@
 
     if (cp->capslock) {
        tp->c_iflag |= IUCLC;
+#ifdef XCASE
        tp->c_lflag |= XCASE;
+#endif
        tp->c_oflag |= OLCUC;
     }
     /* Optionally enable hardware flow control */
@@ -1278,7 +1334,11 @@
 
     /* Finally, make the new settings effective */
 
+#ifdef __GNU__
+    if (tcsetattr(0, TCSANOW, tp) < 0)
+#else
     if (ioctl(0, TCSETA, tp) < 0)
+#endif
        error("%s: ioctl: TCSETA: %m", op->tty);
 }
 
--- util-linux-2.13~rc3/login-utils/checktty.c  2007-04-25 12:43:38.000000000 
+0000
+++ util-linux-2.13~rc3-mine/login-utils/checktty.c     2007-08-10 
16:44:56.800000000 +0000
@@ -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;
 }
 
--- util-linux-2.13~rc3/login-utils/wall.c      2007-07-16 13:21:29.960000000 
+0000
+++ util-linux-2.13~rc3-mine/login-utils/wall.c 2007-08-10 17:25:03.000000000 
+0000
@@ -63,6 +63,10 @@
 #include "pathnames.h"
 #include "carefulputc.h"
 
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 64
+#endif
+
 void   makemsg __P((char *));
 
 #define        IGNOREUSER      "sleeper"
--- util-linux-2.13~rc3/Makefile.am     2007-07-26 13:20:24.280000000 +0000
+++ util-linux-2.13~rc3-mine/Makefile.am        2007-08-10 18:04:05.000000000 
+0000
@@ -5,17 +5,21 @@
        disk-utils \
        fdisk \
        getopt \
-       hwclock \
        login-utils \
        misc-utils \
-       mount \
-        partx \
        po \
        schedutils \
        sys-utils \
        text-utils \
        tests
 
+if LINUX
+SUBDIRS += \
+       hwclock \
+       mount \
+        partx
+endif
+
 ACLOCAL_AMFLAGS = -I m4
 
 EXTRA_DIST = \
--- util-linux-2.13~rc3/misc-utils/Makefile.am  2007-07-16 10:30:38.000000023 
+0000
+++ util-linux-2.13~rc3-mine/misc-utils/Makefile.am     2007-08-10 
18:04:26.000000000 +0000
@@ -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
--- util-linux-2.13~rc3/misc-utils/namei.c      2007-04-25 12:43:38.000000000 
+0000
+++ util-linux-2.13~rc3-mine/misc-utils/namei.c 2007-08-10 17:26:42.000000000 
+0000
@@ -59,6 +59,10 @@
 #include <sys/param.h>
 #include "nls.h"
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 4096
+#endif
+
 #define ERR    strerror(errno),errno
 
 int symcount;
--- util-linux-2.13~rc3/misc-utils/script.c     2007-08-06 22:10:01.000000000 
+0000
+++ util-linux-2.13~rc3-mine/misc-utils/script.c        2007-08-10 
17:27:38.000000000 +0000
@@ -53,6 +53,8 @@
 #include <sys/file.h>
 #include <sys/signal.h>
 #include <errno.h>
+#include <getopt.h>
+#include <string.h>
 #include "nls.h"
 
 #ifdef __linux__
--- util-linux-2.13~rc3/schedutils/Makefile.am  2007-04-25 12:43:38.000000000 
+0000
+++ util-linux-2.13~rc3-mine/schedutils/Makefile.am     2007-08-10 
18:05:12.000000000 +0000
@@ -2,7 +2,11 @@
 
 if BUILD_SCHEDUTILS
 
-usrbinexec_PROGRAMS = chrt ionice taskset
-man_MANS = chrt.1 ionice.1 taskset.1
+usrbinexec_PROGRAMS = chrt
+man_MANS = chrt.1
+if LINUX
+usrbinexec_PROGRAMS += ionice taskset
+man_MANS += ionice.1 taskset.1
+endif
 
 endif
--- util-linux-2.13~rc3/sys-utils/Makefile.am   2007-07-25 17:03:26.000000000 
+0000
+++ util-linux-2.13~rc3-mine/sys-utils/Makefile.am      2007-08-10 
18:07:09.000000000 +0000
@@ -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 ipcrm ipcs renice setsid 
+if LINUX
+usrbinexec_PROGRAMS += cytune setarch
+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 -ur util-linux-2.13~rc3/sys-utils/rdev.c 
util-linux-2.13~rc3-mine/sys-utils/rdev.c
--- util-linux-2.13~rc3/sys-utils/rdev.c        2007-04-25 12:43:38.000000000 
+0000
+++ util-linux-2.13~rc3-mine/sys-utils/rdev.c   2007-08-10 17:44:39.160000000 
+0000
@@ -94,6 +94,10 @@
 
 #define DEFAULT_OFFSET 508
 
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
 
 static void
 die(char *msg) {
--- util-linux-2.13~rc3/text-utils/more.c       2007-06-29 10:19:34.000000000 
+0000
+++ util-linux-2.13~rc3-mine/text-utils/more.c  2007-08-10 17:46:17.000000023 
+0000
@@ -1558,7 +1558,7 @@
     }
     if (feof (file)) {
        if (!no_intty) {
-#ifndef __linux__
+#if !defined(__linux__) && !defined(__GNU__)
                                /* No longer in libc 4.5.8. . . */
            file->_flags &= ~STDIO_S_EOF_SEEN; /* why doesn't fseek do this 
??!!??! */
 #endif
@@ -1802,7 +1802,11 @@
     no_intty = tcgetattr(fileno(stdin), &otty);
     tcgetattr(fileno(stderr), &otty);
     savetty0 = otty;
+#ifdef __GNU__
+    slow_tty = cfgetispeed(&otty) < B1200;
+#else
     slow_tty = (otty.c_cflag & CBAUD) < B1200;
+#endif
     hardtabs = (otty.c_oflag & TABDLY) != XTABS;
     if (!no_tty) {
        otty.c_lflag &= ~(ICANON|ECHO);

Reply via email to