diff options
author | Rene Ladan <rene@FreeBSD.org> | 2016-12-31 17:43:48 +0000 |
---|---|---|
committer | Rene Ladan <rene@FreeBSD.org> | 2016-12-31 17:43:48 +0000 |
commit | 9a5bfc962bbbbd345ff5eeced6d2fb774c4da370 (patch) | |
tree | 41ae4943c79f0c5f3fae555b893e75352ad7ee19 /sysutils/ntfsprogs/files | |
parent | 77eed30703f4a6877dcb68ba4b79c633e9b71d4d (diff) | |
download | ports-9a5bfc962bbbbd345ff5eeced6d2fb774c4da370.tar.gz ports-9a5bfc962bbbbd345ff5eeced6d2fb774c4da370.zip |
Notes
Diffstat (limited to 'sysutils/ntfsprogs/files')
-rw-r--r-- | sysutils/ntfsprogs/files/README.FreeBSD | 150 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-libntfs-device.c | 155 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-libntfs-device_io.c | 14 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-libntfs-unistr.c | 138 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-libntfs-unix_io.c | 611 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-ntfsprogs-Makefile.in | 21 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-ntfsprogs-mkntfs.c | 31 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsclone.c | 14 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/patch-ntfsprogs-ntfsresize.c | 14 | ||||
-rw-r--r-- | sysutils/ntfsprogs/files/pkg-message.in | 10 |
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, §_size)) { -- ntfs_log_debug("BLKSSZGET sector size = %d bytes\n", -- sect_size); -+ if (!dev->d_ops->ioctl(dev, DIOCGSECTORSIZE, §_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). - -============================================================================== |