diff -rNu cfdisk.c cfdisk.c
--- cfdisk.c	Tue Nov 26 18:44:33 2002
+++ cfdisk.c	Fri Jun 20 19:47:15 2003
@@ -76,25 +76,14 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include <linux/types.h>
 
 #include "nls.h"
-#include "xstrncpy.h"
 #include "common.h"
 
-#if defined(__GNUC__) || defined(HAS_LONG_LONG)
-typedef long long ext2_loff_t;
-#else
-typedef long      ext2_loff_t;
-#endif
-
-extern ext2_loff_t ext2_llseek(unsigned int fd, ext2_loff_t offset,
-			       unsigned int origin);
-
 #define VERSION UTIL_LINUX_VERSION
 
-#define DEFAULT_DEVICE "/dev/hda"
-#define ALTERNATE_DEVICE "/dev/sda"
+#define DEFAULT_DEVICE "/dev/ad0"
+#define ALTERNATE_DEVICE "/dev/da0"
 
 /* With K=1024 we have `binary' megabytes, gigabytes, etc.
    Some misguided hackers like that.
@@ -324,7 +313,8 @@
 int logical = 0;
 int logical_sectors[MAXIMUM_PARTS];
 
-__sighandler_t old_SIGINT, old_SIGTERM;
+void (*old_SIGINT)(int);
+void (*old_SIGTERM)(int);
 
 int arrow_cursor = FALSE;
 int display_units = MEGABYTES;
@@ -571,7 +561,7 @@
 
 static void
 read_sector(char *buffer, int sect_num) {
-    if (ext2_llseek(fd, ((ext2_loff_t) sect_num)*SECTOR_SIZE, SEEK_SET) < 0)
+    if (lseek(fd, ((off_t) sect_num)*SECTOR_SIZE, SEEK_SET) < 0)
 	fatal(_("Cannot seek on disk drive"), 2);
     if (read(fd, buffer, SECTOR_SIZE) != SECTOR_SIZE)
 	fatal(_("Cannot read disk drive"), 2);
@@ -579,7 +569,7 @@
 
 static void
 write_sector(char *buffer, int sect_num) {
-    if (ext2_llseek(fd, ((ext2_loff_t) sect_num)*SECTOR_SIZE, SEEK_SET) < 0)
+    if (lseek(fd, ((off_t) sect_num)*SECTOR_SIZE, SEEK_SET) < 0)
 	fatal(_("Cannot seek on disk drive"), 2);
     if (write(fd, buffer, SECTOR_SIZE) != SECTOR_SIZE)
 	fatal(_("Cannot write disk drive"), 2);
@@ -603,11 +593,11 @@
 #define DOS_OSTYPE_SZ 8
 #define DOS_LABEL_SZ 11
 #define DOS_FSTYPE_SZ 8
-	ext2_loff_t offset;
+	off_t offset;
 
-	offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
+	offset = ((off_t) p_info[i].first_sector + p_info[i].offset)
 		* SECTOR_SIZE;
-	if (ext2_llseek(fd, offset, SEEK_SET) == offset
+	if (lseek(fd, offset, SEEK_SET) == offset
 	    && read(fd, &sector, sizeof(sector)) == sizeof(sector)) {
 		dos_copy_to_info(p_info[i].ostype, OSTYPESZ,
 				 sector+DOS_OSTYPE_OFFSET, DOS_OSTYPE_SZ);
@@ -664,12 +654,12 @@
 	} xfsb;
 
 	char *label;
-	ext2_loff_t offset;
+	off_t offset;
 	int j;
 
-	offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
+	offset = ((off_t) p_info[i].first_sector + p_info[i].offset)
 		* SECTOR_SIZE + 1024;
-	if (ext2_llseek(fd, offset, SEEK_SET) == offset
+	if (lseek(fd, offset, SEEK_SET) == offset
 	    && read(fd, &e2fsb, sizeof(e2fsb)) == sizeof(e2fsb)
 	    && e2fsb.s_magic[0] + (e2fsb.s_magic[1]<<8) == EXT2_SUPER_MAGIC) {
 		label = e2fsb.s_volume_name;
@@ -684,9 +674,9 @@
 		return;
 	}
 
-	offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
+	offset = ((off_t) p_info[i].first_sector + p_info[i].offset)
 		* SECTOR_SIZE + 0;
-	if (ext2_llseek(fd, offset, SEEK_SET) == offset
+	if (lseek(fd, offset, SEEK_SET) == offset
 	    && read(fd, &xfsb, sizeof(xfsb)) == sizeof(xfsb)
 	    && !strcmp(xfsb.s_magic, XFS_SUPER_MAGIC)) {
 		label = xfsb.s_fname;
@@ -698,9 +688,9 @@
 	}
 
 	/* reiserfs? */
-	offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
+	offset = ((off_t) p_info[i].first_sector + p_info[i].offset)
 		* SECTOR_SIZE + REISERFS_DISK_OFFSET_IN_BYTES;
