forked from ports/contrib
ntfs-3g: adopted, updated README, fuse now an optional dependency
This commit is contained in:
parent
e0592aa78c
commit
901d41826a
@ -1,12 +1,11 @@
|
||||
drwxr-xr-x root/root lib/
|
||||
drwxr-xr-x root/root sbin/
|
||||
lrwxrwxrwx root/root sbin/fsck.ntfs -> ../usr/bin/ntfsfix
|
||||
lrwxrwxrwx root/root sbin/mount.ntfs -> ../usr/bin/ntfs-3g
|
||||
lrwxrwxrwx root/root sbin/fsck.ntfs -> /usr/bin/ntfsfix
|
||||
lrwxrwxrwx root/root sbin/mount.lowntfs-3g -> /usr/bin/lowntfs-3g
|
||||
lrwxrwxrwx root/root sbin/mount.ntfs -> /usr/bin/ntfs-3g
|
||||
lrwxrwxrwx root/root sbin/mount.ntfs-3g -> /usr/bin/ntfs-3g
|
||||
drwxr-xr-x root/root usr/
|
||||
drwxr-xr-x root/root usr/bin/
|
||||
-rwxr-xr-x root/root usr/bin/lowntfs-3g
|
||||
lrwxrwxrwx root/root usr/bin/mount.lowntfs-3g -> /usr/bin/lowntfs-3g
|
||||
lrwxrwxrwx root/root usr/bin/mount.ntfs-3g -> /usr/bin/ntfs-3g
|
||||
-rwxr-xr-x root/root usr/bin/ntfs-3g
|
||||
-rwxr-xr-x root/root usr/bin/ntfs-3g.probe
|
||||
-rwxr-xr-x root/root usr/bin/ntfscat
|
||||
@ -63,11 +62,9 @@ drwxr-xr-x root/root usr/include/ntfs-3g/
|
||||
-rw-r--r-- root/root usr/include/ntfs-3g/volume.h
|
||||
-rw-r--r-- root/root usr/include/ntfs-3g/xattrs.h
|
||||
drwxr-xr-x root/root usr/lib/
|
||||
-rwxr-xr-x root/root usr/lib/libntfs-3g.la
|
||||
lrwxrwxrwx root/root usr/lib/libntfs-3g.so -> libntfs-3g.so.89.0.0
|
||||
lrwxrwxrwx root/root usr/lib/libntfs-3g.so.89 -> libntfs-3g.so.89.0.0
|
||||
-rwxr-xr-x root/root usr/lib/libntfs-3g.so.89.0.0
|
||||
drwxr-xr-x root/root usr/lib/ntfs-3g/
|
||||
drwxr-xr-x root/root usr/lib/pkgconfig/
|
||||
-rw-r--r-- root/root usr/lib/pkgconfig/libntfs-3g.pc
|
||||
drwxr-xr-x root/root usr/sbin/
|
||||
|
@ -1,5 +1,5 @@
|
||||
untrusted comment: verify with /etc/ports/contrib.pub
|
||||
RWSagIOpLGJF3zeXM4Ehi56y5ovXcmTBWVpL0rekHf6ewu+MXm40HkkCoqvN2D/40M2ILp2TJWhqSr+9k9bbJL4Tz+CJpe17mQc=
|
||||
SHA256 (Pkgfile) = a508d0fb8db3f6c4b81ed0337aa972566badf6ad700b071944a099388018af1b
|
||||
SHA256 (.footprint) = 92867ed56e7f25d0ea6b69ad87e7c1a28f9152a40c1079918680819641c04bf1
|
||||
RWSagIOpLGJF38EBGf3RrUoob1qAwTDh9VQX8Ra16S3JgWZhzwTG0Icu0nF+IIDufg0zJRTxOMdLvlXwV/3FwDBw0wBlqgAR+gs=
|
||||
SHA256 (Pkgfile) = e23aad5d39daa07dc4ae1d0df22342e799c962ccb4a95d12e3fe75ac8dd8f282
|
||||
SHA256 (.footprint) = 90c3bfc133598eefdf4e35194ef566b5567104aef099a8650c58dad6304ab29c
|
||||
SHA256 (ntfs-3g_ntfsprogs-2022.10.3.tgz) = f20e36ee68074b845e3629e6bced4706ad053804cbaf062fbae60738f854170c
|
||||
|
@ -1,63 +0,0 @@
|
||||
From 85c1634a26faa572d3c558d4cf8aaaca5202d4e9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jean-Pierre=20Andr=C3=A9?= <jean-pierre.andre@wanadoo.fr>
|
||||
Date: Wed, 19 Dec 2018 15:57:50 +0100
|
||||
Subject: [PATCH] Fixed reporting an error when failed to build the mountpoint
|
||||
|
||||
The size check was inefficient because getcwd() uses an unsigned int
|
||||
argument.
|
||||
---
|
||||
src/lowntfs-3g.c | 6 +++++-
|
||||
src/ntfs-3g.c | 6 +++++-
|
||||
2 files changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lowntfs-3g.c b/src/lowntfs-3g.c
|
||||
index 993867fa..0660439b 100644
|
||||
--- a/src/lowntfs-3g.c
|
||||
+++ b/src/lowntfs-3g.c
|
||||
@@ -4411,7 +4411,8 @@ int main(int argc, char *argv[])
|
||||
else {
|
||||
ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX);
|
||||
if (ctx->abs_mnt_point) {
|
||||
- if (getcwd(ctx->abs_mnt_point,
|
||||
+ if ((strlen(opts.mnt_point) < PATH_MAX)
|
||||
+ && getcwd(ctx->abs_mnt_point,
|
||||
PATH_MAX - strlen(opts.mnt_point) - 1)) {
|
||||
strcat(ctx->abs_mnt_point, "/");
|
||||
strcat(ctx->abs_mnt_point, opts.mnt_point);
|
||||
@@ -4419,6 +4420,9 @@ int main(int argc, char *argv[])
|
||||
/* Solaris also wants the absolute mount point */
|
||||
opts.mnt_point = ctx->abs_mnt_point;
|
||||
#endif /* defined(__sun) && defined (__SVR4) */
|
||||
+ } else {
|
||||
+ free(ctx->abs_mnt_point);
|
||||
+ ctx->abs_mnt_point = (char*)NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/ntfs-3g.c b/src/ntfs-3g.c
|
||||
index 6ce89fef..4e0912ae 100644
|
||||
--- a/src/ntfs-3g.c
|
||||
+++ b/src/ntfs-3g.c
|
||||
@@ -4148,7 +4148,8 @@ int main(int argc, char *argv[])
|
||||
else {
|
||||
ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX);
|
||||
if (ctx->abs_mnt_point) {
|
||||
- if (getcwd(ctx->abs_mnt_point,
|
||||
+ if ((strlen(opts.mnt_point) < PATH_MAX)
|
||||
+ && getcwd(ctx->abs_mnt_point,
|
||||
PATH_MAX - strlen(opts.mnt_point) - 1)) {
|
||||
strcat(ctx->abs_mnt_point, "/");
|
||||
strcat(ctx->abs_mnt_point, opts.mnt_point);
|
||||
@@ -4156,6 +4157,9 @@ int main(int argc, char *argv[])
|
||||
/* Solaris also wants the absolute mount point */
|
||||
opts.mnt_point = ctx->abs_mnt_point;
|
||||
#endif /* defined(__sun) && defined (__SVR4) */
|
||||
+ } else {
|
||||
+ free(ctx->abs_mnt_point);
|
||||
+ ctx->abs_mnt_point = (char*)NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.26.1
|
||||
|
@ -1,42 +1,48 @@
|
||||
# Description: Freely available NTFS driver with read and write support.
|
||||
# URL: https://www.tuxera.com/company/open-source/
|
||||
# Maintainer: Danny Rawlins, crux at romster dot me
|
||||
# Depends on: fuse gnutls libgcrypt
|
||||
# Maintainer: John McQuah, jmcquah at disroot dot org
|
||||
# Depends on: gnutls libgcrypt
|
||||
# Optional: fuse
|
||||
|
||||
name=ntfs-3g
|
||||
version=2022.10.3
|
||||
release=1
|
||||
source=(https://tuxera.com/opensource/ntfs-3g_ntfsprogs-$version.tgz)
|
||||
release=2
|
||||
source=(https://tuxera.com/opensource/${name}_ntfsprogs-$version.tgz)
|
||||
|
||||
build() {
|
||||
cd ntfs-3g_ntfsprogs-$version
|
||||
cd ${name}_ntfsprogs-$version
|
||||
|
||||
sed 's|$(DESTDIR)/sbin|$(DESTDIR)/usr/bin|' -i {ntfsprogs,src}/Makefile.in
|
||||
install -d $PKG/lib
|
||||
# $DESTDIR/lib must exist during install; the Makefile honors
|
||||
# EPREFIX by moving to the desired location afterward
|
||||
mkdir $PKG/lib
|
||||
|
||||
./configure \
|
||||
--prefix=/usr \
|
||||
--exec-prefix=/usr \
|
||||
--enable-crypto \
|
||||
--enable-extras \
|
||||
--enable-ldscript \
|
||||
--enable-posix-acls \
|
||||
--enable-xattr-mappings \
|
||||
--with-fuse=external \
|
||||
--disable-ldconfig \
|
||||
--disable-static \
|
||||
--without-uuid \
|
||||
--without-hd
|
||||
PKGMK_NTFS3="--prefix=/usr
|
||||
--exec-prefix=/usr
|
||||
--bindir=/usr/bin
|
||||
--sbindir=/usr/sbin
|
||||
--libexecdir=/usr/lib
|
||||
--enable-crypto
|
||||
--enable-extras
|
||||
--enable-ldscript
|
||||
--enable-posix-acls
|
||||
--enable-xattr-mappings
|
||||
--disable-ldconfig
|
||||
--disable-static
|
||||
--without-uuid
|
||||
--without-hd"
|
||||
prt-get isinst fuse && PKGMK_NTFS3+=" --with-fuse=external" \
|
||||
|| PKGMK_NTFS3+=" --with-fuse=internal"
|
||||
|
||||
./configure $PKGMK_NTFS3
|
||||
|
||||
make
|
||||
make DESTDIR=$PKG install
|
||||
|
||||
mkdir $PKG/sbin
|
||||
ln -s ../usr/bin/ntfs-3g $PKG/sbin/mount.ntfs
|
||||
ln -s ../usr/bin/ntfsfix $PKG/sbin/fsck.ntfs
|
||||
ln -s /usr/bin/ntfs-3g $PKG/sbin/mount.ntfs
|
||||
ln -s /usr/bin/ntfsfix $PKG/sbin/fsck.ntfs
|
||||
|
||||
ln -s ntfs-3g.8 $PKG/usr/share/man/man8/mount.ntfs.8
|
||||
ln -s ntfsfix.8 $PKG/usr/share/man/man8/fsck.ntfs.8
|
||||
|
||||
rm -r $PKG/usr/share/doc
|
||||
rm -r $PKG/usr/share/doc $PKG/usr/lib/$name $PKG/lib $PKG/usr/lib/*.la
|
||||
}
|
||||
|
@ -1,15 +1,16 @@
|
||||
Kernel Configuration
|
||||
Linux 5.15.55 and later come with robust read/write support for NTFS
|
||||
partitions. If the ntfs3 driver has been built as a module, then it should
|
||||
appear under /lib/modules/$(uname -r)/kernel/fs; if built into a monolithic
|
||||
kernel, it should be listed under /proc/filesystems. Mounting and copying
|
||||
to/from an NTFS partition can be accomplished with the kernel driver alone,
|
||||
but by installing this port you get additional userspace tools for fsck,
|
||||
mkfs, wiping, and resizing NTFS partitions.
|
||||
|
||||
Enable the following options in the kernel configuration and recompile the
|
||||
kernel if necessary:
|
||||
|
||||
File systems --->
|
||||
<*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]
|
||||
|
||||
Installation of Ntfs-3g
|
||||
If you want ordinary users to be able to mount NTFS partitions you'll need to
|
||||
set mount.ntfs with the root user ID. Note: it is probably unsafe to do this
|
||||
on a computer that needs to be secure (like a server). As the root user:
|
||||
|
||||
chmod -v 4755 /sbin/mount.ntfs
|
||||
Alternative to the (probably unsafe) `chmod 4755 /usr/bin/ntfs-3g`
|
||||
To allow ordinary users to mount NTFS partitions, you can either set ntfs-3g
|
||||
with the root user ID, or list the filesystem in /etc/fstab with the
|
||||
rw,noauto,uid,gid options (assuming you compiled the ntfs3 driver with
|
||||
your kernel). Example /etc/fstab line:
|
||||
|
||||
/dev/sdb1 /media/ntfs ntfs3 rw,uid=1000,gid=1000,noauto
|
||||
|
@ -1,25 +0,0 @@
|
||||
we handle split /usr logic ourselves. this ends up breaking when building
|
||||
for an abi that doesn't exist in / (like cross-compiling) as the tests fail.
|
||||
|
||||
--- a/libntfs-3g/Makefile.in
|
||||
+++ b/libntfs-3g/Makefile.in
|
||||
@@ -912,19 +912,6 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-local \
|
||||
uninstall-rootlibLTLIBRARIES
|
||||
|
||||
|
||||
-# We may need to move .so files to root
|
||||
-# And create ldscript or symbolic link from /usr
|
||||
-install-exec-hook: install-rootlibLTLIBRARIES
|
||||
-@INSTALL_LIBRARY_TRUE@ if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
|
||||
-@INSTALL_LIBRARY_TRUE@ $(MV) -f "$(DESTDIR)/$(libdir)"/libntfs-3g.so* "$(DESTDIR)/$(rootlibdir)"; \
|
||||
-@INSTALL_LIBRARY_TRUE@ fi
|
||||
-@GENERATE_LDSCRIPT_TRUE@@INSTALL_LIBRARY_TRUE@ if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
|
||||
-@GENERATE_LDSCRIPT_TRUE@@INSTALL_LIBRARY_TRUE@ $(install_sh_PROGRAM) "libntfs-3g.script.so" "$(DESTDIR)/$(libdir)/libntfs-3g.so"; \
|
||||
-@GENERATE_LDSCRIPT_TRUE@@INSTALL_LIBRARY_TRUE@ fi
|
||||
-@GENERATE_LDSCRIPT_FALSE@@INSTALL_LIBRARY_TRUE@ if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
|
||||
-@GENERATE_LDSCRIPT_FALSE@@INSTALL_LIBRARY_TRUE@ $(LN_S) "$(rootlibdir)/libntfs-3g.so" "$(DESTDIR)/$(libdir)/libntfs-3g.so"; \
|
||||
-@GENERATE_LDSCRIPT_FALSE@@INSTALL_LIBRARY_TRUE@ fi
|
||||
-
|
||||
uninstall-local:
|
||||
@INSTALL_LIBRARY_TRUE@ $(RM) -f "$(DESTDIR)/$(rootlibdir)"/libntfs-3g.so*
|
||||
|
@ -1,43 +0,0 @@
|
||||
include the headers that define major/minor/makedev in more places
|
||||
|
||||
https://bugs.gentoo.org/580136
|
||||
|
||||
--- a/libntfs-3g/ioctl.c
|
||||
+++ b/libntfs-3g/ioctl.c
|
||||
@@ -57,6 +57,12 @@
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
+#ifdef HAVE_SYS_MKDEV_H
|
||||
+#include <sys/mkdev.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_SYSMACROS_H
|
||||
+#include <sys/sysmacros.h>
|
||||
+#endif
|
||||
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
--- a/src/lowntfs-3g.c
|
||||
+++ b/src/lowntfs-3g.c
|
||||
@@ -76,6 +76,9 @@
|
||||
#ifdef HAVE_SYS_MKDEV_H
|
||||
#include <sys/mkdev.h>
|
||||
#endif
|
||||
+#ifdef HAVE_SYS_SYSMACROS_H
|
||||
+#include <sys/sysmacros.h>
|
||||
+#endif
|
||||
|
||||
#if defined(__APPLE__) || defined(__DARWIN__)
|
||||
#include <sys/dirent.h>
|
||||
--- a/src/ntfs-3g.c
|
||||
+++ b/src/ntfs-3g.c
|
||||
@@ -75,6 +75,9 @@
|
||||
#ifdef HAVE_SYS_MKDEV_H
|
||||
#include <sys/mkdev.h>
|
||||
#endif
|
||||
+#ifdef HAVE_SYS_SYSMACROS_H
|
||||
+#include <sys/sysmacros.h>
|
||||
+#endif
|
||||
|
||||
#if defined(__APPLE__) || defined(__DARWIN__)
|
||||
#include <sys/dirent.h>
|
@ -1,379 +0,0 @@
|
||||
--- a/libntfs-3g/bootsect.c.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/libntfs-3g/bootsect.c 2018-05-07 09:11:13.004710800 +0200
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
+#include "param.h"
|
||||
#include "compat.h"
|
||||
#include "bootsect.h"
|
||||
#include "debug.h"
|
||||
@@ -61,6 +62,7 @@
|
||||
{
|
||||
u32 i;
|
||||
BOOL ret = FALSE;
|
||||
+ u16 sectors_per_cluster;
|
||||
|
||||
ntfs_log_debug("Beginning bootsector check.\n");
|
||||
|
||||
@@ -83,15 +85,27 @@
|
||||
case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128:
|
||||
break;
|
||||
default:
|
||||
- ntfs_log_error("Unexpected sectors per cluster value (%d).\n",
|
||||
- b->bpb.sectors_per_cluster);
|
||||
- goto not_ntfs;
|
||||
+ if ((b->bpb.sectors_per_cluster < 240)
|
||||
+ || (b->bpb.sectors_per_cluster > 249)) {
|
||||
+ if (b->bpb.sectors_per_cluster > 128)
|
||||
+ ntfs_log_error("Unexpected sectors"
|
||||
+ " per cluster value (code 0x%x)\n",
|
||||
+ b->bpb.sectors_per_cluster);
|
||||
+ else
|
||||
+ ntfs_log_error("Unexpected sectors"
|
||||
+ " per cluster value (%d).\n",
|
||||
+ b->bpb.sectors_per_cluster);
|
||||
+ goto not_ntfs;
|
||||
+ }
|
||||
}
|
||||
|
||||
ntfs_log_debug("Checking cluster size.\n");
|
||||
- i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) *
|
||||
- b->bpb.sectors_per_cluster;
|
||||
- if (i > 65536) {
|
||||
+ if (b->bpb.sectors_per_cluster > 128)
|
||||
+ sectors_per_cluster = 1 << (256 - b->bpb.sectors_per_cluster);
|
||||
+ else
|
||||
+ sectors_per_cluster = b->bpb.sectors_per_cluster;
|
||||
+ i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * sectors_per_cluster;
|
||||
+ if (i > NTFS_MAX_CLUSTER_SIZE) {
|
||||
ntfs_log_error("Unexpected cluster size (%d).\n", i);
|
||||
goto not_ntfs;
|
||||
}
|
||||
@@ -171,7 +185,7 @@
|
||||
int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs)
|
||||
{
|
||||
s64 sectors;
|
||||
- u8 sectors_per_cluster;
|
||||
+ u16 sectors_per_cluster;
|
||||
s8 c;
|
||||
|
||||
/* We return -1 with errno = EINVAL on error. */
|
||||
@@ -186,7 +200,10 @@
|
||||
* below or equal the number_of_clusters) really belong in the
|
||||
* ntfs_boot_sector_is_ntfs but in this way we can just do this once.
|
||||
*/
|
||||
- sectors_per_cluster = bs->bpb.sectors_per_cluster;
|
||||
+ if (bs->bpb.sectors_per_cluster > 128)
|
||||
+ sectors_per_cluster = 1 << (256 - bs->bpb.sectors_per_cluster);
|
||||
+ else
|
||||
+ sectors_per_cluster = bs->bpb.sectors_per_cluster;
|
||||
ntfs_log_debug("SectorsPerCluster = 0x%x\n", sectors_per_cluster);
|
||||
if (sectors_per_cluster & (sectors_per_cluster - 1)) {
|
||||
ntfs_log_error("sectors_per_cluster (%d) is not a power of 2."
|
||||
--- a/ntfsprogs/mkntfs.8.in.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/ntfsprogs/mkntfs.8.in 2018-05-07 09:11:13.014132400 +0200
|
||||
@@ -132,7 +132,7 @@
|
||||
.TP
|
||||
\fB\-c\fR, \fB\-\-cluster\-size\fR BYTES
|
||||
Specify the size of clusters in bytes. Valid cluster size values are powers of
|
||||
-two, with at least 256, and at most 65536 bytes per cluster. If omitted,
|
||||
+two, with at least 256, and at most 2097152 bytes (2MB) per cluster. If omitted,
|
||||
.B mkntfs
|
||||
uses 4096 bytes as the default cluster size.
|
||||
.sp
|
||||
--- a/ntfsprogs/mkntfs.c.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/ntfsprogs/mkntfs.c 2018-05-07 09:11:13.035522300 +0200
|
||||
@@ -6,7 +6,7 @@
|
||||
* Copyright (c) 2002-2006 Szabolcs Szakacsits
|
||||
* Copyright (c) 2005 Erik Sornes
|
||||
* Copyright (c) 2007 Yura Pakhuchiy
|
||||
- * Copyright (c) 2010-2014 Jean-Pierre Andre
|
||||
+ * Copyright (c) 2010-2018 Jean-Pierre Andre
|
||||
*
|
||||
* This utility will create an NTFS 1.2 or 3.1 volume on a user
|
||||
* specified (block) device.
|
||||
@@ -119,6 +119,7 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
+#include "param.h"
|
||||
#include "security.h"
|
||||
#include "types.h"
|
||||
#include "attrib.h"
|
||||
@@ -287,7 +288,7 @@
|
||||
ntfs_log_info("Copyright (c) 2002-2006 Szabolcs Szakacsits\n");
|
||||
ntfs_log_info("Copyright (c) 2005 Erik Sornes\n");
|
||||
ntfs_log_info("Copyright (c) 2007 Yura Pakhuchiy\n");
|
||||
- ntfs_log_info("Copyright (c) 2010-2014 Jean-Pierre Andre\n");
|
||||
+ ntfs_log_info("Copyright (c) 2010-2018 Jean-Pierre Andre\n");
|
||||
ntfs_log_info("\n%s\n%s%s\n", ntfs_gpl, ntfs_bugs, ntfs_home);
|
||||
}
|
||||
|
||||
@@ -3719,11 +3720,11 @@
|
||||
/*
|
||||
* For huge volumes, grow the cluster size until the number of
|
||||
* clusters fits into 32 bits or the cluster size exceeds the
|
||||
- * maximum limit of 64kiB.
|
||||
+ * maximum limit of NTFS_MAX_CLUSTER_SIZE.
|
||||
*/
|
||||
while (volume_size >> (ffs(vol->cluster_size) - 1 + 32)) {
|
||||
vol->cluster_size <<= 1;
|
||||
- if (vol->cluster_size > 65535) {
|
||||
+ if (vol->cluster_size >= NTFS_MAX_CLUSTER_SIZE) {
|
||||
ntfs_log_error("Device is too large to hold an "
|
||||
"NTFS volume (maximum size is "
|
||||
"256TiB).\n");
|
||||
@@ -3744,15 +3745,18 @@
|
||||
"to, or larger than, the sector size.\n");
|
||||
return FALSE;
|
||||
}
|
||||
- if (vol->cluster_size > 128 * (u32)opts.sector_size) {
|
||||
+ /* Before Windows 10 Creators, the limit was 128 */
|
||||
+ if (vol->cluster_size > 4096 * (u32)opts.sector_size) {
|
||||
ntfs_log_error("The cluster size is invalid. It cannot be "
|
||||
- "more that 128 times the size of the sector "
|
||||
+ "more that 4096 times the size of the sector "
|
||||
"size.\n");
|
||||
return FALSE;
|
||||
}
|
||||
- if (vol->cluster_size > 65536) {
|
||||
+ if (vol->cluster_size > NTFS_MAX_CLUSTER_SIZE) {
|
||||
ntfs_log_error("The cluster size is invalid. The maximum "
|
||||
- "cluster size is 65536 bytes (64kiB).\n");
|
||||
+ "cluster size is %lu bytes (%lukiB).\n",
|
||||
+ (unsigned long)NTFS_MAX_CLUSTER_SIZE,
|
||||
+ (unsigned long)(NTFS_MAX_CLUSTER_SIZE >> 10));
|
||||
return FALSE;
|
||||
}
|
||||
vol->cluster_size_bits = ffs(vol->cluster_size) - 1;
|
||||
@@ -4387,6 +4391,7 @@
|
||||
u8 *sd;
|
||||
FILE_ATTR_FLAGS extend_flags;
|
||||
VOLUME_FLAGS volume_flags = const_cpu_to_le16(0);
|
||||
+ int sectors_per_cluster;
|
||||
int nr_sysfiles;
|
||||
int buf_sds_first_size;
|
||||
char *buf_sds;
|
||||
@@ -4639,8 +4644,11 @@
|
||||
* already inserted, so no need to worry about these things.
|
||||
*/
|
||||
bs->bpb.bytes_per_sector = cpu_to_le16(opts.sector_size);
|
||||
- bs->bpb.sectors_per_cluster = (u8)(g_vol->cluster_size /
|
||||
- opts.sector_size);
|
||||
+ sectors_per_cluster = g_vol->cluster_size / opts.sector_size;
|
||||
+ if (sectors_per_cluster > 128)
|
||||
+ bs->bpb.sectors_per_cluster = 257 - ffs(sectors_per_cluster);
|
||||
+ else
|
||||
+ bs->bpb.sectors_per_cluster = sectors_per_cluster;
|
||||
bs->bpb.media_type = 0xf8; /* hard disk */
|
||||
bs->bpb.sectors_per_track = cpu_to_le16(opts.sectors_per_track);
|
||||
ntfs_log_debug("sectors per track = %ld (0x%lx)\n",
|
||||
--- a/ntfsprogs/ntfsclone.c.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/ntfsprogs/ntfsclone.c 2018-05-07 09:11:38.245007100 +0200
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 2003-2006 Szabolcs Szakacsits
|
||||
* Copyright (c) 2004-2006 Anton Altaparmakov
|
||||
- * Copyright (c) 2010-2016 Jean-Pierre Andre
|
||||
+ * Copyright (c) 2010-2018 Jean-Pierre Andre
|
||||
* Special image format support copyright (c) 2004 Per Olofsson
|
||||
*
|
||||
* Clone NTFS data and/or metadata to a sparse file, image, device or stdout.
|
||||
@@ -71,6 +71,7 @@
|
||||
*/
|
||||
#define NTFS_DO_NOT_CHECK_ENDIANS
|
||||
|
||||
+#include "param.h"
|
||||
#include "debug.h"
|
||||
#include "types.h"
|
||||
#include "support.h"
|
||||
@@ -270,7 +271,6 @@
|
||||
|
||||
#define LAST_METADATA_INODE 11
|
||||
|
||||
-#define NTFS_MAX_CLUSTER_SIZE 65536
|
||||
#define NTFS_SECTOR_SIZE 512
|
||||
|
||||
#define rounded_up_division(a, b) (((a) + (b - 1)) / (b))
|
||||
@@ -393,7 +393,7 @@
|
||||
"Efficiently clone, image, restore or rescue an NTFS Volume.\n\n"
|
||||
"Copyright (c) 2003-2006 Szabolcs Szakacsits\n"
|
||||
"Copyright (c) 2004-2006 Anton Altaparmakov\n"
|
||||
- "Copyright (c) 2010-2016 Jean-Pierre Andre\n\n");
|
||||
+ "Copyright (c) 2010-2018 Jean-Pierre Andre\n\n");
|
||||
fprintf(stderr, "%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
|
||||
exit(0);
|
||||
}
|
||||
@@ -756,7 +756,7 @@
|
||||
|
||||
static void copy_cluster(int rescue, u64 rescue_lcn, u64 lcn)
|
||||
{
|
||||
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
|
||||
+ char *buff;
|
||||
/* vol is NULL if opt.restore_image is set */
|
||||
s32 csize = le32_to_cpu(image_hdr.cluster_size);
|
||||
BOOL backup_bootsector;
|
||||
@@ -783,6 +783,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ buff = (char*)ntfs_malloc(csize);
|
||||
+ if (!buff)
|
||||
+ err_exit("Not enough memory");
|
||||
+
|
||||
// need reading when not about to write ?
|
||||
if (read_all(fd, buff, csize) == -1) {
|
||||
|
||||
@@ -858,6 +862,7 @@
|
||||
perr_printf("Write failed");
|
||||
#endif
|
||||
}
|
||||
+ free(buff);
|
||||
}
|
||||
|
||||
static s64 lseek_out(int fd, s64 pos, int mode)
|
||||
@@ -995,7 +1000,11 @@
|
||||
struct progress_bar *progress, u64 *p_counter)
|
||||
{
|
||||
s64 i;
|
||||
- char buff[NTFS_MAX_CLUSTER_SIZE];
|
||||
+ char *buff;
|
||||
+
|
||||
+ buff = (char*)ntfs_malloc(csize);
|
||||
+ if (!buff)
|
||||
+ err_exit("Not enough memory");
|
||||
|
||||
memset(buff, 0, csize);
|
||||
|
||||
@@ -1004,6 +1013,7 @@
|
||||
perr_exit("write_all");
|
||||
progress_update(progress, ++(*p_counter));
|
||||
}
|
||||
+ free(buff);
|
||||
}
|
||||
|
||||
static void restore_image(void)
|
||||
@@ -1492,7 +1502,7 @@
|
||||
|
||||
static void copy_wipe_mft(ntfs_walk_clusters_ctx *image, runlist *rl)
|
||||
{
|
||||
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
|
||||
+ char *buff;
|
||||
void *fd;
|
||||
s64 mft_no;
|
||||
u32 mft_record_size;
|
||||
@@ -1522,6 +1532,10 @@
|
||||
clusters_per_set = mft_record_size/csize;
|
||||
records_per_set = 1;
|
||||
}
|
||||
+ buff = (char*)ntfs_malloc(mft_record_size);
|
||||
+ if (!buff)
|
||||
+ err_exit("Not enough memory");
|
||||
+
|
||||
mft_no = 0;
|
||||
ri = rj = 0;
|
||||
wi = wj = 0;
|
||||
@@ -1554,6 +1568,7 @@
|
||||
}
|
||||
}
|
||||
image->current_lcn = current_lcn;
|
||||
+ free(buff);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1566,7 +1581,7 @@
|
||||
|
||||
static void copy_wipe_i30(ntfs_walk_clusters_ctx *image, runlist *rl)
|
||||
{
|
||||
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
|
||||
+ char *buff;
|
||||
void *fd;
|
||||
u32 indx_record_size;
|
||||
u32 csize;
|
||||
@@ -1595,6 +1610,10 @@
|
||||
clusters_per_set = indx_record_size/csize;
|
||||
records_per_set = 1;
|
||||
}
|
||||
+ buff = (char*)ntfs_malloc(indx_record_size);
|
||||
+ if (!buff)
|
||||
+ err_exit("Not enough memory");
|
||||
+
|
||||
ri = rj = 0;
|
||||
wi = wj = 0;
|
||||
if (rl[ri].length)
|
||||
@@ -1627,6 +1646,7 @@
|
||||
}
|
||||
}
|
||||
image->current_lcn = current_lcn;
|
||||
+ free(buff);
|
||||
}
|
||||
|
||||
static void dump_clusters(ntfs_walk_clusters_ctx *image, runlist *rl)
|
||||
--- a/ntfsprogs/ntfsresize.c.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/ntfsprogs/ntfsresize.c 2018-05-07 09:11:13.076883400 +0200
|
||||
@@ -59,6 +59,7 @@
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
+#include "param.h"
|
||||
#include "debug.h"
|
||||
#include "types.h"
|
||||
#include "support.h"
|
||||
@@ -243,8 +244,6 @@
|
||||
#define DIRTY_INODE (1)
|
||||
#define DIRTY_ATTRIB (2)
|
||||
|
||||
-#define NTFS_MAX_CLUSTER_SIZE (65536)
|
||||
-
|
||||
static s64 rounded_up_division(s64 numer, s64 denom)
|
||||
{
|
||||
return (numer + (denom - 1)) / denom;
|
||||
@@ -404,7 +403,7 @@
|
||||
printf("Copyright (c) 2002-2005 Anton Altaparmakov\n");
|
||||
printf("Copyright (c) 2002-2003 Richard Russon\n");
|
||||
printf("Copyright (c) 2007 Yura Pakhuchiy\n");
|
||||
- printf("Copyright (c) 2011-2016 Jean-Pierre Andre\n");
|
||||
+ printf("Copyright (c) 2011-2018 Jean-Pierre Andre\n");
|
||||
printf("\n%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
|
||||
}
|
||||
|
||||
@@ -1849,9 +1848,13 @@
|
||||
static void copy_clusters(ntfs_resize_t *resize, s64 dest, s64 src, s64 len)
|
||||
{
|
||||
s64 i;
|
||||
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
|
||||
+ char *buff;
|
||||
ntfs_volume *vol = resize->vol;
|
||||
|
||||
+ buff = (char*)ntfs_malloc(vol->cluster_size);
|
||||
+ if (!buff)
|
||||
+ perr_exit("ntfs_malloc");
|
||||
+
|
||||
for (i = 0; i < len; i++) {
|
||||
|
||||
lseek_to_cluster(vol, src + i);
|
||||
@@ -1875,6 +1878,7 @@
|
||||
resize->relocations++;
|
||||
progress_update(&resize->progress, resize->relocations);
|
||||
}
|
||||
+ free(buff);
|
||||
}
|
||||
|
||||
static void relocate_clusters(ntfs_resize_t *r, runlist *dest_rl, s64 src_lcn)
|
||||
--- a/include/ntfs-3g/param.h.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/include/ntfs-3g/param.h 2018-05-07 09:11:13.088302600 +0200
|
||||
@@ -40,6 +40,13 @@
|
||||
};
|
||||
|
||||
/*
|
||||
+ * Parameters for formatting
|
||||
+ */
|
||||
+
|
||||
+ /* Up to Windows 10, the cluster size was limited to 64K */
|
||||
+#define NTFS_MAX_CLUSTER_SIZE 2097152 /* Windows 10 Creators allows 2MB */
|
||||
+
|
||||
+/*
|
||||
* Parameters for compression
|
||||
*/
|
||||
|
@ -1,12 +0,0 @@
|
||||
--- a/libntfs-3g/volume.c.ref 2017-03-23 10:42:44.000000000 +0100
|
||||
+++ b/libntfs-3g/volume.c 2017-12-20 08:11:51.842424300 +0100
|
||||
@@ -959,7 +959,8 @@
|
||||
vol->mftmirr_size = l;
|
||||
}
|
||||
ntfs_log_debug("Comparing $MFTMirr to $MFT...\n");
|
||||
- for (i = 0; i < vol->mftmirr_size; ++i) {
|
||||
+ /* Windows 10 does not update the full $MFTMirr any more */
|
||||
+ for (i = 0; (i < vol->mftmirr_size) && (i < FILE_first_user); ++i) {
|
||||
MFT_RECORD *mrec, *mrec2;
|
||||
const char *ESTR[12] = { "$MFT", "$MFTMirr", "$LogFile",
|
||||
"$Volume", "$AttrDef", "root directory", "$Bitmap",
|
@ -1,81 +0,0 @@
|
||||
--- a/ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200
|
||||
+++ b/ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200
|
||||
@@ -776,6 +776,10 @@
|
||||
|
||||
/* possible partial cluster holding the backup boot sector */
|
||||
backup_bootsector = (lcn + 1)*csize >= full_device_size;
|
||||
+ buff = (char*)ntfs_malloc(csize);
|
||||
+ if (!buff)
|
||||
+ err_exit("Not enough memory");
|
||||
+
|
||||
if (backup_bootsector) {
|
||||
csize = full_device_size - lcn*csize;
|
||||
if (csize < 0) {
|
||||
@@ -783,10 +787,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
- buff = (char*)ntfs_malloc(csize);
|
||||
- if (!buff)
|
||||
- err_exit("Not enough memory");
|
||||
-
|
||||
// need reading when not about to write ?
|
||||
if (read_all(fd, buff, csize) == -1) {
|
||||
|
||||
@@ -1507,6 +1507,7 @@
|
||||
s64 mft_no;
|
||||
u32 mft_record_size;
|
||||
u32 csize;
|
||||
+ u32 buff_size;
|
||||
u32 bytes_per_sector;
|
||||
u32 records_per_set;
|
||||
u32 clusters_per_set;
|
||||
@@ -1524,15 +1525,18 @@
|
||||
/*
|
||||
* Depending on the sizes, there may be several records
|
||||
* per cluster, or several clusters per record.
|
||||
+ * Anyway, full clusters are needed for rescuing bad ones.
|
||||
*/
|
||||
if (csize >= mft_record_size) {
|
||||
records_per_set = csize/mft_record_size;
|
||||
clusters_per_set = 1;
|
||||
+ buff_size = csize;
|
||||
} else {
|
||||
clusters_per_set = mft_record_size/csize;
|
||||
records_per_set = 1;
|
||||
+ buff_size = mft_record_size;
|
||||
}
|
||||
- buff = (char*)ntfs_malloc(mft_record_size);
|
||||
+ buff = (char*)ntfs_malloc(buff_size);
|
||||
if (!buff)
|
||||
err_exit("Not enough memory");
|
||||
|
||||
@@ -1585,6 +1589,7 @@
|
||||
void *fd;
|
||||
u32 indx_record_size;
|
||||
u32 csize;
|
||||
+ u32 buff_size;
|
||||
u32 bytes_per_sector;
|
||||
u32 records_per_set;
|
||||
u32 clusters_per_set;
|
||||
@@ -1601,16 +1606,19 @@
|
||||
/*
|
||||
* Depending on the sizes, there may be several records
|
||||
* per cluster, or several clusters per record.
|
||||
+ * Anyway, full clusters are needed for rescuing bad ones.
|
||||
*/
|
||||
indx_record_size = image->ni->vol->indx_record_size;
|
||||
if (csize >= indx_record_size) {
|
||||
records_per_set = csize/indx_record_size;
|
||||
clusters_per_set = 1;
|
||||
+ buff_size = csize;
|
||||
} else {
|
||||
clusters_per_set = indx_record_size/csize;
|
||||
records_per_set = 1;
|
||||
+ buff_size = indx_record_size;
|
||||
}
|
||||
- buff = (char*)ntfs_malloc(indx_record_size);
|
||||
+ buff = (char*)ntfs_malloc(buff_size);
|
||||
if (!buff)
|
||||
err_exit("Not enough memory");
|
||||
|
Loading…
x
Reference in New Issue
Block a user