aboutsummaryrefslogtreecommitdiff
path: root/sysutils/ntfsprogs/files
diff options
context:
space:
mode:
authorRene Ladan <rene@FreeBSD.org>2016-12-31 17:43:48 +0000
committerRene Ladan <rene@FreeBSD.org>2016-12-31 17:43:48 +0000
commit9a5bfc962bbbbd345ff5eeced6d2fb774c4da370 (patch)
tree41ae4943c79f0c5f3fae555b893e75352ad7ee19 /sysutils/ntfsprogs/files
parent77eed30703f4a6877dcb68ba4b79c633e9b71d4d (diff)
downloadports-9a5bfc962bbbbd345ff5eeced6d2fb774c4da370.tar.gz
ports-9a5bfc962bbbbd345ff5eeced6d2fb774c4da370.zip
Notes
Diffstat (limited to 'sysutils/ntfsprogs/files')
-rw-r--r--sysutils/ntfsprogs/files/README.FreeBSD150
-rw-r--r--sysutils/ntfsprogs/files/patch-libntfs-device.c155
-rw-r--r--sysutils/ntfsprogs/files/patch-libntfs-device_io.c14
-rw-r--r--sysutils/ntfsprogs/files/patch-libntfs-unistr.c138
-rw-r--r--sysutils/ntfsprogs/files/patch-libntfs-unix_io.c611
-rw-r--r--sysutils/ntfsprogs/files/patch-ntfsprogs-Makefile.in21
-rw-r--r--sysutils/ntfsprogs/files/patch-ntfsprogs-mkntfs.c31
-rw-r--r--sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsclone.c14
-rw-r--r--sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsresize.c14
-rw-r--r--sysutils/ntfsprogs/files/pkg-message.in10
10 files changed, 0 insertions, 1158 deletions
diff --git a/sysutils/ntfsprogs/files/README.FreeBSD b/sysutils/ntfsprogs/files/README.FreeBSD
deleted file mode 100644
index c2f5c74ac7c6..000000000000
--- a/sysutils/ntfsprogs/files/README.FreeBSD
+++ /dev/null
@@ -1,150 +0,0 @@
-==============================================================================
-Linux-NTFS README for the FreeBSD port
-==============================================================================
-
-1. Introduction
-2. Port specific notes
-3. Mounting at startup with /etc/fstab
-4. Ublio configuration
-5. Known issues
-6. Reporting bugs
-
-==============================================================================
-1. Introduction
-==============================================================================
-
-The Linux-NTFS project provides a read/write filesystem driver for NTFS. It uses
-the FUSE library (a OS independent library to create filesystem drivers), more
-precisely FUSE's library with fuse4bsd's kernel module (port of the kernel
-dependent part of FUSE). For more information see:
-
-Linux-NTFS site: http://www.linux-ntfs.org/
-FUSE site: http://fuse.sourceforge.net/
-fuse4bsd site: http://fuse4bsd.creo.hu/
-
-==============================================================================
-2. Port specific notes
-==============================================================================
-
-The port has a patch to align read/write operations to the media block size
-(required on FreeBSD).
-
-The port has 2 related options: LOCK (to prevent access to the device by
-external programs than ntfsmount once mounted, default on Linux) and UBLIO
-(use a user space cache library, see devel/libublio, not required on Linux).
-
-The reason for using UBLIO is that FreeBSD removed support for block devices,
-being them now character devices. The former ones had a cache, and Linux-NTFS
-was optimized for it (Linux still uses them). The same happens on Mac OS X
-(based on FreeBSD 5). So using UBLIO both improves performance (~10 times
-faster), and reduces disk load.
-
-==============================================================================
-3. Mounting at startup with /etc/fstab
-==============================================================================
-
-To mount at startup you need to have the following line in /etc/rc.conf:
-
-fusefs_enable="YES"
-
-And add the appropiate line to /etc/fstab: the filesystem should be
-"ntfs-fuse" instead of "ntfs", and the additional "late" parameter is
-required. Example:
-
-/dev/ad4s1 /wxp ntfs-fuse rw,late 0 0
-
-Note that in FreeBSD 7.x, mount(8) has a fixed (hard coded) list of external
-mount_XXX programs that can be called, so to make this work you have to do one
-of the following:
-
-1. Rename /sbin/mount_ntfs, symlink ntfsmount as the former, and use just
- "ntfs" as the type in /etc/fstab.
- # mv /sbin/mount_ntfs /sbin/mount_ntfs-kern
- # ln -s /usr/sbin/mount_ntfs-fuse /usr/sbin/mount_ntfs
-2. Apply a patch to src/sbin/mount/mount.c to add "ntfs-fuse" as a valid type.
-3. Apply a patch to src/sbin/mount/mount.c to make it work like in 6.x (better
- than the previous one as will allow any external type). It can be found at:
- http://people.freebsd.org/~alepulver/current-7.0-mount.diff
-
-==============================================================================
-4. Ublio configuration
-==============================================================================
-
-The UBLIO layer is configured through environment variables, which are read
-when mounting the filesystem. The following are available:
-
-NTFS_USE_UBLIO - Enable the UBLIO cache.
-UBLIO_BLOCKSIZE - Actual reads/writes will be multiples of this quantity.
-UBLIO_ITEMS - Number of cache entries, each of UBLIO_BLOCKSIZE length.
-UBLIO_GRACE - Number of times a cache entry will refuse being recycled.
-UBLIO_SYNC_IO - If enabled, all writes will be immediatly executed.
-
-To give an idea about tuning, here are the default values with some notes
-(they are only based on some simple benchmarks, and may be wrong):
-
-NTFS_USE_UBLIO - 1. Disabling it drastically decreases performance.
-UBLIO_BLOCKSIZE - 262144 (256KB). Larger improves reading/writing speed of
- large files, and smaller makes filesystem operations
- (creation, deletion, moving, find(1)) perform faster.
- Try 2/4MB and 512/256KB for the different approaches. Note
- that after that points performance descreases again.
-UBLIO_ITEMS - 64. Higher increases speed of filesystem operations. Try 128.
-UBLIO_GRACE - 32. Makes the cache items have more chances to be reused.
-UBLIO_SYNC_IO - 0. If enabled, highly decreases writing speed, but the data
- is immediatly written to the disk.
-
-For example (improves performance over large files, but read below):
-
-# env UBLIO_BLOCKSIZE=2097152 ntfsmount /dev/ad0s1 /mnt
-
-Alternatively these variables could be set in the shell startup file. For
-example if you are using it in /etc/fstab add them to /etc/profile. If you use
-it as a user, instead, editing the shell startup in HOME is enough.
-
-Note that higher values for UBLIO_BLOCKSIZE and UBLIO_ITEMS increase the
-memory usage by their product in bytes. For example, if you set it to 1MB it
-would consume 64MB. To decrease it to 16MB you could set UBLIO_BLOCKSIZE to
-256KB (currently this is the default). Small values like 4096 can be used and
-also perform fine.
-
-It is also possible to enforce block aligned I/O on regular files by setting
-the FORCE_ALIGNED_IO variable (it will be set to 512 bytes), but this is only
-useful for testing purposes and in practice has no use.
-
-==============================================================================
-5. Known issues
-==============================================================================
-
-When reading/writting the same file repeatedly while doing many simultaneous
-operations on different files sometimes the former one fails: read(2) returns
--1 and sets errno to EAGAIN. This is because of a difference between the FUSE
-kernel implementation in Linux and FreeBSD, and is being worked on. An example
-scenario would be playing a song in XMMS, while building many ports, which
-could cause XMMS skip the song. Another observed problem is the current
-directory not being found, but entering again would work. The details are
-described in fuse4bsd (sysutils/fusefs-kmod) documentation (Linux access is
-path based while FreeBSD is vnode based, which may be reused).
-
-==============================================================================
-6. Reporting bugs
-==============================================================================
-
-About the port itself, you can ask the maintainer (preferable) and/or in the
-ports@FreeBSD.org mailing list.
-
-About general NTFS problems (corruptions, etc) ask in the Linux-NTFS forum
-(see below).
-
-But often (even on Linux, 50% of the issues are related to these) the problems
-reside on the FUSE implementation (the library itself, or fuse4bsd portion).
-
-For reporting kernel panics, see:
-
-http://fuse.sourceforge.net/wiki/index.php/DebugFreeBSDPanicsHowto
-
-And you can report them to the fuse4bsd author (preferable), or here:
-
-Linux-NTFS forum: http://forum.linux-ntfs.org/
-FreeBSD PRs: http://www.freebsd.org/send-pr.html
-
-==============================================================================
diff --git a/sysutils/ntfsprogs/files/patch-libntfs-device.c b/sysutils/ntfsprogs/files/patch-libntfs-device.c
deleted file mode 100644
index 8e36e0f94cfa..000000000000
--- a/sysutils/ntfsprogs/files/patch-libntfs-device.c
+++ /dev/null
@@ -1,155 +0,0 @@
---- ./libntfs/device.c.orig 2007-09-26 22:28:34.000000000 +0400
-+++ ./libntfs/device.c 2011-03-15 23:07:06.183948162 +0300
-@@ -62,6 +62,9 @@
- #ifdef HAVE_LINUX_HDREG_H
- #include <linux/hdreg.h>
- #endif
-+#ifdef __FreeBSD__
-+#include <sys/disk.h>
-+#endif
-
- #include "types.h"
- #include "mst.h"
-@@ -599,6 +602,17 @@
- }
- }
- #endif
-+#ifdef DIOCGMEDIASIZE
-+ { off_t size;
-+
-+ if (dev->d_ops->ioctl(dev, DIOCGMEDIASIZE, &size) >= 0) {
-+ ntfs_log_debug("DIOCGMEDIASIZE nr bytes = %llu (0x%llx)\n",
-+ (unsigned long long)size,
-+ (unsigned long long)size);
-+ return (s64)size / block_size;
-+ }
-+ }
-+#endif
- /*
- * We couldn't figure it out by using a specialized ioctl,
- * so do binary search to find the size of the device.
-@@ -627,8 +641,8 @@
- *
- * The following error codes are defined:
- * EINVAL Input parameter error
-- * EOPNOTSUPP System does not support HDIO_GETGEO ioctl
-- * ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
-+ * EOPNOTSUPP System does not support DIOCGFWSECTORS ioctl
-+ * ENOTTY @dev is a file or a device not supporting DIOCGFWSECTORS
- */
- s64 ntfs_device_partition_start_sector_get(struct ntfs_device *dev)
- {
-@@ -636,13 +650,13 @@
- errno = EINVAL;
- return -1;
- }
--#ifdef HDIO_GETGEO
-- { struct hd_geometry geo;
-+#ifdef DIOCGFWSECTORS
-+ { u_int start_sector = 0;
-
-- if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
-- ntfs_log_debug("HDIO_GETGEO start_sect = %lu (0x%lx)\n",
-- geo.start, geo.start);
-- return geo.start;
-+ if (!dev->d_ops->ioctl(dev, DIOCGFWSECTORS, &start_sector)) {
-+ ntfs_log_debug("DIOCGFWSECTORS start_sect = %lu (0x%lx)\n",
-+ start_sector, start_sector);
-+ return start_sector;
- }
- }
- #else
-@@ -660,8 +674,8 @@
- *
- * The following error codes are defined:
- * EINVAL Input parameter error
-- * EOPNOTSUPP System does not support HDIO_GETGEO ioctl
-- * ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
-+ * EOPNOTSUPP System does not support DIOCGFWHEADS ioctl
-+ * ENOTTY @dev is a file or a device not supporting DIOCGFWHEADS
- */
- int ntfs_device_heads_get(struct ntfs_device *dev)
- {
-@@ -669,14 +683,13 @@
- errno = EINVAL;
- return -1;
- }
--#ifdef HDIO_GETGEO
-- { struct hd_geometry geo;
-+#ifdef DIOCGFWHEADS
-+ { u_int heads;
-
-- if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
-- ntfs_log_debug("HDIO_GETGEO heads = %u (0x%x)\n",
-- (unsigned)geo.heads,
-- (unsigned)geo.heads);
-- return geo.heads;
-+ if (!dev->d_ops->ioctl(dev, DIOCGFWHEADS, &heads)) {
-+ ntfs_log_debug("DIOCGFWHEADS heads = %u (0x%x)\n",
-+ heads, heads);
-+ return heads;
- }
- }
- #else
-@@ -694,8 +707,8 @@
- *
- * The following error codes are defined:
- * EINVAL Input parameter error
-- * EOPNOTSUPP System does not support HDIO_GETGEO ioctl
-- * ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
-+ * EOPNOTSUPP System does not support DIOCGFWSECTORS ioctl
-+ * ENOTTY @dev is a file or a device not supporting DIOCGFWSECTORS
- */
- int ntfs_device_sectors_per_track_get(struct ntfs_device *dev)
- {
-@@ -703,14 +716,13 @@
- errno = EINVAL;
- return -1;
- }
--#ifdef HDIO_GETGEO
-- { struct hd_geometry geo;
-+#ifdef DIOCGFWSECTORS
-+ { u_int sptrack;
-
-- if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
-- ntfs_log_debug("HDIO_GETGEO sectors_per_track = %u (0x%x)\n",
-- (unsigned)geo.sectors,
-- (unsigned)geo.sectors);
-- return geo.sectors;
-+ if (!dev->d_ops->ioctl(dev, DIOCGFWSECTORS, &sptrack)) {
-+ ntfs_log_debug("DIOCGFWSECTORS sectors_per_track = %u (0x%x)\n",
-+ sptrack, sptrack);
-+ return sptrack;
- }
- }
- #else
-@@ -728,8 +740,8 @@
- *
- * The following error codes are defined:
- * EINVAL Input parameter error
-- * EOPNOTSUPP System does not support BLKSSZGET ioctl
-- * ENOTTY @dev is a file or a device not supporting BLKSSZGET
-+ * EOPNOTSUPP System does not support DIOCGSECTORSIZE ioctl
-+ * ENOTTY @dev is a file or a device not supporting DIOCGSECTORSIZE
- */
- int ntfs_device_sector_size_get(struct ntfs_device *dev)
- {
-@@ -737,13 +749,13 @@
- errno = EINVAL;
- return -1;
- }
--#ifdef BLKSSZGET
-+#ifdef DIOCGSECTORSIZE
- {
-- int sect_size = 0;
-+ size_t sect_size = 0;
-
-- if (!dev->d_ops->ioctl(dev, BLKSSZGET, &sect_size)) {
-- ntfs_log_debug("BLKSSZGET sector size = %d bytes\n",
-- sect_size);
-+ if (!dev->d_ops->ioctl(dev, DIOCGSECTORSIZE, &sect_size)) {
-+ ntfs_log_debug("DIOCGSECTORSIZE sector size = %d bytes\n",
-+ (int)sect_size);
- return sect_size;
- }
- }
diff --git a/sysutils/ntfsprogs/files/patch-libntfs-device_io.c b/sysutils/ntfsprogs/files/patch-libntfs-device_io.c
deleted file mode 100644
index 5ae783f17f0f..000000000000
--- a/sysutils/ntfsprogs/files/patch-libntfs-device_io.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- libntfs/device_io.c.orig 2007-09-26 15:28:34.000000000 -0300
-+++ libntfs/device_io.c 2008-08-10 20:27:34.000000000 -0300
-@@ -28,11 +28,6 @@
- /* On Cygwin; use Win32 low level device operations. */
- #include "win32_io.c"
-
--#elif defined(__FreeBSD__)
--
--/* On FreeBSD; need to use sector aligned i/o. */
--#include "freebsd_io.c"
--
- #else
-
- /*
diff --git a/sysutils/ntfsprogs/files/patch-libntfs-unistr.c b/sysutils/ntfsprogs/files/patch-libntfs-unistr.c
deleted file mode 100644
index d2cb32d40d0b..000000000000
--- a/sysutils/ntfsprogs/files/patch-libntfs-unistr.c
+++ /dev/null
@@ -1,138 +0,0 @@
---- libntfs/unistr.c.orig 2007-09-26 20:28:34.000000000 +0200
-+++ libntfs/unistr.c 2010-03-24 16:01:11.000000000 +0100
-@@ -640,86 +640,64 @@
- * ntfs_upcase_table_build() builds the default upcase table for NTFS and
- * stores it in the caller supplied buffer @uc of size @uc_len.
- *
-- * The generated $UpCase table is the one used by Windows Vista.
-+ * The generated $UpCase table is the one used by Windows XP.
- *
- * Note, @uc_len must be at least 128kiB in size or bad things will happen!
- */
- void ntfs_upcase_table_build(ntfschar *uc, u32 uc_len)
- {
-- /*
-- * "Start" is inclusive and "End" is exclusive, every value has the
-- * value of "Add" added to it.
-- */
-- static int add[][3] = { /* Start, End, Add */
-- {0x0061, 0x007b, -32}, {0x00e0, 0x00f7, -32}, {0x00f8, 0x00ff, -32},
-- {0x0256, 0x0258, -205}, {0x028a, 0x028c, -217}, {0x037b, 0x037e, 130},
-- {0x03ac, 0x03ad, -38}, {0x03ad, 0x03b0, -37}, {0x03b1, 0x03c2, -32},
-- {0x03c2, 0x03c3, -31}, {0x03c3, 0x03cc, -32}, {0x03cc, 0x03cd, -64},
-- {0x03cd, 0x03cf, -63}, {0x0430, 0x0450, -32}, {0x0450, 0x0460, -80},
-- {0x0561, 0x0587, -48}, {0x1f00, 0x1f08, 8}, {0x1f10, 0x1f16, 8},
-- {0x1f20, 0x1f28, 8}, {0x1f30, 0x1f38, 8}, {0x1f40, 0x1f46, 8},
-- {0x1f51, 0x1f52, 8}, {0x1f53, 0x1f54, 8}, {0x1f55, 0x1f56, 8},
-- {0x1f57, 0x1f58, 8}, {0x1f60, 0x1f68, 8}, {0x1f70, 0x1f72, 74},
-- {0x1f72, 0x1f76, 86}, {0x1f76, 0x1f78, 100}, {0x1f78, 0x1f7a, 128},
-- {0x1f7a, 0x1f7c, 112}, {0x1f7c, 0x1f7e, 126}, {0x1f80, 0x1f88, 8},
-- {0x1f90, 0x1f98, 8}, {0x1fa0, 0x1fa8, 8}, {0x1fb0, 0x1fb2, 8},
-- {0x1fb3, 0x1fb4, 9}, {0x1fcc, 0x1fcd, -9}, {0x1fd0, 0x1fd2, 8},
-- {0x1fe0, 0x1fe2, 8}, {0x1fe5, 0x1fe6, 7}, {0x1ffc, 0x1ffd, -9},
-- {0x2170, 0x2180, -16}, {0x24d0, 0x24ea, -26}, {0x2c30, 0x2c5f, -48},
-- {0x2d00, 0x2d26, -7264}, {0xff41, 0xff5b, -32}, {0}
-+ static int uc_run_table[][3] = { /* Start, End, Add */
-+ {0x0061, 0x007B, -32}, {0x0451, 0x045D, -80}, {0x1F70, 0x1F72, 74},
-+ {0x00E0, 0x00F7, -32}, {0x045E, 0x0460, -80}, {0x1F72, 0x1F76, 86},
-+ {0x00F8, 0x00FF, -32}, {0x0561, 0x0587, -48}, {0x1F76, 0x1F78, 100},
-+ {0x0256, 0x0258, -205}, {0x1F00, 0x1F08, 8}, {0x1F78, 0x1F7A, 128},
-+ {0x028A, 0x028C, -217}, {0x1F10, 0x1F16, 8}, {0x1F7A, 0x1F7C, 112},
-+ {0x03AC, 0x03AD, -38}, {0x1F20, 0x1F28, 8}, {0x1F7C, 0x1F7E, 126},
-+ {0x03AD, 0x03B0, -37}, {0x1F30, 0x1F38, 8}, {0x1FB0, 0x1FB2, 8},
-+ {0x03B1, 0x03C2, -32}, {0x1F40, 0x1F46, 8}, {0x1FD0, 0x1FD2, 8},
-+ {0x03C2, 0x03C3, -31}, {0x1F51, 0x1F52, 8}, {0x1FE0, 0x1FE2, 8},
-+ {0x03C3, 0x03CC, -32}, {0x1F53, 0x1F54, 8}, {0x1FE5, 0x1FE6, 7},
-+ {0x03CC, 0x03CD, -64}, {0x1F55, 0x1F56, 8}, {0x2170, 0x2180, -16},
-+ {0x03CD, 0x03CF, -63}, {0x1F57, 0x1F58, 8}, {0x24D0, 0x24EA, -26},
-+ {0x0430, 0x0450, -32}, {0x1F60, 0x1F68, 8}, {0xFF41, 0xFF5B, -32},
-+ {0}
- };
-- /*
-- * "Start" is exclusive and "End" is inclusive, every second value is
-- * decremented by one.
-- */
-- static int skip_dec[][2] = { /* Start, End */
-- {0x0100, 0x012f}, {0x0132, 0x0137}, {0x0139, 0x0149}, {0x014a, 0x0178},
-- {0x0179, 0x017e}, {0x01a0, 0x01a6}, {0x01b3, 0x01b7}, {0x01cd, 0x01dd},
-- {0x01de, 0x01ef}, {0x01f4, 0x01f5}, {0x01f8, 0x01f9}, {0x01fa, 0x0220},
-- {0x0222, 0x0234}, {0x023b, 0x023c}, {0x0241, 0x0242}, {0x0246, 0x024f},
-- {0x03d8, 0x03ef}, {0x03f7, 0x03f8}, {0x03fa, 0x03fb}, {0x0460, 0x0481},
-- {0x048a, 0x04bf}, {0x04c1, 0x04c4}, {0x04c5, 0x04c8}, {0x04c9, 0x04ce},
-- {0x04ec, 0x04ed}, {0x04d0, 0x04eb}, {0x04ee, 0x04f5}, {0x04f6, 0x0513},
-- {0x1e00, 0x1e95}, {0x1ea0, 0x1ef9}, {0x2183, 0x2184}, {0x2c60, 0x2c61},
-- {0x2c67, 0x2c6c}, {0x2c75, 0x2c76}, {0x2c80, 0x2ce3}, {0}
-+ static int uc_dup_table[][2] = { /* Start, End */
-+ {0x0100, 0x012F}, {0x01A0, 0x01A6}, {0x03E2, 0x03EF}, {0x04CB, 0x04CC},
-+ {0x0132, 0x0137}, {0x01B3, 0x01B7}, {0x0460, 0x0481}, {0x04D0, 0x04EB},
-+ {0x0139, 0x0149}, {0x01CD, 0x01DD}, {0x0490, 0x04BF}, {0x04EE, 0x04F5},
-+ {0x014A, 0x0178}, {0x01DE, 0x01EF}, {0x04BF, 0x04BF}, {0x04F8, 0x04F9},
-+ {0x0179, 0x017E}, {0x01F4, 0x01F5}, {0x04C1, 0x04C4}, {0x1E00, 0x1E95},
-+ {0x018B, 0x018B}, {0x01FA, 0x0218}, {0x04C7, 0x04C8}, {0x1EA0, 0x1EF9},
-+ {0}
- };
-- /*
-- * Set the Unicode character at offset "Offset" to "Value". Note,
-- * "Value" is host endian.
-- */
-- static int set[][2] = { /* Offset, Value */
-- {0x00ff, 0x0178}, {0x0180, 0x0243}, {0x0183, 0x0182}, {0x0185, 0x0184},
-- {0x0188, 0x0187}, {0x018c, 0x018b}, {0x0192, 0x0191}, {0x0195, 0x01f6},
-- {0x0199, 0x0198}, {0x019a, 0x023d}, {0x019e, 0x0220}, {0x01a8, 0x01a7},
-- {0x01ad, 0x01ac}, {0x01b0, 0x01af}, {0x01b9, 0x01b8}, {0x01bd, 0x01bc},
-- {0x01bf, 0x01f7}, {0x01c6, 0x01c4}, {0x01c9, 0x01c7}, {0x01cc, 0x01ca},
-- {0x01dd, 0x018e}, {0x01f3, 0x01f1}, {0x023a, 0x2c65}, {0x023e, 0x2c66},
-- {0x0253, 0x0181}, {0x0254, 0x0186}, {0x0259, 0x018f}, {0x025b, 0x0190},
-- {0x0260, 0x0193}, {0x0263, 0x0194}, {0x0268, 0x0197}, {0x0269, 0x0196},
-- {0x026b, 0x2c62}, {0x026f, 0x019c}, {0x0272, 0x019d}, {0x0275, 0x019f},
-- {0x027d, 0x2c64}, {0x0280, 0x01a6}, {0x0283, 0x01a9}, {0x0288, 0x01ae},
-- {0x0289, 0x0244}, {0x028c, 0x0245}, {0x0292, 0x01b7}, {0x03f2, 0x03f9},
-- {0x04cf, 0x04c0}, {0x1d7d, 0x2c63}, {0x214e, 0x2132}, {0}
-+ static int uc_byte_table[][2] = { /* Offset, Value */
-+ {0x00FF, 0x0178}, {0x01AD, 0x01AC}, {0x01F3, 0x01F1}, {0x0269, 0x0196},
-+ {0x0183, 0x0182}, {0x01B0, 0x01AF}, {0x0253, 0x0181}, {0x026F, 0x019C},
-+ {0x0185, 0x0184}, {0x01B9, 0x01B8}, {0x0254, 0x0186}, {0x0272, 0x019D},
-+ {0x0188, 0x0187}, {0x01BD, 0x01BC}, {0x0259, 0x018F}, {0x0275, 0x019F},
-+ {0x018C, 0x018B}, {0x01C6, 0x01C4}, {0x025B, 0x0190}, {0x0283, 0x01A9},
-+ {0x0192, 0x0191}, {0x01C9, 0x01C7}, {0x0260, 0x0193}, {0x0288, 0x01AE},
-+ {0x0199, 0x0198}, {0x01CC, 0x01CA}, {0x0263, 0x0194}, {0x0292, 0x01B7},
-+ {0x01A8, 0x01A7}, {0x01DD, 0x018E}, {0x0268, 0x0197},
-+ {0}
- };
-- unsigned i, r;
-+ int i, r;
-
-- memset(uc, 0, uc_len);
-- uc_len /= 2;
-- /* Start with a one-to-one mapping, i.e. no upcasing happens at all. */
-- for (i = 0; i < uc_len; i++)
-- uc[i] = cpu_to_le16(i);
-- /* Adjust specified runs by the specified amount. */
-- for (r = 0; add[r][0]; r++)
-- for (i = add[r][0]; i < add[r][1]; i++)
-- uc[i] = cpu_to_le16(le16_to_cpu(uc[i]) + add[r][2]);
-- /* Decrement every second value in specified runs. */
-- for (r = 0; skip_dec[r][0]; r++)
-- for (i = skip_dec[r][0]; i < skip_dec[r][1];
-- i += 2)
-- uc[i + 1] = cpu_to_le16(le16_to_cpu(uc[i + 1]) - 1);
-- /* Set specified characters to specified values. */
-- for (r = 0; set[r][0]; r++)
-- uc[set[r][0]] = cpu_to_le16(set[r][1]);
-+ memset((char*)uc, 0, uc_len);
-+ uc_len >>= 1;
-+ if (uc_len > 65536)
-+ uc_len = 65536;
-+ for (i = 0; (u32)i < uc_len; i++)
-+ uc[i] = i;
-+ for (r = 0; uc_run_table[r][0]; r++)
-+ for (i = uc_run_table[r][0]; i < uc_run_table[r][1]; i++)
-+ uc[i] += uc_run_table[r][2];
-+ for (r = 0; uc_dup_table[r][0]; r++)
-+ for (i = uc_dup_table[r][0]; i < uc_dup_table[r][1]; i += 2)
-+ uc[i + 1]--;
-+ for (r = 0; uc_byte_table[r][0]; r++)
-+ uc[uc_byte_table[r][0]] = uc_byte_table[r][1];
- }
-
- /**
diff --git a/sysutils/ntfsprogs/files/patch-libntfs-unix_io.c b/sysutils/ntfsprogs/files/patch-libntfs-unix_io.c
deleted file mode 100644
index befe6aa3fe63..000000000000
--- a/sysutils/ntfsprogs/files/patch-libntfs-unix_io.c
+++ /dev/null
@@ -1,611 +0,0 @@
---- ./libntfs/unix_io.c.orig 2007-09-26 15:28:34.000000000 -0300
-+++ ./libntfs/unix_io.c 2008-08-10 17:44:16.000000000 -0300
-@@ -54,19 +54,112 @@
- #include <linux/fd.h>
- #endif
-
-+/*
-+ * The following build definitions are available:
-+ * USE_ALIGNED_IO - All I/O is done by blocks.
-+ * USE_UBLIO - Use the ublio user space cache library.
-+ * USE_LOCK - Lock the device/file when mounted.
-+ */
-+
-+#ifdef __FreeBSD__
-+#include <sys/disk.h>
-+#define USE_ALIGNED_IO 1
-+#endif
-+
-+#if USE_UBLIO
-+#include <sys/uio.h>
-+#endif
-+
- #include "types.h"
- #include "mst.h"
- #include "debug.h"
- #include "device.h"
- #include "logging.h"
-
--#define DEV_FD(dev) (*(int *)dev->d_private)
-+#if USE_UBLIO
-+#define UBLIO_USE_API 1
-+#include "ublio.h"
-+#define UBLIO_DEFAULT_ENABLE 1
-+#define UBLIO_DEFAULT_BLOCKSIZE 262144
-+#define UBLIO_DEFAULT_ITEMS 64
-+#define UBLIO_DEFAULT_GRACE 32
-+#define UBLIO_DEFAULT_SYNC_IO 0
-+#endif
-+
-+#if USE_ALIGNED_IO
-+#define RAW_IO_ALIGNED(dev, offset, count) \
-+ (DEV_HANDLE(dev)->block_size == 0 || \
-+ ((offset) % DEV_HANDLE(dev)->block_size == 0 && \
-+ (count) % DEV_HANDLE(dev)->block_size == 0))
-+#define RAW_IO_ALIGN(dev, offset) \
-+ ((offset) / DEV_HANDLE(dev)->block_size * DEV_HANDLE(dev)->block_size)
-+#define RAW_IO_MAX_SIZE (128 * 1024 * 1024)
-+#endif
-+
-+struct unix_filehandle {
-+ int fd;
-+#if USE_ALIGNED_IO
-+ s64 pos;
-+ s32 block_size;
-+ s64 media_size;
-+#endif
-+#if USE_UBLIO
-+ ublio_filehandle_t ublio_fh;
-+#endif
-+};
-+
-+#define DEV_HANDLE(dev) ((struct unix_filehandle *)dev->d_private)
-+#define DEV_FD(dev) (DEV_HANDLE(dev)->fd)
-
- /* Define to nothing if not present on this system. */
- #ifndef O_EXCL
- # define O_EXCL 0
- #endif
-
-+#if USE_ALIGNED_IO
-+/**
-+ * Get block_size and media_size
-+ */
-+static int
-+raw_io_get_size(struct ntfs_device *dev)
-+{
-+ int bs;
-+ off_t ms;
-+ struct stat sb;
-+
-+ if (fstat(DEV_FD(dev), &sb) < 0) {
-+ ntfs_log_perror("Failed to stat '%s'", dev->d_name);
-+ return -1;
-+ }
-+
-+ if (S_ISREG(sb.st_mode)) {
-+ DEV_HANDLE(dev)->media_size = sb.st_size;
-+ ntfs_log_trace("%s: regular file (media_size %lld)\n",
-+ dev->d_name, DEV_HANDLE(dev)->media_size);
-+ if (getenv("FORCE_ALIGNED_IO"))
-+ DEV_HANDLE(dev)->block_size = 512;
-+ return 0;
-+ }
-+
-+ if (ioctl(DEV_FD(dev), DIOCGSECTORSIZE, &bs) < 0) {
-+ ntfs_log_perror("Failed to ioctl(DIOCGSECTORSIZE) '%s'",
-+ dev->d_name);
-+ return -1;
-+ }
-+ DEV_HANDLE(dev)->block_size = bs;
-+ ntfs_log_trace("%s: block size %d\n", dev->d_name, bs);
-+
-+ if (ioctl(DEV_FD(dev), DIOCGMEDIASIZE, &ms) < 0) {
-+ ntfs_log_perror("Failed to ioctl(DIOCGMEDIASIZE) '%s'",
-+ dev->d_name);
-+ return -1;
-+ }
-+ DEV_HANDLE(dev)->media_size = ms;
-+ ntfs_log_trace("%s: media size %lld\n", dev->d_name, ms);
-+ return 0;
-+}
-+#endif
-+
- /**
- * ntfs_device_unix_io_open - Open a device and lock it exclusively
- * @dev:
-@@ -78,24 +171,76 @@
- */
- static int ntfs_device_unix_io_open(struct ntfs_device *dev, int flags)
- {
-+#if USE_ALIGNED_IO
-+ size_t sectsize;
-+#endif
-+#if USE_LOCK
- struct flock flk;
-+#endif
- struct stat sbuf;
-- int err;
-+ struct unix_filehandle *ufh;
-+ int err = 0;
-+#if USE_UBLIO
-+ struct ublio_param up;
-+ int use_ublio = 0;
-+ char *xenv, *xgarbage;
-+#endif
-
- if (NDevOpen(dev)) {
- errno = EBUSY;
- return -1;
- }
-- if (!(dev->d_private = ntfs_malloc(sizeof(int))))
-+
-+ ufh = malloc(sizeof(*ufh));
-+ if (!ufh)
- return -1;
-- *(int*)dev->d_private = open(dev->d_name, flags);
-- if (*(int*)dev->d_private == -1) {
-+ dev->d_private = ufh;
-+#if USE_ALIGNED_IO
-+ ufh->fd = -1;
-+ ufh->pos = 0;
-+ ufh->block_size = 0;
-+ ufh->media_size = 0;
-+#endif
-+
-+ ufh->fd = open(dev->d_name, flags);
-+ if (ufh->fd == -1) {
- err = errno;
- goto err_out;
- }
- /* Setup our read-only flag. */
- if ((flags & O_RDWR) != O_RDWR)
- NDevSetReadOnly(dev);
-+#if USE_UBLIO
-+ ufh->ublio_fh = NULL;
-+ if ((xenv = getenv("NTFS_USE_UBLIO")) &&
-+ (xenv[0] == '0' || xenv[0] == '1') && xenv[1] == '\0')
-+ use_ublio = (xenv[0] == '1');
-+ else
-+ use_ublio = UBLIO_DEFAULT_ENABLE;
-+ if ((xenv = getenv("UBLIO_BLOCKSIZE")))
-+ up.up_blocksize = strtoul(xenv, &xgarbage, 10);
-+ if (!xenv || *xgarbage != '\0')
-+ up.up_blocksize = UBLIO_DEFAULT_BLOCKSIZE;
-+ if ((xenv = getenv("UBLIO_ITEMS")))
-+ up.up_items = strtoul(xenv, &xgarbage, 10);
-+ if (!xenv || *xgarbage != '\0')
-+ up.up_items = UBLIO_DEFAULT_ITEMS;
-+ if ((xenv = getenv("UBLIO_GRACE")))
-+ up.up_grace = strtoul(xenv, &xgarbage, 10);
-+ if (!xenv || *xgarbage != '\0')
-+ up.up_grace = UBLIO_DEFAULT_GRACE;
-+ if ((xenv = getenv("UBLIO_SYNC_IO")) &&
-+ (xenv[0] == '0' || xenv[0] == '1') && xenv[1] == '\0')
-+ up.up_sync_io = (xenv[0] == '1');
-+ else
-+ up.up_sync_io = UBLIO_DEFAULT_SYNC_IO;
-+ up.up_priv = &ufh->fd;
-+ up.up_pread = NULL;
-+ up.up_preadv = NULL;
-+ up.up_pwrite = NULL;
-+ up.up_pwritev = NULL;
-+#endif
-+#if USE_LOCK
- /* Acquire exclusive (mandatory) lock on the whole device. */
- memset(&flk, 0, sizeof(flk));
- if (NDevReadOnly(dev))
-@@ -104,7 +249,21 @@
- flk.l_type = F_WRLCK;
- flk.l_whence = SEEK_SET;
- flk.l_start = flk.l_len = 0LL;
-- if (fcntl(DEV_FD(dev), F_SETLK, &flk)) {
-+#endif
-+#if USE_ALIGNED_IO
-+ if (raw_io_get_size(dev) < 0) {
-+ err = errno;
-+ close(DEV_FD(dev));
-+ goto err_out;
-+ }
-+ if (S_ISBLK(sbuf.st_mode) || S_ISCHR(sbuf.st_mode))
-+ NDevSetBlock(dev);
-+#else
-+ if (S_ISBLK(sbuf.st_mode))
-+ NDevSetBlock(dev);
-+#endif /* USE_ALIGNED_IO */
-+#if USE_LOCK
-+ if (!NDevBlock(dev) && fcntl(DEV_FD(dev), F_SETLK, &flk)) {
- err = errno;
- ntfs_log_debug("ntfs_device_unix_io_open: Could not lock %s "
- "for %s\n", dev->d_name, NDevReadOnly(dev) ?
-@@ -114,6 +273,16 @@
- "Could not close %s", dev->d_name);
- goto err_out;
- }
-+#endif
-+#if USE_UBLIO
-+ if (use_ublio) {
-+ ufh->ublio_fh = ublio_open(&up);
-+ if (!ufh->ublio_fh) {
-+ close(DEV_FD(dev));
-+ goto err_out;
-+ }
-+ }
-+#endif
- /* Determine if device is a block device or not, ignoring errors. */
- if (!fstat(DEV_FD(dev), &sbuf) && S_ISBLK(sbuf.st_mode))
- NDevSetBlock(dev);
-@@ -137,7 +306,10 @@
- */
- static int ntfs_device_unix_io_close(struct ntfs_device *dev)
- {
-+ /* XXX no error if fysnc, fcntl (ublio_close) fails? */
-+#if USE_LOCK
- struct flock flk;
-+#endif
-
- if (!NDevOpen(dev)) {
- errno = EBADF;
-@@ -145,14 +317,20 @@
- }
- if (NDevDirty(dev))
- fsync(DEV_FD(dev));
-+#if USE_LOCK
- /* Release exclusive (mandatory) lock on the whole device. */
- memset(&flk, 0, sizeof(flk));
- flk.l_type = F_UNLCK;
- flk.l_whence = SEEK_SET;
- flk.l_start = flk.l_len = 0LL;
-- if (fcntl(DEV_FD(dev), F_SETLK, &flk))
-+ if (!NDevBlock(dev) && fcntl(DEV_FD(dev), F_SETLK, &flk))
- ntfs_log_perror("ntfs_device_unix_io_close: Warning: Could not "
- "unlock %s", dev->d_name);
-+#endif
-+#if USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh)
-+ ublio_close(DEV_HANDLE(dev)->ublio_fh);
-+#endif
- /* Close the file descriptor and clear our open flag. */
- if (close(DEV_FD(dev)))
- return -1;
-@@ -175,9 +353,234 @@
- static s64 ntfs_device_unix_io_seek(struct ntfs_device *dev, s64 offset,
- int whence)
- {
-+#if USE_ALIGNED_IO
-+ s64 abs_pos;
-+
-+ ntfs_log_trace("seek offset = 0x%llx, whence = %d.\n", offset, whence);
-+ switch (whence) {
-+ case SEEK_SET:
-+ abs_pos = offset;
-+ break;
-+
-+ case SEEK_CUR:
-+ abs_pos = DEV_HANDLE(dev)->pos + offset;
-+ break;
-+
-+ case SEEK_END:
-+ abs_pos = DEV_HANDLE(dev)->media_size + offset;
-+ break;
-+
-+ default:
-+ ntfs_log_trace("Wrong mode %d.\n", whence);
-+ errno = EINVAL;
-+ return -1;
-+ }
-+
-+ if (abs_pos < 0 || abs_pos > DEV_HANDLE(dev)->media_size) {
-+ ntfs_log_trace("Seeking outsize seekable area.\n");
-+ errno = EINVAL;
-+ return -1;
-+ }
-+ DEV_HANDLE(dev)->pos = abs_pos;
-+ return abs_pos;
-+#else
- return lseek(DEV_FD(dev), offset, whence);
-+#endif
- }
-
-+#if USE_ALIGNED_IO
-+
-+#if USE_UBLIO
-+#define pread_wrap(fd, buf, count, off) \
-+ (DEV_HANDLE(fd)->ublio_fh ? \
-+ ublio_pread(DEV_HANDLE(fd)->ublio_fh, buf, count, off) : \
-+ pread(DEV_FD(fd), buf, count, off))
-+#define pwrite_wrap(fd, buf, count, off) \
-+ (DEV_HANDLE(fd)->ublio_fh ? \
-+ ublio_pwrite(DEV_HANDLE(fd)->ublio_fh, buf, count, off) : \
-+ pwrite(DEV_FD(fd), buf, count, off))
-+#else
-+#define pread_wrap(fd, buf, count, off) \
-+ pread(DEV_FD(fd), buf, count, off)
-+#define pwrite_wrap(fd, buf, count, off) \
-+ pwrite(DEV_FD(fd), buf, count, off)
-+#endif
-+
-+/**
-+ * aligned_pread - Perform an aligned positioned read from the device
-+ */
-+static s64 aligned_pread(struct ntfs_device *dev, void *buf, s64 count, s64 offset)
-+{
-+ s64 start, start_aligned;
-+ s64 end, end_aligned;
-+ size_t count_aligned;
-+ char *buf_aligned;
-+ ssize_t nr;
-+
-+ /* short-circuit for regular files */
-+ start = offset;
-+ if (count > RAW_IO_MAX_SIZE)
-+ count = RAW_IO_MAX_SIZE;
-+ if (RAW_IO_ALIGNED(dev, start, count))
-+ return pread_wrap(dev, buf, count, start);
-+
-+ /*
-+ * +- start_aligned +- end_aligned
-+ * | |
-+ * | +- start +- end |
-+ * v v v v
-+ * |----------|----------|----------|
-+ * ^ ^
-+ * +----- count ------+
-+ * ^ ^
-+ * +-------- count_aligned ---------+
-+ */
-+ start_aligned = RAW_IO_ALIGN(dev, start);
-+ end = start + count;
-+ end_aligned = RAW_IO_ALIGN(dev, end) +
-+ (RAW_IO_ALIGNED(dev, end, 0) ? 0 : DEV_HANDLE(dev)->block_size);
-+ count_aligned = end_aligned - start_aligned;
-+ ntfs_log_trace(
-+ "%s: count = 0x%llx/0x%x, start = 0x%llx/0x%llx, end = 0x%llx/0x%llx\n",
-+ dev->d_name, count, count_aligned,
-+ start, start_aligned, end, end_aligned);
-+
-+ /* allocate buffer */
-+ buf_aligned = malloc(count_aligned);
-+ if (buf_aligned == NULL) {
-+ ntfs_log_trace("malloc(%d) failed\n", count_aligned);
-+ return -1;
-+ }
-+
-+ /* read aligned data */
-+ nr = pread_wrap(dev, buf_aligned, count_aligned, start_aligned);
-+ if (nr == 0)
-+ return 0;
-+ if (nr < 0 || nr < start - start_aligned) {
-+ free(buf_aligned);
-+ return -1;
-+ }
-+
-+ /* copy out */
-+ memcpy(buf, buf_aligned + (start - start_aligned), count);
-+ free(buf_aligned);
-+
-+ nr -= start - start_aligned;
-+ if (nr > count)
-+ nr = count;
-+ return nr;
-+}
-+
-+/**
-+ * aligned_pwrite - Perform an aligned positioned write from the device
-+ */
-+static s64 aligned_pwrite(struct ntfs_device *dev, void *buf, s64 count, s64 offset)
-+{
-+ s64 start, start_aligned;
-+ s64 end, end_aligned;
-+ size_t count_aligned;
-+ char *buf_aligned;
-+ ssize_t nw;
-+
-+ if (NDevReadOnly(dev)) {
-+ errno = EROFS;
-+ return -1;
-+ }
-+ NDevSetDirty(dev);
-+
-+ /* short-circuit for regular files */
-+ start = offset;
-+ if (count > RAW_IO_MAX_SIZE)
-+ count = RAW_IO_MAX_SIZE;
-+ if (RAW_IO_ALIGNED(dev, start, count))
-+ return pwrite_wrap(dev, buf, count, start);
-+
-+ /*
-+ * +- start_aligned +- end_aligned
-+ * | |
-+ * | +- start +- end |
-+ * v v v v
-+ * |----------|----------|----------|
-+ * ^ ^
-+ * +----- count ------+
-+ * ^ ^
-+ * +-------- count_aligned ---------+
-+ */
-+ start_aligned = RAW_IO_ALIGN(dev, start);
-+ end = start + count;
-+ end_aligned = RAW_IO_ALIGN(dev, end) +
-+ (RAW_IO_ALIGNED(dev, end, 0) ? 0 : DEV_HANDLE(dev)->block_size);
-+ count_aligned = end_aligned - start_aligned;
-+ ntfs_log_trace(
-+ "%s: count = 0x%llx/0x%x, start = 0x%llx/0x%llx, end = 0x%llx/0x%llx\n",
-+ dev->d_name, count, count_aligned,
-+ start, start_aligned, end, end_aligned);
-+
-+ /* allocate buffer */
-+ buf_aligned = malloc(count_aligned);
-+ if (buf_aligned == NULL) {
-+ ntfs_log_trace("malloc(%d) failed\n", count_aligned);
-+ return -1;
-+ }
-+
-+ /* read aligned lead-in */
-+ if (pread_wrap(dev, buf_aligned, DEV_HANDLE(dev)->block_size, start_aligned) != DEV_HANDLE(dev)->block_size) {
-+ ntfs_log_trace("read lead-in failed\n");
-+ free(buf_aligned);
-+ return -1;
-+ }
-+
-+ /* read aligned lead-out */
-+ if (end != end_aligned && count_aligned > DEV_HANDLE(dev)->block_size) {
-+ if (pread_wrap(dev, buf_aligned + count_aligned - DEV_HANDLE(dev)->block_size, DEV_HANDLE(dev)->block_size, end_aligned - DEV_HANDLE(dev)->block_size) != DEV_HANDLE(dev)->block_size) {
-+ ntfs_log_trace("read lead-out failed\n");
-+ free(buf_aligned);
-+ return -1;
-+ }
-+ }
-+
-+ /* copy data to write */
-+ memcpy(buf_aligned + (start - start_aligned), buf, count);
-+
-+ /* write aligned data */
-+ nw = pwrite_wrap(dev, buf_aligned, count_aligned, start_aligned);
-+ free(buf_aligned);
-+ if (nw < 0 || nw < start - start_aligned)
-+ return -1;
-+
-+ nw -= start - start_aligned;
-+ if (nw > count)
-+ nw = count;
-+ return nw;
-+}
-+
-+/**
-+ * aligned_read - Perform an aligned read from the device
-+ */
-+static s64 aligned_read(struct ntfs_device *dev, void *buf, s64 count)
-+{
-+ s64 nr = aligned_pread(dev, buf, count, DEV_HANDLE(dev)->pos);
-+ if (nr > 0)
-+ DEV_HANDLE(dev)->pos += nr;
-+ return nr;
-+}
-+
-+/**
-+ * aligned_write - Perform an aligned read from the device
-+ */
-+static s64 aligned_write(struct ntfs_device *dev, void *buf, s64 count)
-+{
-+ s64 nw = aligned_pwrite(dev, buf, count, DEV_HANDLE(dev)->pos);
-+ if (nw > 0)
-+ DEV_HANDLE(dev)->pos += nw;
-+ return nw;
-+}
-+
-+#undef ublio_pwrite
-+#undef ublio_pread
-+
-+#endif
-+
- /**
- * ntfs_device_unix_io_read - Read from the device, from the current location
- * @dev:
-@@ -191,6 +594,29 @@
- static s64 ntfs_device_unix_io_read(struct ntfs_device *dev, void *buf,
- s64 count)
- {
-+#if USE_ALIGNED_IO
-+ return aligned_read(dev, buf, count);
-+#elif USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh) {
-+ off_t offset;
-+ ssize_t res;
-+
-+ offset = lseek(DEV_FD(dev), 0, SEEK_CUR);
-+ if (offset == -1)
-+ return -1;
-+
-+ res = ublio_pread(DEV_HANDLE(dev)->ublio_fh, buf, count,
-+ offset);
-+ if (res == -1)
-+ return -1;
-+
-+ if (lseek(DEV_FD(dev), res, SEEK_CUR) == -1)
-+ return -1;
-+
-+ return res;
-+ }
-+#endif
-+
- return read(DEV_FD(dev), buf, count);
- }
-
-@@ -212,6 +638,28 @@
- return -1;
- }
- NDevSetDirty(dev);
-+#if USE_ALIGNED_IO
-+ return aligned_write(dev, buf, count);
-+#elif USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh)
-+ off_t offset;
-+ ssize_t res;
-+
-+ offset = lseek(DEV_FD(dev), 0, SEEK_CUR);
-+ if (offset == -1)
-+ return -1;
-+
-+ res = ublio_pwrite(DEV_HANDLE(dev)->ublio_fh, (void *)buf,
-+ count, offset);
-+ if (res == -1)
-+ return -1;
-+
-+ if (lseek(DEV_FD(dev), res, SEEK_CUR) == -1)
-+ return -1;
-+
-+ return res;
-+ }
-+#endif
- return write(DEV_FD(dev), buf, count);
- }
-
-@@ -229,6 +677,13 @@
- static s64 ntfs_device_unix_io_pread(struct ntfs_device *dev, void *buf,
- s64 count, s64 offset)
- {
-+#if USE_ALIGNED_IO
-+ return aligned_pread(dev, buf, count, offset);
-+#elif USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh)
-+ return ublio_pread(DEV_HANDLE(dev)->ublio_fh, buf, count,
-+ offset);
-+#endif
- return pread(DEV_FD(dev), buf, count, offset);
- }
-
-@@ -251,6 +706,13 @@
- return -1;
- }
- NDevSetDirty(dev);
-+#if USE_ALIGNED_IO
-+ return aligned_pwrite(dev, buf, count, offset);
-+#elif USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh)
-+ return ublio_pwrite(DEV_HANDLE(dev)->ublio_fh, (void *)buf,
-+ count, offset);
-+#endif
- return pwrite(DEV_FD(dev), buf, count, offset);
- }
-
-@@ -264,8 +726,17 @@
- */
- static int ntfs_device_unix_io_sync(struct ntfs_device *dev)
- {
-+ int res;
-+
- if (!NDevReadOnly(dev) && NDevDirty(dev)) {
-- int res = fsync(DEV_FD(dev));
-+#if USE_UBLIO
-+ if (DEV_HANDLE(dev)->ublio_fh)
-+ res = ublio_fsync(DEV_HANDLE(dev)->ublio_fh);
-+ if (!DEV_HANDLE(dev)->ublio_fh || !res)
-+ res = fsync(DEV_FD(dev));
-+#else
-+ res = fsync(DEV_FD(dev));
-+#endif
- if (!res)
- NDevClearDirty(dev);
- return res;
diff --git a/sysutils/ntfsprogs/files/patch-ntfsprogs-Makefile.in b/sysutils/ntfsprogs/files/patch-ntfsprogs-Makefile.in
deleted file mode 100644
index e435a238832a..000000000000
--- a/sysutils/ntfsprogs/files/patch-ntfsprogs-Makefile.in
+++ /dev/null
@@ -1,21 +0,0 @@
---- ntfsprogs/Makefile.in.orig 2007-09-28 19:12:39.000000000 -0300
-+++ ntfsprogs/Makefile.in 2008-08-10 20:53:50.000000000 -0300
-@@ -1072,15 +1072,12 @@
-
- install-exec-hook:
- $(INSTALL) -d $(DESTDIR)/sbin
-- $(LN_S) -f $(sbindir)/mkntfs $(DESTDIR)/sbin/mkfs.ntfs
--@ENABLE_FUSE_TRUE@ $(LN_S) -f $(bindir)/ntfsmount $(DESTDIR)/sbin/mount.ntfs-fuse
--@ENABLE_FUSE_TRUE@ $(LN_S) -f $(bindir)/ntfsmount $(DESTDIR)/sbin/mount.fuse.ntfs
-+ $(INSTALL) -d $(DESTDIR)/usr/sbin
-+@ENABLE_FUSE_TRUE@ $(LN_S) -f $(bindir)/ntfsmount $(DESTDIR)/usr/sbin/mount_ntfs-fuse
-
- install-data-hook:
- $(INSTALL) -d $(DESTDIR)$(man8dir)
-- $(LN_S) -f mkntfs.8 $(DESTDIR)$(man8dir)/mkfs.ntfs.8
--@ENABLE_FUSE_TRUE@ $(LN_S) -f ntfsmount.8 $(DESTDIR)$(man8dir)/mount.ntfs-fuse.8
--@ENABLE_FUSE_TRUE@ $(LN_S) -f ntfsmount.8 $(DESTDIR)$(man8dir)/mount.fuse.ntfs.8
-+@ENABLE_FUSE_TRUE@ $(LN_S) -f ntfsmount.8 $(DESTDIR)$(man8dir)/mount_ntfs-fuse.8
-
- uninstall-local:
- $(RM) -f $(DESTDIR)/sbin/mkfs.ntfs
diff --git a/sysutils/ntfsprogs/files/patch-ntfsprogs-mkntfs.c b/sysutils/ntfsprogs/files/patch-ntfsprogs-mkntfs.c
deleted file mode 100644
index fc9c2c2935c4..000000000000
--- a/sysutils/ntfsprogs/files/patch-ntfsprogs-mkntfs.c
+++ /dev/null
@@ -1,31 +0,0 @@
---- ntfsprogs/mkntfs.c 2007-09-19 18:51:09.000000000 +0200
-+++ ntfsprogs/mkntfs.c 2010-03-16 17:26:42.000000000 +0100
-@@ -552,12 +552,16 @@
- total = 0LL;
- retry = 0;
- do {
-- bytes_written = dev->d_ops->write(dev, b, count);
-+ bytes_written = (long long)dev->d_ops->write(dev, b, count);
- if (bytes_written == -1LL) {
- retry = errno;
- ntfs_log_perror("Error writing to %s", dev->d_name);
- errno = retry;
- return bytes_written;
-+ } else if (bytes_written < 0) {
-+ errno = EINVAL;
-+ ntfs_log_error("Failed to write to device %s.\n", dev->d_name);
-+ return -1;
- } else if (!bytes_written) {
- retry++;
- } else {
-@@ -3072,8 +3076,8 @@
- goto done;
- }
-
-- if (!S_ISBLK(sbuf.st_mode)) {
-- ntfs_log_error("%s is not a block device.\n", vol->dev->d_name);
-+ if (!S_ISCHR(sbuf.st_mode)) {
-+ ntfs_log_error("%s is not a character device.\n", vol->dev->d_name);
- if (!opts.force) {
- ntfs_log_error("Refusing to make a filesystem here!\n");
- goto done;
diff --git a/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsclone.c b/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsclone.c
deleted file mode 100644
index 36ca73c353d2..000000000000
--- a/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsclone.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- ntfsprogs/ntfsclone.c Mon Jul 25 12:31:30 2005
-+++ ntfsprogs/ntfsclone.c Mon Jul 25 12:33:32 2005
-@@ -1080,9 +1080,9 @@
-
- static int device_offset_valid(int fd, s64 ofs)
- {
-- char ch;
-+ char ch[512];
-
-- if (lseek(fd, ofs, SEEK_SET) >= 0 && read(fd, &ch, 1) == 1)
-+ if (lseek(fd, ofs, SEEK_SET) >= 0 && read(fd, &ch, 512) > 0)
- return 0;
- return -1;
- }
diff --git a/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsresize.c b/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsresize.c
deleted file mode 100644
index 4fe8e98e33fe..000000000000
--- a/sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsresize.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- ntfsprogs/ntfsresize.c.orig Tue Feb 14 12:17:52 2006
-+++ ntfsprogs/ntfsresize.c Thu May 4 04:46:10 2006
-@@ -1974,6 +1974,11 @@
- err_exit("Resident attribute in $Bitmap isn't supported!\n");
-
- bm_bsize = nr_clusters_to_bitmap_byte_size(resize->new_volume_size);
-+ if(bm_bsize % 512 != 0) {
-+ s64 old_bm_bsize = bm_bsize;
-+ bm_bsize = (bm_bsize + 511) / 512 * 512;
-+ ntfs_log_verbose("adjusted bm_bsize: %lld->%lld\n", old_bm_bsize, bm_bsize);
-+ }
- nr_bm_clusters = rounded_up_division(bm_bsize, vol->cluster_size);
-
- if (resize->shrink) {
diff --git a/sysutils/ntfsprogs/files/pkg-message.in b/sysutils/ntfsprogs/files/pkg-message.in
deleted file mode 100644
index a620ce0e6403..000000000000
--- a/sysutils/ntfsprogs/files/pkg-message.in
+++ /dev/null
@@ -1,10 +0,0 @@
-==============================================================================
-
-Linux-NTFS has been installed, for information, known issues and how to report
-bugs see the FreeBSD README (describes FUSE and UBLIO options):
-
-%%DOCSDIR%%/README.FreeBSD
-
-Also see the official README (platform independent).
-
-==============================================================================