-	if (ext2_llseek(fd, offset, SEEK_SET) == offset
+	if (lseek(fd, offset, SEEK_SET) == offset
 	    && read(fd, &reiserfsb, 1024) == 1024
 	    && is_reiserfs_magic_string(&reiserfsb)) {
 		strncpy(p_info[i].fstype, "reiserfs", FSTYPESZ);
@@ -1140,7 +1130,7 @@
             print_warning(_("Menu item too long. Menu may look odd."));
 #endif
 	if (lenName >= sizeof(buff)) {	/* truncate ridiculously long string */
-	    xstrncpy(buff, mi, sizeof(buff));
+	    strlcpy(buff, mi, sizeof(buff));
 	} else {
             snprintf(buff, sizeof(buff),
 		     (menuType & MENU_BUTTON) ? "[%*s%-*s]" : "%*s%-*s",
@@ -1605,17 +1595,7 @@
 	 opentype = O_RDWR;
     opened = TRUE;
 
-    /* Blocks are visible in more than one way:
-       e.g. as block on /dev/hda and as block on /dev/hda3
-       By a bug in the Linux buffer cache, we will see the old
-       contents of /dev/hda when the change was made to /dev/hda3.
-       In order to avoid this, discard all blocks on /dev/hda.
-       Note that partition table blocks do not live in /dev/hdaN,
-       so this only plays a role if we want to show volume labels. */
-    ioctl(fd, BLKFLSBUF);	/* ignore errors */
-				/* e.g. Permission Denied */
-
-    if (ioctl(fd, BLKGETSIZE, &actual_size))
+    if (sys_bsd_getsectors(fd, &actual_size))
 	fatal(_("Cannot get disk size"), 3);
 
     read_sector(buffer.c.b, 0);
@@ -1824,7 +1804,7 @@
     if (is_bdev) {
 	 sync();
 	 sleep(2);
-	 if (!ioctl(fd,BLKRRPART))
+	 if (!sys_bsd_ptsync(fd))
 	      changed = TRUE;
 	 sync();
 	 sleep(4);
@@ -2850,9 +2830,11 @@
     int c;
     int i, len;
 
+#if 0
     setlocale(LC_ALL, "");
     bindtextdomain(PACKAGE, LOCALEDIR);
     textdomain(PACKAGE);
+#endif
 
     while ((c = getopt(argc, argv, "ac:gh:s:vzP:")) != -1)
 	switch (c) {
diff -rNu common.h common.h
--- common.h	Thu May  9 02:50:35 2002
+++ common.h	Fri Jun 20 19:25:55 2003
@@ -1,11 +1,10 @@
 /* common stuff for fdisk, cfdisk, sfdisk */
 
-/* including <linux/fs.h> fails */
-#include <sys/ioctl.h>
-#define BLKRRPART  _IO(0x12,95)    /* re-read partition table */
-#define BLKGETSIZE _IO(0x12,96)    /* return device size */
-#define BLKFLSBUF  _IO(0x12,97)    /* flush buffer cache */
-#define BLKSSZGET  _IO(0x12,104)   /* get block device sector size */
+#include <sys/types.h>
+typedef u_int16_t __u16;
+typedef u_int32_t __u32;
+typedef int16_t __s16;
+typedef u_int8_t __u8;
 
 /* including <linux/hdreg.h> also fails */
 struct hd_geometry {
@@ -15,9 +14,6 @@
       unsigned long start;
 };
 
-#define HDIO_GETGEO		0x0301	/* get device geometry */
-
-
 struct systypes {
 	unsigned char type;
 	char *name;
@@ -26,3 +22,8 @@
 extern struct systypes i386_sys_types[];
 
 extern char *partname(char *dev, int pno, int lth);
+
+unsigned int sys_bsd_sectorsize(int fd);
+int sys_bsd_getsectors(int fd, unsigned long* s);
+int sys_bsd_ptsync(int fd);
+int sys_bsd_getgeometry(int, struct hd_geometry*);
diff -rNu fdisk.c fdisk.c
--- fdisk.c	Sat Nov 23 18:05:24 2002
+++ fdisk.c	Fri Jun 20 19:25:55 2003
@@ -37,11 +37,6 @@
 #include "fdisksgilabel.h"
 #include "fdiskaixlabel.h"
 
-#include "../defines.h"
-#ifdef HAVE_blkpg_h
-#include <linux/blkpg.h>
-#endif
-
 static void delete_partition(int i);
 
 #define hex_val(c)	({ \
@@ -198,8 +193,8 @@
 "       fdisk -l [-b SSZ] [-u] DISK  List partition table(s)\n"
 "       fdisk -s PARTITION           Give partition size(s) in blocks\n"
 "       fdisk -v                     Give fdisk version\n"
-"Here DISK is something like /dev/hdb or /dev/sda\n"
-"and PARTITION is something like /dev/hda7\n"
+"Here DISK is something like /dev/ad1 or /dev/da0\n"
+"and PARTITION is something like /dev/ad0s7\n"
 "-u: give Start and End in sector (instead of cylinder) units\n"
 "-b 2048: (for certain MO disks) use 2048-byte sectors\n");
 			break;
@@ -207,10 +202,8 @@
 		  /* msg in cases where fdisk used to probe */
 			message = _(
 "Usage: fdisk [-l] [-b SSZ] [-u] device\n"
-"E.g.: fdisk /dev/hda  (for the first IDE disk)\n"
-"  or: fdisk /dev/sdc  (for the third SCSI disk)\n"
-"  or: fdisk /dev/eda  (for the first PS/2 ESDI drive)\n"
-"  or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)\n"
+"E.g.: fdisk /dev/ad0  (for the first IDE disk)\n"
+"  or: fdisk /dev/da0  (for the third SCSI disk)\n"
 "  ...\n");
 			break;
 		case unable_to_open:
@@ -231,7 +224,7 @@
 			break;
 		case ioctl_error:
 			snprintf(error, sizeof(error),
-				 _("BLKGETSIZE ioctl failed on %s\n"),
+				 _("DIOCGDINFO ioctl failed on %s\n"),
 				disk_device);
 			break;
 		case out_of_memory:
@@ -248,8 +241,8 @@
 
 static void
 seek_sector(int fd, uint secno) {
-	ext2_loff_t offset = (ext2_loff_t) secno * sector_size;
-	if (ext2_llseek(fd, offset, SEEK_SET) == (ext2_loff_t) -1)
+	off_t offset = (off_t) secno * sector_size;
+	if (lseek(fd, offset, SEEK_SET) == (off_t) -1)
 		fatal(unable_to_seek);
 }
 
@@ -725,53 +718,23 @@
 	get_boot(create_empty_dos);
 }
 
-#include <sys/utsname.h>
-#define MAKE_VERSION(p,q,r)     (65536*(p) + 256*(q) + (r))
-
-static int
-linux_version_code(void) {
-	static int kernel_version = 0;
-        struct utsname my_utsname;
-        int p, q, r;
-
-        if (!kernel_version && uname(&my_utsname) == 0) {
-                p = atoi(strtok(my_utsname.release, "."));
-                q = atoi(strtok(NULL, "."));
-                r = atoi(strtok(NULL, "."));
-                kernel_version = MAKE_VERSION(p,q,r);
-        }
-        return kernel_version;
-}
-
 static void
 get_sectorsize(int fd) {
-#if defined(BLKSSZGET)
-	if (!user_set_sector_size &&
-	    linux_version_code() >= MAKE_VERSION(2,3,3)) {
-		int arg;
-		if (ioctl(fd, BLKSSZGET, &arg) == 0)
-			sector_size = arg;
-		if (sector_size != DEFAULT_SECTOR_SIZE)
-			printf(_("Note: sector size is %d (not %d)\n"),
-			       sector_size, DEFAULT_SECTOR_SIZE);
-	}
-#else
-	/* maybe the user specified it; and otherwise we still
-	   have the DEFAULT_SECTOR_SIZE default */
-#endif
+	unsigned int r = sys_bsd_sectorsize(fd);
+	if (r)
+		sector_size = r;
+	if (sector_size != DEFAULT_SECTOR_SIZE)
+		printf(_("Note: sector size is %d (not %d)\n"),
+		       sector_size, DEFAULT_SECTOR_SIZE);
 }
 
 static void
 get_kernel_geometry(int fd) {
-#ifdef HDIO_GETGEO
-	struct hd_geometry geometry;
-
-	if (!ioctl(fd, HDIO_GETGEO, &geometry)) {
-		kern_heads = geometry.heads;
-		kern_sectors = geometry.sectors;
-		/* never use geometry.cylinders - it is truncated */
+	struct hd_geometry h;
+	if (!sys_bsd_getgeometry(fd, &h)) {
+		kern_heads = h.heads;
+		kern_sectors = h.sectors;
 	}
-#endif
 }
 
 static void
@@ -813,7 +776,7 @@
 
 	get_sectorsize(fd);
 	sec_fac = sector_size / 512;
-	guess_device_type(fd);
+	//guess_device_type(fd);
 	heads = cylinders = sectors = 0;
 	kern_heads = kern_sectors = 0;
 	pt_heads = pt_sectors = 0;
@@ -828,8 +791,11 @@
 		pt_sectors ? pt_sectors :
 		kern_sectors ? kern_sectors : 63;
 
-	if (ioctl(fd, BLKGETSIZE, &longsectors))
-		longsectors = 0;
+	;{
+		unsigned long r;
+		if (sys_bsd_getsectors(fd, &r) == 0)
+			longsectors = r;
+	}
 
 	sector_offset = 1;
 	if (dos_compatible_flag)
@@ -1404,7 +1370,7 @@
  * Jan.  1990 (version 1.2.1 by Gordon W. Ross Aug. 1990; Modified by S.
  * Lubkin Oct.  1991). */
 
-static void long2chs(ulong ls, uint *c, uint *h, uint *s) {
+static void long2chs(unsigned long ls, uint *c, uint *h, uint *s) {
 	int	spc = heads * sectors;
 
 	*c = ls / spc;
@@ -2102,16 +2068,8 @@
 	printf(_("Calling ioctl() to re-read partition table.\n"));
 	sync();
 	sleep(2);
-	if ((i = ioctl(fd, BLKRRPART)) != 0) {
+	if ((i = sys_bsd_ptsync(fd)) != 0) {
                 error = errno;
-        } else {
-                /* some kernel versions (1.2.x) seem to have trouble
-                   rereading the partition table, but if asked to do it
-		   twice, the second time works. - biro@yggdrasil.com */
-                sync();
-                sleep(2);
-                if ((i = ioctl(fd, BLKRRPART)) != 0)
-                        error = errno;
         }
 
 	if (i) {
@@ -2403,9 +2361,11 @@
 	int j, c;
 	int optl = 0, opts = 0;
 
+#if 0
 	setlocale(LC_ALL, "");
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
+#endif
 
 	/*
 	 * Calls:
@@ -2455,7 +2415,7 @@
 			break;
 		case 'V':
 		case 'v':
-			printf("fdisk v" UTIL_LINUX_VERSION "\n");
+			printf("fdisk v" "2.11z" "-freebsd-portbld" "\n");
 			exit(0);
 		default:
 			fatal(usage);
@@ -2504,7 +2464,7 @@
 			disk_device = argv[j];
 			if ((fd = open(disk_device, type_open)) < 0)
 				fatal(unable_to_open);
-			if (ioctl(fd, BLKGETSIZE, &size))
+			if (sys_bsd_getsectors(fd, &size))
 				fatal(ioctl_error);
 			close(fd);
 			if (opts == 1)
diff -rNu fdiskaixlabel.c fdiskaixlabel.c
--- fdiskaixlabel.c	Tue Apr 18 15:21:28 2000
+++ fdiskaixlabel.c	Fri Jun 20 19:25:55 2003
@@ -8,7 +8,7 @@
 #include <string.h>             /* strstr */
 #include <unistd.h>             /* write */
 
-#include <endian.h>
+#include <sys/endian.h>
 
 #include "common.h"
 #include "fdisk.h"
diff -rNu fdiskaixlabel.h fdiskaixlabel.h
--- fdiskaixlabel.h	Sun Feb 20 18:50:51 2000
+++ fdiskaixlabel.h	Fri Jun 20 19:25:55 2003
@@ -1,4 +1,3 @@
-#include <linux/types.h>   /* for __u32 etc */
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
  *	This file may be redistributed under
diff -rNu fdiskbsdlabel.c fdiskbsdlabel.c
--- fdiskbsdlabel.c	Thu Oct 31 15:43:42 2002
+++ fdiskbsdlabel.c	Fri Jun 20 19:25:55 2003
@@ -566,7 +566,7 @@
   sector = get_start_sect(xbsd_part);
 #endif
 
-  if (ext2_llseek (fd, (ext2_loff_t) sector * SECTOR_SIZE, SEEK_SET) == -1)
+  if (lseek (fd, (off_t) sector * SECTOR_SIZE, SEEK_SET) == -1)
     fatal (unable_to_seek);
   if (BSD_BBSIZE != write (fd, disklabelbuffer, BSD_BBSIZE))
     fatal (unable_to_write);
@@ -735,7 +735,7 @@
 	sector = 0;
 #endif
 
-	if (ext2_llseek (fd, (ext2_loff_t) sector * SECTOR_SIZE, SEEK_SET) == -1)
+	if (lseek (fd, (off_t) sector * SECTOR_SIZE, SEEK_SET) == -1)
 		fatal (unable_to_seek);
 	if (BSD_BBSIZE != read (fd, disklabelbuffer, BSD_BBSIZE))
 		fatal (unable_to_read);
@@ -781,12 +781,12 @@
 
 #if defined (__alpha__) && BSD_LABELSECTOR == 0
   alpha_bootblock_checksum (disklabelbuffer);
-  if (ext2_llseek (fd, (ext2_loff_t) 0, SEEK_SET) == -1)
+  if (lseek (fd, (off_t) 0, SEEK_SET) == -1)
     fatal (unable_to_seek);
   if (BSD_BBSIZE != write (fd, disklabelbuffer, BSD_BBSIZE))
     fatal (unable_to_write);
 #else
-  if (ext2_llseek (fd, (ext2_loff_t) sector * SECTOR_SIZE + BSD_LABELOFFSET,
+  if (lseek (fd, (off_t) sector * SECTOR_SIZE + BSD_LABELOFFSET,
 		   SEEK_SET) == -1)
     fatal (unable_to_seek);
   if (sizeof (struct xbsd_disklabel) != write (fd, d, sizeof (struct xbsd_disklabel)))
@@ -847,9 +847,11 @@
 
 #if defined (__alpha__)
 
+/*
 #if !defined(__GLIBC__)
 typedef unsigned long long u_int64_t;
 #endif
+*/

 void
 alpha_bootblock_checksum (char *boot)
diff -rNu fdiskbsdlabel.h fdiskbsdlabel.h
--- fdiskbsdlabel.h	Thu Oct 31 15:45:34 2002
+++ fdiskbsdlabel.h	Fri Jun 20 19:25:55 2003
@@ -31,8 +31,6 @@
  * SUCH DAMAGE.
  */
 
-#include <linux/types.h>	/* for __u32, __u16, __u8, __s16 */
-
 #ifndef BSD_DISKMAGIC
 #define BSD_DISKMAGIC     ((__u32) 0x82564557)
 #endif
diff -rNu fdisksgilabel.c fdisksgilabel.c
--- fdisksgilabel.c	Thu May  9 02:51:31 2002
+++ fdisksgilabel.c	Fri Jun 20 19:25:55 2003
@@ -17,9 +17,8 @@
 #include <sys/stat.h>           /* stat */
 #include <assert.h>             /* assert */
 
-#include <endian.h>
+#include <sys/endian.h>
 #include "nls.h"
-#include <linux/major.h>        /* FLOPPY_MAJOR */
 
 #include "common.h"
 #include "fdisk.h"
@@ -382,7 +381,7 @@
 	 */
 	sgiinfo*info = fill_sgiinfo();	/* fills the block appropriately */
 	int infostartblock = SSWAP32( sgilabel->directory[0].vol_file_start );
-	if( ext2_llseek(fd, (ext2_loff_t)infostartblock*
+	if( lseek(fd, (off_t)infostartblock*
 	    SECTOR_SIZE, SEEK_SET) < 0 )
 	    fatal(unable_to_seek);
 	if( write(fd, info, SECTOR_SIZE) != SECTOR_SIZE )
@@ -735,11 +734,7 @@
 
     other_endian = (BYTE_ORDER == LITTLE_ENDIAN);
 
-#ifdef HDIO_REQ
-    if (!ioctl(fd, HDIO_REQ, &geometry))
-#else
-    if (!ioctl(fd, HDIO_GETGEO, &geometry))
-#endif
+    if (!sys_bsd_getgeometry(fd, &geometry))
     {
 	heads = geometry.heads;
 	sectors = geometry.sectors;
diff -rNu fdisksgilabel.h fdisksgilabel.h
--- fdisksgilabel.h	Tue Feb 20 12:26:53 2001
+++ fdisksgilabel.h	Fri Jun 20 19:25:55 2003
@@ -1,4 +1,3 @@
-#include <linux/types.h>   /* for __u32 etc */
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
  *	This file may be modified and redistributed under
diff -rNu fdisksunlabel.c fdisksunlabel.c
--- fdisksunlabel.c	Fri Nov  1 03:55:25 2002
+++ fdisksunlabel.c	Fri Jun 20 19:25:55 2003
@@ -16,18 +16,18 @@
 #include <unistd.h>		/* write */
 #include <sys/ioctl.h>		/* ioctl */
 #include <sys/stat.h>		/* stat */
-#include <sys/sysmacros.h>	/* major */
+//#include <sys/sysmacros.h>	/* major */
 
 #include "nls.h"
 
-#include <endian.h>
-#include "../defines.h"		/* for HAVE_scsi_h */
+#include <sys/endian.h>
+//#include "../defines.h"		/* for HAVE_scsi_h */
 #ifdef HAVE_scsi_h
 #define u_char	unsigned char
 #include <scsi/scsi.h>		/* SCSI_IOCTL_GET_IDLUN */
 #undef u_char
 #endif
-#include <linux/major.h>	/* FLOPPY_MAJOR */
+//#include <linux/major.h>	/* FLOPPY_MAJOR */
 
 #include "common.h"
 #include "fdisk.h"
@@ -71,6 +71,7 @@
 	return SSWAP32(p.num_sectors);
 }
 
+#if 0
 #ifndef IDE0_MAJOR
 #define IDE0_MAJOR 3
 #endif
@@ -97,6 +98,7 @@
                 floppy = 0;
 	}
 }
+#endif
 
 static void
 set_sun_partition(int i, uint start, uint stop, int sysid) {
@@ -296,11 +298,7 @@
 	    }
 	}
 	if (!p || floppy) {
-#ifdef HDIO_REQ
-	    if (!ioctl(fd, HDIO_REQ, &geometry)) {
-#else
-	    if (!ioctl(fd, HDIO_GETGEO, &geometry)) {
-#endif
+	    if (!sys_bsd_getgeometry(fd, &geometry)) {
 	        heads = geometry.heads;
 	        sectors = geometry.sectors;
 	        cylinders = geometry.cylinders;
diff -rNu fdisksunlabel.h fdisksunlabel.h
--- fdisksunlabel.h	Tue Oct  3 00:42:10 2000
+++ fdisksunlabel.h	Fri Jun 20 19:25:55 2003
@@ -1,4 +1,3 @@
-#include <linux/types.h>   /* for __u16, __u32 */
 
 typedef struct {
 	unsigned char info[128];   /* Informative text string */
diff -rNu nls.h nls.h
--- nls.h	Thu Jan  1 03:00:00 1970
+++ nls.h	Fri Jun 20 19:25:55 2003
@@ -0,0 +1,2 @@
+#define _(x) (x)
+#define N_(x) (x)
diff -rNu partname.c partname.c
--- partname.c	Sun Jul  7 15:16:43 2002
+++ partname.c	Fri Jun 20 19:25:55 2003
@@ -21,14 +21,16 @@
 	p = "";
 
 	if (isdigit(dev[w-1]))
-		p = "p";
+		p = "s";
 
+#if 0
 	/* devfs kludge - note: fdisk partition names are not supposed
 	   to equal kernel names, so there is no reason to do this */
 	if (strcmp (dev + w - 4, "disc") == 0) {
 		w -= 4;
 		p = "part";
 	}
+#endif
 
 	wp = strlen(p);
 		
diff -rNu sfdisk.8 sfdisk.8
--- sfdisk.8	Fri Jun 20 20:37:34 2003
+++ sfdisk.8	Fri Jun 20 20:43:24 2003
@@ -9,9 +9,9 @@
 .SH NAME
 sfdisk \- Partition table manipulator for Linux
 .SH SYNOPSIS
-.BR sfdisk " [options] device"
+.BR sfdisk-linux " [options] device"
 .br
-.BR "sfdisk \-s " [partition]
+.BR "sfdisk-linux \-s " [partition]
 .SH DESCRIPTION
 .B sfdisk
 has four (main) uses: list the size of a partition, list the partitions
@@ -19,7 +19,7 @@
 repartition a device.
 
 .SS "List Sizes"
-.BI "sfdisk \-s " partition
+.BI "sfdisk-linux \-s " partition
 gives the size of
 .I partition
 in blocks. This may be useful in connection with programs like
@@ -27,16 +27,16 @@
 or so. Here
 .I partition
 is usually something like
-.I /dev/hda1
+.I /dev/ad0s1
 or
-.IR /dev/sdb12 ,
+.IR /dev/da2s12 ,
 but may also be an entire disk, like
-.IR /dev/xda .
+.IR /dev/amrd0 .
 .br
 .RS
 .nf
 .if t .ft CW
-% sfdisk \-s /dev/hda9
+% sfdisk-linux \-s /dev/ad0s9
 81599
 %
 .if t .ft R
@@ -49,12 +49,12 @@
 .RS
 .nf
 .if t .ft CW
-% sfdisk \-s
-/dev/hda: 208896
-/dev/hdb: 1025136
-/dev/hdc: 1031063
-/dev/sda: 8877895
-/dev/sdb: 1758927
+% sfdisk-linux \-s
+/dev/ad0: 208896
+/dev/ad1: 1025136
+/dev/ad2: 1031063
+/dev/da0: 8877895
+/dev/da1: 1758927
 total: 12901917 blocks
 %
 .if t .ft R
@@ -70,16 +70,16 @@
 .br
 .nf
 .if t .ft CW
-% sfdisk \-l /dev/hdc
+% sfdisk-linux \-l /dev/ad2
 
-Disk /dev/hdc: 16 heads, 63 sectors, 2045 cylinders
+Disk /dev/ad2: 16 heads, 63 sectors, 2045 cylinders
 Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
 
    Device Boot Start     End   #cyls   #blocks   Id  System
-/dev/hdc1          0+    406     407\-   205096+  83  Linux native
-/dev/hdc2        407     813     407    205128   83  Linux native
-/dev/hdc3        814    2044    1231    620424   83  Linux native
-/dev/hdc4          0       \-       0         0    0  Empty
+/dev/ad2s1          0+    406     407\-   205096+  83  Linux native
+/dev/ad2s2        407     813     407    205128   83  Linux native
+/dev/ad2s3        814    2044    1231    620424   83  Linux native
+/dev/ad2s4          0       \-       0         0    0  Empty
 %
 .if t .ft R
 .fi
@@ -89,17 +89,17 @@
 
 .SS "Check partitions"
 The third type of invocation:
-.BI "sfdisk \-V " device
+.BI "sfdisk-linux \-V " device
 will apply various consistency checks to the partition tables on
 .IR device .
 It prints `OK' or complains. The \-V option can be used together
 with \-l. In a shell script one might use
-.BI "sfdisk \-V \-q " device
+.BI "sfdisk-linux \-V \-q " device
 which only returns a status.
 
 .SS "Create partitions"
 The fourth type of invocation:
-.BI "sfdisk " device
+.BI "sfdisk-linux " device
 will cause
 .B sfdisk
 to read the specification for the desired partitioning of
@@ -119,7 +119,7 @@
 .RS
 .nf
 .if t .ft CW
-% sfdisk /dev/hdd \-O hdd-partition-sectors.save
+% sfdisk-linux /dev/ad3 \-O ad3-partition-sectors.save
 \&...
 %
 .if t .ft R
@@ -132,7 +132,7 @@
 .RS
 .nf
 .if t .ft CW
-% sfdisk /dev/hdd \-I hdd-partition-sectors.save
+% sfdisk-linux /dev/ad3 \-I ad3-partition-sectors.save
 %
 .if t .ft R
 .fi
@@ -176,8 +176,8 @@
 .br
 .nf
 .if t .ft CW
-    % sfdisk -d /dev/hda > hda.out
-    % sfdisk /dev/hda < hda.out
+    % sfdisk-linux -d /dev/ad0 > ad0.out
+    % sfdisk-linux /dev/ad0 < ad0.out
 .if t .ft R
 .fi
 will correct the bad last extended partition that the OS/2
@@ -194,14 +194,14 @@
 .br
 .nf
 .if t .ft CW
-    % sfdisk /dev/hdb \-N5
+    % sfdisk-linux /dev/ad1 \-N5
     ,,,*
     %
 .if t .ft R
 .fi
-will make the fifth partition on /dev/hdb bootable (`active')
+will make the fifth partition on /dev/ad1 bootable (`active')
 and change nothing else. (Probably this fifth partition
-is called /dev/hdb5, but you are free to call it something else,
+is called /dev/ad1s5, but you are free to call it something else,
 like `/my_equipment/disks/2/5' or so).
 .TP
 .BI \-A "number"
@@ -216,13 +216,13 @@
 .br
 .nf
 .if t .ft CW
-    % sfdisk --print-id /dev/hdb 5
+    % sfdisk-linux --print-id /dev/ad1 5
     6
-    % sfdisk --change-id /dev/hdb 5 83
+    % sfdisk-linux --change-id /dev/ad1 5 83
     OK
 .if t .ft R
 .fi
-first reports that /dev/hdb5 has Id 6, and then changes that into 83.
+first reports that /dev/ad1s5 has Id 6, and then changes that into 83.
 .TP
 .BR \-uS " or " \-uB " or " \-uC " or " \-uM
 Accept or report in units of sectors (blocks, cylinders, megabytes,
@@ -420,7 +420,7 @@
 .RS
 .nf
 .if t .ft CW
-sfdisk /dev/hdc << EOF
+sfdisk-linux /dev/ad2 << EOF
 0,407
 ,407
 ;
@@ -429,7 +429,7 @@
 .if t .ft R
 .fi
 .RE
-will partition /dev/hdc just as indicated above.
+will partition /dev/ad2 just as indicated above.
 
 With the \-x option, the number of input lines must be a multiple of 4:
 you have to list the two empty partitions that you never want
@@ -456,9 +456,9 @@
 .B dd
 to zero the first 512 bytes of that partition before using DOS FORMAT to
 format the partition.  For example, if you were using sfdisk to make a DOS
-partition table entry for /dev/hda1, then (after exiting sfdisk and
+partition table entry for /dev/ad0s1, then (after exiting sfdisk and
 rebooting Linux so that the partition table information is valid) you
-would use the command "dd if=/dev/zero of=/dev/hda1 bs=512 count=1" to zero
+would use the command "dd if=/dev/zero of=/dev/ad0s1 bs=512 count=1" to zero
 the first 512 bytes of the partition.
 .B BE EXTREMELY CAREFUL
 if you use the
@@ -508,7 +508,7 @@
 
 .SH BUGS
 A corresponding interactive
-.B cfdisk
+.B cfdisk-linux
 (with curses interface) is still lacking.
 .LP
 There are too many options.
@@ -519,7 +519,7 @@
 A. E. Brouwer (aeb@cwi.nl)
 
 .SH "SEE ALSO"
-.BR cfdisk (8),
+.BR cfdisk-linux (8),
+.BR fdisk-linux (8),
 .BR fdisk (8),
-.BR mkfs (8),
-.BR parted (8)
+.BR newfs (8)
diff -rNu cfdisk.8 cfdisk.8
--- cfdisk.8	Sun Jul  7 15:28:27 2002
+++ cfdisk.8	Fri Jun 20 20:57:52 2003
@@ -15,7 +15,7 @@
 .SH NAME
 cfdisk \- Curses based disk partition table manipulator for Linux
 .SH SYNOPSIS
-.BI "cfdisk [ \-agvz ] [ \-c " cylinders " ] [ \-h " heads " ]"
+.BI "cfdisk-linux [ \-agvz ] [ \-c " cylinders " ] [ \-h " heads " ]"
 .BI "[ \-s " sectors-per-track " ] [ -P " opt " ] [ " device " ]"
 .SH DESCRIPTION
 .B cfdisk
@@ -26,12 +26,10 @@
 .sp
 .nf
 .RS
-/dev/hda [default]
-/dev/hdb
-/dev/sda
-/dev/sdb
-/dev/sdc
-/dev/sdd
+/dev/ad0 [default]
+/dev/ad1
+/dev/da0
+/dev/da1
 .RE
 .fi
 
@@ -132,9 +130,9 @@
 .B dd
 to zero the first 512 bytes of that partition before using DOS FORMAT to
 format the partition.  For example, if you were using cfdisk to make a DOS
-partition table entry for /dev/hda1, then (after exiting fdisk or cfdisk
+partition table entry for /dev/ad0s1, then (after exiting fdisk or cfdisk
 and rebooting Linux so that the partition table information is valid) you
-would use the command "dd if=/dev/zero of=/dev/hda1 bs=512 count=1" to zero
+would use the command "dd if=/dev/zero of=/dev/ad0s1 bs=512 count=1" to zero
 the first 512 bytes of the partition. Note:
 
 .B BE EXTREMELY CAREFUL
@@ -418,10 +416,10 @@
 0: No errors; 1: Invocation error; 2: I/O error;
 3: cannot get geometry; 4: bad partition table on disk.
 .SH "SEE ALSO"
+.BR fdisk-linux (8),
+.BR newfs (8),
 .BR fdisk (8),
-.BR mkfs (8),
-.BR parted (8),
-.BR sfdisk (8)
+.BR sfdisk-linux (8)
 .SH BUGS
 The current version does not support multiple disks.
 .SH AUTHOR
diff -rNu fdisk.8 fdisk.8
--- fdisk.8	Tue Aug  6 17:33:33 2002
+++ fdisk.8	Fri Jun 20 21:01:24 2003
@@ -5,14 +5,14 @@
 .SH NAME
 fdisk \- Partition table manipulator for Linux
 .SH SYNOPSIS
-.BI "fdisk [\-u] [\-b " sectorsize ]
+.BI "fdisk-linux [\-u] [\-b " sectorsize ]
 .BI "[\-C " cyls "] [\-H " heads "] [\-S " sects "] " device
 .sp
-.BI "fdisk \-l [\-u] [" "device ..." ]
+.BI "fdisk-linux \-l [\-u] [" "device ..." ]
 .sp
-.BI "fdisk \-s " "partition ..."
+.BI "fdisk-linux \-s " "partition ..."
 .sp
-.BI "fdisk \-v
+.BI "fdisk-linux \-v
 .SH DESCRIPTION
 Hard disks can be divided into one or more logical disks called
 .IR partitions .
@@ -48,26 +48,22 @@
 .br
 .nf
 .RS
-/dev/hda
-/dev/hdb
-/dev/sda
-/dev/sdb
+/dev/ad0
+/dev/ad1
+/dev/da0
+/dev/da1
 .RE
 .fi
-(/dev/hd[a-h] for IDE disks, /dev/sd[a-p] for SCSI disks,
-/dev/ed[a-d] for ESDI disks, /dev/xd[ab] for XT disks).
+(/dev/adN for IDE disks, /dev/daN for SCSI disks, N=0,1,2...)
 A device name refers to the entire disk.
 
 The
 .I partition
 is a
 .I device
-name followed by a partition number.  For example,
-.B /dev/hda1
+name followed by 's' and a partition number.  For example,
+.B /dev/ad0s1
 is the first partition on the first IDE hard disk in the system.
-IDE disks can have up to 63 partitions, SCSI disks up to 15.
-See also
-.IR /usr/src/linux/Documentation/devices.txt .
 
 A BSD/SUN type disklabel can describe 8 partitions,
 the third of which should be a `whole disk' partition.
@@ -132,7 +128,7 @@
 Partitions beginning in cylinder 1 cannot begin on a cylinder boundary, but
 this is unlikely to cause difficulty unless you have OS/2 on your machine.
 
-A sync() and a BLKRRPART ioctl() (reread partition table from disk)
+A sync() and a sys_bsd_ptsync() (reread partition table from disk)
 are performed before exiting when the partition table has been updated.
 Long ago it used to be necessary to reboot after the use of fdisk.
 I do not think this is the case anymore - indeed, rebooting too quickly
@@ -242,7 +238,7 @@
 .\" Andreas Neuper (ANeuper@GUUG.de)
 .\" and many others.
 .SH "SEE ALSO"
-.BR cfdisk (8),
-.BR mkfs (8),
-.BR parted (8),
-.BR sfdisk (8)
+.BR cfdisk_linux (8),
+.BR newfs (8),
+.BR fdisk (8),
+.BR sfdisk_linux (8)
diff -rNu sfdisk.c sfdisk.c
--- sfdisk.c	Tue Jan 28 20:18:03 2003
+++ sfdisk.c	Tue Jun 24 01:10:28 2003
@@ -42,11 +42,9 @@
 #include <errno.h>		/* ERANGE */
 #include <string.h>		/* index() */
 #include <ctype.h>
-#include <getopt.h>
+#include "getopt.h"
 #include <sys/ioctl.h>
 #include <sys/stat.h>
-#include <sys/utsname.h>
-#include <linux/unistd.h>	/* _syscall */
 #include "nls.h"
 #include "common.h"
 
@@ -130,23 +128,14 @@
  *
  * Note: we use 512-byte sectors here, irrespective of the hardware ss.
  */
-#if !defined (__alpha__) && !defined (__ia64__) && !defined (__x86_64__) && !defined (__s390x__)
-static
-_syscall5(int,  _llseek,  uint,  fd, ulong, hi, ulong, lo,
-       loff_t *, res, uint, wh);
-#endif
 
 static int
 sseek(char *dev, unsigned int fd, unsigned long s) {
-    loff_t in, out;
-    in = ((loff_t) s << 9);
+    off_t in, out;
+    in = ((off_t) s << 9);
     out = 1;
 
-#if !defined (__alpha__) && !defined (__ia64__) && !defined (__x86_64__) && !defined (__s390x__)
-    if (_llseek (fd, in>>32, in & 0xffffffff, &out, SEEK_SET) != 0) {
-#else
     if ((out = lseek(fd, in, SEEK_SET)) != in) {
-#endif
 	perror("llseek");
 	error(_("seek error on %s - cannot seek to %lu\n"), dev, s);
 	return 0;
@@ -399,12 +388,13 @@
     long size;
     struct geometry R;
 
-    if (ioctl(fd, BLKGETSIZE, &size)) {
+    if (sys_bsd_getsectors(fd, (unsigned long*) &size)) {
 	size = 0;
 	if (!silent)
 	    printf(_("Disk %s: cannot get size\n"), dev);
     }
-    if (ioctl(fd, HDIO_GETGEO, &g)) {
+    g.start = 0; /* XXX ?????????? */
+    if (sys_bsd_getgeometry(fd, &g)) {
 	g.heads = g.sectors = g.cylinders = g.start = 0;
 	if (!silent)
 	    printf(_("Disk %s: cannot get geometry\n"), dev);
@@ -721,8 +711,8 @@
 /* tell the kernel to reread the partition tables */
 static int
 reread_ioctl(int fd) {
-    if(ioctl(fd, BLKRRPART)) {
-	perror("BLKRRPART");
+    if(sys_bsd_ptsync(fd)) {
+	perror("sys_bsd_ptsync");
 	return -1;
     }
     return 0;
@@ -1428,22 +1418,6 @@
 	z->partno = pno;
 }
 
-#define MAKE_VERSION(p,q,r)     (65536*(p) + 256*(q) + (r))
-
-static int
-linux_version_code(void) {
-        struct utsname my_utsname;
-        int p, q, r;
-
-        if (uname(&my_utsname) == 0) {
-                p = atoi(strtok(my_utsname.release, "."));
-                q = atoi(strtok(NULL, "."));
-                r = atoi(strtok(NULL, "."));
-                return MAKE_VERSION(p,q,r);
-        }
-        return 0;
-}
-
 static int
 msdos_partition(char *dev, int fd, unsigned long start, struct disk_desc *z) {
     int i;
@@ -1452,7 +1426,10 @@
     struct sector *s;
     struct part_desc *partitions = &(z->partitions[0]);
     int pno = z->partno;
-    int bsd_later = (linux_version_code() >= MAKE_VERSION(2,3,40));
+    /* Under FreeBSD, "bsd later" is always true because BSD partitions
+     * in MBR or MBREXT partitions doesn't be listed immediately.
+     */
+    int bsd_later = 1;
 
     if (!(s = get_sector(dev, fd, start)))
 	return 0;
@@ -1501,6 +1478,8 @@
 	    }
 	    extended_partition(dev, fd, &partitions[i], z);
 	}
+#if 0
+/* FreeBSD port: don't count partitions as they won't be list as slices */
 	if (!bsd_later && is_bsd(partitions[i].p.sys_type)) {
 	    if (!partitions[i].size) {
 		printf(_("strange..., a BSD partition of size 0?\n"));
@@ -1508,8 +1487,11 @@
 	    }
 	    bsd_partition(dev, fd, &partitions[i], z);
 	}
+#endif
     }
 
+#if 0
+/* FreeBSD port: don't count partitions as they won't be list as slices */
     if (bsd_later) {
 	for (i=0; i<4; i++) {
 	    if (is_bsd(partitions[i].p.sys_type)) {
@@ -1521,6 +1503,7 @@
 	    }
 	}
     }
+#endif
 	    
     return 1;
 }
@@ -2413,9 +2396,11 @@
     char *activatearg = 0;
     char *unhidearg = 0;
 
+#if 0
     setlocale(LC_ALL, "");
     bindtextdomain(PACKAGE, LOCALEDIR);
     textdomain(PACKAGE);
+#endif
 
     if (argc < 1)
       fatal(_("no command?\n"));
@@ -2668,10 +2653,10 @@
     if (fd < 0)
 	return;
 
-    if(ioctl(fd, BLKGETSIZE, &size)) {
+    if(sys_bsd_getsectors(fd, (unsigned long*) &size)) {
 	if(!silent) {
 	    perror(dev);
-	    fatal(_("BLKGETSIZE ioctl failed for %s\n"), dev);
+	    fatal(_("sys_bsd_getsectors() failed for %s\n"), dev);
 	}
 	return;
     }