Hello community, here is the log from the commit of package ntfsprogs checked in at Tue Nov 28 21:21:22 CET 2006. -------- --- ntfsprogs/ntfsprogs.changes 2006-03-28 12:01:36.000000000 +0200 +++ /mounts/work_src_done/STABLE/STABLE/ntfsprogs/ntfsprogs.changes 2006-11-28 21:12:45.000000000 +0100 @@ -1,0 +2,10 @@ +Tue Nov 28 17:07:06 CET 2006 - cadaha@suse.de + +- vista resizing hotfix (#218948) + +------------------------------------------------------------------- +Tue Nov 28 17:06:37 CET 2006 - cadaha@suse.de + +- update to 1.13.1 + +------------------------------------------------------------------- Old: ---- ntfsprogs-1.11.2.tar.bz2 New: ---- ntfsprogs-1.13.1-rename-MS_.diff ntfsprogs-1.13.1-vistahotfix.diff ntfsprogs-1.13.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ntfsprogs.spec ++++++ --- /var/tmp/diff_new_pack.nJS8eC/_old 2006-11-28 21:21:09.000000000 +0100 +++ /var/tmp/diff_new_pack.nJS8eC/_new 2006-11-28 21:21:09.000000000 +0100 @@ -1,5 +1,5 @@ # -# spec file for package ntfsprogs (Version 1.11.2) +# spec file for package ntfsprogs (Version 1.13.1) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -11,15 +11,18 @@ # norootforbuild Name: ntfsprogs -BuildRequires: fuse-devel libgcrypt-devel pkgconfig -License: GPL +BuildRequires: fuse-devel gnutls gnutls-devel libgcrypt-devel pkgconfig +License: GNU General Public License (GPL) Group: System/Filesystems +Requires: gnutls Autoreqprov: on -Version: 1.11.2 -Release: 9 +Version: 1.13.1 +Release: 1 Summary: NTFS filesystem libraries and utilities -URL: http://linux-ntfs.sf.net/ +URL: http://www.linux-ntfs.org/ Source: %name-%version.tar.bz2 +Patch: %{name}-%{version}-rename-MS_.diff +Patch1: %{name}-%{version}-vistahotfix.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -87,6 +90,8 @@ %prep %setup -q -n %name-%version +%patch -p1 +%patch1 -p0 %build autoreconf -i -f @@ -96,6 +101,7 @@ --mandir=%_mandir \ --libdir=%_libdir \ --prefix=/usr/ \ + --exec-prefix=/usr/ \ --disable-gnome-vfs \ --enable-fuse-module @@ -123,7 +129,9 @@ /usr/bin/ntfsfix /usr/bin/ntfsinfo /usr/bin/ntfsls +/usr/bin/ntfscmp /usr/sbin/* +/sbin/mkfs.ntfs /%{_libdir}/libntfs.so.* %{_mandir}/man8/* @@ -139,8 +147,13 @@ %files fuse %defattr(-,root,root) /usr/bin/ntfsmount +/sbin/mount.ntfs-fuse %changelog -n ntfsprogs +* Tue Nov 28 2006 - cadaha@suse.de +- vista resizing hotfix (#218948) +* Tue Nov 28 2006 - cadaha@suse.de +- update to 1.13.1 * Tue Mar 28 2006 - adrian@suse.de - move ntfsmount into own sub package * Mon Mar 27 2006 - adrian@suse.de ++++++ ntfsprogs-1.13.1-rename-MS_.diff ++++++ diff -urN ntfsprogs-1.13.1-orig/include/ntfs/volume.h ntfsprogs-1.13.1/include/ntfs/volume.h --- ntfsprogs-1.13.1-orig/include/ntfs/volume.h 2006-01-08 16:53:28.000000000 +0100 +++ ntfsprogs-1.13.1/include/ntfs/volume.h 2006-11-28 19:39:22.000000000 +0100 @@ -41,25 +41,6 @@ #include <mntent.h> #endif -/* - * Under Cygwin, DJGPP and FreeBSD we do not have MS_RDONLY and MS_NOATIME, - * so we define them ourselves. - */ -#ifndef MS_RDONLY -#define MS_RDONLY 1 -#endif -/* - * Solaris defines MS_RDONLY but not MS_NOATIME thus we need to carefully - * define MS_NOATIME. - */ -#ifndef MS_NOATIME -#if (MS_RDONLY != 1) -# define MS_NOATIME 1 -#else -# define MS_NOATIME 2 -#endif -#endif - /* Forward declaration */ typedef struct _ntfs_volume ntfs_volume; @@ -69,6 +50,12 @@ #include "inode.h" #include "attrib.h" +enum { + NTFS_MNT_RDONLY = 1, + NTFS_MNT_NOATIME = 2, + NTFS_MNT_CASE_SENSITIVE = 4, +}; + /** * enum ntfs_mount_flags - * diff -urN ntfsprogs-1.13.1-orig/libntfs/gnome-vfs-method.c ntfsprogs-1.13.1/libntfs/gnome-vfs-method.c --- ntfsprogs-1.13.1-orig/libntfs/gnome-vfs-method.c 2006-02-03 23:19:19.000000000 +0100 +++ ntfsprogs-1.13.1/libntfs/gnome-vfs-method.c 2006-11-28 19:29:04.000000000 +0100 @@ -162,7 +162,7 @@ return GNOME_VFS_ERROR_INVALID_URI; } - if (!(volume = ntfs_mount(uri->parent->text, MS_RDONLY))) { + if (!(volume = ntfs_mount(uri->parent->text, NTFS_MNT_RDONLY))) { g_free(uri_parent_string); return GNOME_VFS_ERROR_WRONG_FORMAT; } diff -urN ntfsprogs-1.13.1-orig/libntfs/volume.c ntfsprogs-1.13.1/libntfs/volume.c --- ntfsprogs-1.13.1-orig/libntfs/volume.c 2006-03-28 00:43:09.000000000 +0200 +++ ntfsprogs-1.13.1/libntfs/volume.c 2006-11-28 19:29:48.000000000 +0100 @@ -429,9 +429,9 @@ } ntfs_upcase_table_build(vol->upcase, vol->upcase_len * sizeof(ntfschar)); - if (flags & MS_RDONLY) + if (flags & NTFS_MNT_RDONLY) NVolSetReadOnly(vol); - if (flags & MS_NOATIME) + if (flags & NTFS_MNT_NOATIME) NVolSetNoATime(vol); ntfs_log_debug("Reading bootsector... "); if (dev->d_ops->open(dev, NVolReadOnly(vol) ? O_RDONLY: O_RDWR)) { @@ -745,8 +745,8 @@ * @flags is an optional second parameter. The same flags are used as for * the mount system call (man 2 mount). Currently only the following flags * are implemented: - * MS_RDONLY - mount volume read-only - * MS_NOATIME - do not update access time + * NTFS_MNT_RDONLY - mount volume read-only + * NTFS_MNT_NOATIME - do not update access time * * The function opens the device @dev and verifies that it contains a valid * bootsector. Then, it allocates an ntfs_volume structure and initializes @@ -1116,7 +1116,7 @@ * Check for dirty logfile and hibernated Windows. * We care only about read-write mounts. */ - if (!(flags & MS_RDONLY)) { + if (!(flags & NTFS_MNT_RDONLY)) { if (ntfs_volume_check_logfile(vol) < 0) goto error_exit; if (ntfs_volume_check_hiberfile(vol) < 0) @@ -1148,8 +1148,8 @@ * @flags is an optional second parameter. The same flags are used as for * the mount system call (man 2 mount). Currently only the following flags * are implemented: - * MS_RDONLY - mount volume read-only - * MS_NOATIME - do not update access time + * NTFS_MNT_RDONLY - mount volume read-only + * NTFS_MNT_NOATIME - do not update access time * * The function opens the device or file @name and verifies that it contains a * valid bootsector. Then, it allocates an ntfs_volume structure and initializes diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfscat.c ntfsprogs-1.13.1/ntfsprogs/ntfscat.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfscat.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfscat.c 2006-11-28 19:29:04.000000000 +0100 @@ -399,7 +399,7 @@ utils_set_locale(); - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) { ntfs_log_perror("ERROR: couldn't mount volume"); return 1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsclone.c ntfsprogs-1.13.1/ntfsprogs/ntfsclone.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsclone.c 2006-06-21 09:59:19.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsclone.c 2006-11-28 19:29:48.000000000 +0100 @@ -1487,7 +1487,7 @@ { s64 device_size; - mount_volume(MS_RDONLY); + mount_volume(NTFS_MNT_RDONLY); device_size = ntfs_device_size_get(vol->dev, 1); if (device_size <= 0) @@ -1716,7 +1716,7 @@ /* 'force' again mount for dirty volumes (e.g. after resize). FIXME: use mount flags to avoid potential side-effects in future */ opt.force++; - mount_volume(MS_NOATIME); + mount_volume(NTFS_MNT_NOATIME); free(lcn_bitmap.bm); setup_lcn_bitmap(); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfscluster.c ntfsprogs-1.13.1/ntfsprogs/ntfscluster.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfscluster.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfscluster.c 2006-11-28 19:29:04.000000000 +0100 @@ -492,7 +492,7 @@ utils_set_locale(); - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) return 1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfscmp.c ntfsprogs-1.13.1/ntfsprogs/ntfscmp.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfscmp.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfscmp.c 2006-11-28 19:29:04.000000000 +0100 @@ -829,7 +829,7 @@ "You must 'umount' it first.\n", volume); } - vol = ntfs_mount(volume, MS_RDONLY); + vol = ntfs_mount(volume, NTFS_MNT_RDONLY); if (vol == NULL) { int err = errno; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfscp.c ntfsprogs-1.13.1/ntfsprogs/ntfscp.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfscp.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfscp.c 2006-11-28 19:29:04.000000000 +0100 @@ -312,7 +312,7 @@ } if (opts.noaction) - flags = MS_RDONLY; + flags = NTFS_MNT_RDONLY; vol = utils_mount_volume(opts.device, flags, opts.force); if (!vol) { diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsdecrypt.c ntfsprogs-1.13.1/ntfsprogs/ntfsdecrypt.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsdecrypt.c 2006-04-20 00:03:58.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsdecrypt.c 2006-11-28 19:29:04.000000000 +0100 @@ -1313,7 +1313,7 @@ return 1; } /* Mount the ntfs volume. */ - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) { ntfs_log_error("Failed to mount ntfs volume. Aborting.\n"); ntfs_rsa_private_key_release(rsa_key); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsdump_logfile.c ntfsprogs-1.13.1/ntfsprogs/ntfsdump_logfile.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsdump_logfile.c 2005-11-20 15:15:33.000000000 +0100 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsdump_logfile.c 2006-11-28 19:29:04.000000000 +0100 @@ -197,7 +197,7 @@ ntfs_inode *ni; ntfs_attr *na; - vol = ntfs_mount(filename, MS_RDONLY); + vol = ntfs_mount(filename, NTFS_MNT_RDONLY); if (!vol) log_err_exit(NULL, "Failed to mount %s: %s\n", filename, strerror(errno)); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsinfo.c ntfsprogs-1.13.1/ntfsprogs/ntfsinfo.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsinfo.c 2006-05-20 23:27:15.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsinfo.c 2006-11-28 19:29:04.000000000 +0100 @@ -1967,7 +1967,7 @@ utils_set_locale(); - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) return 1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfslabel.c ntfsprogs-1.13.1/ntfsprogs/ntfslabel.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfslabel.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfslabel.c 2006-11-28 19:29:04.000000000 +0100 @@ -394,7 +394,7 @@ if (!opts.label) opts.noaction++; - vol = utils_mount_volume(opts.device, opts.noaction ? MS_RDONLY : 0, + vol = utils_mount_volume(opts.device, opts.noaction ? NTFS_MNT_RDONLY : 0, opts.force); if (!vol) return 1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsls.c ntfsprogs-1.13.1/ntfsprogs/ntfsls.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsls.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsls.c 2006-11-28 19:29:04.000000000 +0100 @@ -651,7 +651,7 @@ utils_set_locale(); - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) { // FIXME: Print error... (AIA) return 2; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmftalloc.c ntfsprogs-1.13.1/ntfsprogs/ntfsmftalloc.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmftalloc.c 2005-11-20 15:15:33.000000000 +0100 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsmftalloc.c 2006-11-28 19:29:04.000000000 +0100 @@ -313,7 +313,7 @@ /* Mount the device. */ if (opts.no_action) { ntfs_log_quiet("Running in READ-ONLY mode!\n"); - ul = MS_RDONLY; + ul = NTFS_MNT_RDONLY; } else ul = 0; vol = ntfs_mount(dev_name, ul); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmount.c ntfsprogs-1.13.1/ntfsprogs/ntfsmount.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmount.c 2006-05-19 06:22:53.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsmount.c 2006-11-28 19:29:48.000000000 +0100 @@ -1420,8 +1420,8 @@ { ntfs_volume *vol; - vol = utils_mount_volume(device, ((ctx->ro) ? MS_RDONLY : 0) | - ((ctx->noatime) ? MS_NOATIME : 0), ctx->force); + vol = utils_mount_volume(device, ((ctx->ro) ? NTFS_MNT_RDONLY : 0) | + ((ctx->noatime) ? NTFS_MNT_NOATIME : 0), ctx->force); if (!vol) { ntfs_log_error("Mount failed.\n"); return -1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmove.c ntfsprogs-1.13.1/ntfsprogs/ntfsmove.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsmove.c 2006-04-05 14:43:07.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsmove.c 2006-11-28 19:29:05.000000000 +0100 @@ -873,7 +873,7 @@ utils_set_locale(); if (opts.noaction) - flags |= MS_RDONLY; + flags |= NTFS_MNT_RDONLY; vol = utils_mount_volume(opts.device, flags, opts.force); if (!vol) { diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsresize.c ntfsprogs-1.13.1/ntfsprogs/ntfsresize.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsresize.c 2006-04-19 00:03:09.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsresize.c 2006-11-28 19:29:48.000000000 +0100 @@ -486,7 +486,7 @@ opt.info++; break; case 'n': - opt.ro_flag = MS_RDONLY; + opt.ro_flag = NTFS_MNT_RDONLY; break; case 'P': opt.show_progress = 0; @@ -522,7 +522,7 @@ err++; } if (opt.info) { - opt.ro_flag = MS_RDONLY; + opt.ro_flag = NTFS_MNT_RDONLY; if (opt.bytes) { printf(NERR_PREFIX "Options --info and --size " "can't be used together.\n"); @@ -2238,7 +2238,7 @@ "You must 'umount' it first.\n", opt.volume); } - if (!(vol = ntfs_mount(opt.volume, opt.ro_flag | MS_NOATIME))) { + if (!(vol = ntfs_mount(opt.volume, opt.ro_flag | NTFS_MNT_NOATIME))) { int err = errno; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsrm.c ntfsprogs-1.13.1/ntfsprogs/ntfsrm.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsrm.c 2006-04-05 14:43:08.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsrm.c 2006-11-28 19:29:05.000000000 +0100 @@ -1027,7 +1027,7 @@ #endif if (opts.noaction) - flags |= MS_RDONLY; + flags |= NTFS_MNT_RDONLY; //ntfs_log_set_levels (NTFS_LOG_LEVEL_DEBUG | NTFS_LOG_LEVEL_TRACE); //ntfs_log_set_levels (NTFS_LOG_LEVEL_DEBUG); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfstruncate.c ntfsprogs-1.13.1/ntfsprogs/ntfstruncate.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfstruncate.c 2006-04-05 04:45:56.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfstruncate.c 2006-11-28 19:29:05.000000000 +0100 @@ -738,7 +738,7 @@ /* Mount the device. */ if (opts.no_action) { ntfs_log_quiet("Running in READ-ONLY mode!\n"); - ul = MS_RDONLY; + ul = NTFS_MNT_RDONLY; } else ul = 0; vol = ntfs_mount(dev_name, ul); diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfsundelete.c ntfsprogs-1.13.1/ntfsprogs/ntfsundelete.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfsundelete.c 2006-04-05 14:43:08.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfsundelete.c 2006-11-28 19:29:05.000000000 +0100 @@ -2123,7 +2123,7 @@ utils_set_locale(); - vol = utils_mount_volume(opts.device, MS_RDONLY, opts.force); + vol = utils_mount_volume(opts.device, NTFS_MNT_RDONLY, opts.force); if (!vol) return 1; diff -urN ntfsprogs-1.13.1-orig/ntfsprogs/ntfswipe.c ntfsprogs-1.13.1/ntfsprogs/ntfswipe.c --- ntfsprogs-1.13.1-orig/ntfsprogs/ntfswipe.c 2006-04-05 14:43:08.000000000 +0200 +++ ntfsprogs-1.13.1/ntfsprogs/ntfswipe.c 2006-11-28 19:29:05.000000000 +0100 @@ -1340,7 +1340,7 @@ print_summary(); if (opts.info || opts.noaction) - flags = MS_RDONLY; + flags = NTFS_MNT_RDONLY; vol = utils_mount_volume(opts.device, flags, opts.force); if (!vol) ++++++ ntfsprogs-1.13.1-vistahotfix.diff ++++++ Index: include/ntfs/volume.h =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/include/ntfs/volume.h,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- include/ntfs/volume.h 25 Nov 2006 17:37:37 -0000 1.26 +++ include/ntfs/volume.h 28 Nov 2006 10:09:57 -0000 1.27 @@ -54,6 +54,11 @@ NTFS_MNT_RDONLY = 1, NTFS_MNT_NOATIME = 2, NTFS_MNT_CASE_SENSITIVE = 4, + NTFS_MNT_NOT_EXCLUSIVE = 8, + NTFS_MNT_FORENSIC = 16, /* Mount for forensic purposes, i.e. do + not do any writing at all during the + mount, i.e. no journal emptying, no + dirty bit setting, etc. */ }; /** @@ -79,6 +83,10 @@ NV_CaseSensitive, /* 1: Volume is mounted case-sensitive. */ NV_LogFileEmpty, /* 1: $logFile journal is empty. */ NV_NoATime, /* 1: Do not update access time. */ + NV_WasDirty, /* 1: Volume was marked dirty before we mounted + it. */ + NV_ForensicMount, /* 1: Mount is forensic, i.e. no modifications + are to be done by mount/umount. */ } ntfs_volume_state_bits; #define test_nvol_flag(nv, flag) test_bit(NV_##flag, (nv)->state) @@ -101,6 +109,14 @@ #define NVolSetNoATime(nv) set_nvol_flag(nv, NoATime) #define NVolClearNoATime(nv) clear_nvol_flag(nv, NoATime) +#define NVolWasDirty(nv) test_nvol_flag(nv, WasDirty) +#define NVolSetWasDirty(nv) set_nvol_flag(nv, WasDirty) +#define NVolClearWasDirty(nv) clear_nvol_flag(nv, WasDirty) + +#define NVolForensicMount(nv) test_nvol_flag(nv, ForensicMount) +#define NVolSetForensicMount(nv) set_nvol_flag(nv, ForensicMount) +#define NVolClearForensicMount(nv) clear_nvol_flag(nv, ForensicMount) + /* * NTFS version 1.1 and 1.2 are used by Windows NT4. * NTFS version 2.x is used by Windows 2000 Beta Index: libntfs/volume.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/libntfs/volume.c,v retrieving revision 1.81 retrieving revision 1.82 diff -u -r1.81 -r1.82 --- libntfs/volume.c 25 Nov 2006 21:35:39 -0000 1.81 +++ libntfs/volume.c 28 Nov 2006 10:09:57 -0000 1.82 @@ -88,6 +88,14 @@ */ static void __ntfs_volume_release(ntfs_volume *v) { + /* + * Clear the dirty bit if it was not set before we mounted and this is + * not a forensic mount. + */ + if (!NVolReadOnly(v) && !NVolWasDirty(v) && !NVolForensicMount(v)) { + v->flags &= ~VOLUME_IS_DIRTY; + (void)ntfs_volume_write_flags(v, v->flags); + } if (v->lcnbmp_ni && NInoDirty(v->lcnbmp_ni)) ntfs_inode_sync(v->lcnbmp_ni); if (v->vol_ni) @@ -780,7 +788,9 @@ ntfs_log_perror("Failed to startup volume"); return NULL; } - + /* Record whether this is a forensic mount. */ + if (flags & NTFS_MNT_FORENSIC) + NVolSetForensicMount(vol); /* Load data from $MFT and $MFTMirr and compare the contents. */ m = (u8*)malloc(vol->mftmirr_size << vol->mft_record_size_bits); m2 = (u8*)malloc(vol->mftmirr_size << vol->mft_record_size_bits); @@ -997,9 +1007,14 @@ /* Setup vol from the volume information attribute value. */ vol->major_ver = vinf->major_ver; vol->minor_ver = vinf->minor_ver; - /* Do not use le16_to_cpu() macro here as our VOLUME_FLAGS are - defined using cpu_to_le16() macro and hence are consistent. */ + /* + * Do not use le16_to_cpu() macro here as our VOLUME_FLAGS are defined + * using cpu_to_le16() macro and hence are consistent. + */ vol->flags = vinf->flags; + /* Record whether the volume was dirty or not. */ + if (vol->flags & VOLUME_IS_DIRTY) + NVolSetWasDirty(vol); /* * Reinitialize the search context for the $Volume/$VOLUME_NAME lookup. */ @@ -1115,12 +1130,26 @@ /* * Check for dirty logfile and hibernated Windows. * We care only about read-write mounts. + * + * If all is ok, reset the logfile and set the dirty bit on the volume. + * + * But do not do that if this is a FORENSIC mount. */ if (!(flags & NTFS_MNT_RDONLY)) { if (ntfs_volume_check_logfile(vol) < 0) goto error_exit; if (ntfs_volume_check_hiberfile(vol) < 0) goto error_exit; + if (!NVolForensicMount(vol)) { + if (ntfs_logfile_reset(vol) < 0) + goto error_exit; + if (!NVolWasDirty(vol)) { + vol->flags |= VOLUME_IS_DIRTY; + if (ntfs_volume_write_flags(vol, vol->flags) < + 0) + goto error_exit; + } + } } return vol; Index: ntfsprogs/ntfsclone.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsclone.c,v retrieving revision 1.94 retrieving revision 1.95 diff -u -r1.94 -r1.95 --- ntfsprogs/ntfsclone.c 12 Nov 2006 22:46:50 -0000 1.94 +++ ntfsprogs/ntfsclone.c 28 Nov 2006 10:09:57 -0000 1.95 @@ -1328,7 +1328,7 @@ exit(1); } - if (vol->flags & VOLUME_IS_DIRTY) + if (NVolWasDirty(vol)) if (opt.force-- <= 0) err_exit(dirty_volume_msg, opt.volume); Index: ntfsprogs/ntfscp.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfscp.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- ntfsprogs/ntfscp.c 12 Nov 2006 22:46:50 -0000 1.39 +++ ntfsprogs/ntfscp.c 28 Nov 2006 10:09:57 -0000 1.40 @@ -320,7 +320,7 @@ return 1; } - if ((vol->flags & VOLUME_IS_DIRTY) && (!opts.force)) + if (NVolWasDirty(vol) && !opts.force) goto umount; { Index: ntfsprogs/ntfsdump_logfile.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsdump_logfile.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- ntfsprogs/ntfsdump_logfile.c 12 Nov 2006 22:46:50 -0000 1.35 +++ ntfsprogs/ntfsdump_logfile.c 28 Nov 2006 10:09:57 -0000 1.36 @@ -197,7 +197,7 @@ ntfs_inode *ni; ntfs_attr *na; - vol = ntfs_mount(filename, NTFS_MNT_RDONLY); + vol = ntfs_mount(filename, NTFS_MNT_RDONLY | NTFS_MNT_FORENSIC); if (!vol) log_err_exit(NULL, "Failed to mount %s: %s\n", filename, strerror(errno)); Index: ntfsprogs/ntfsfix.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsfix.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- ntfsprogs/ntfsfix.c 5 Apr 2006 12:43:07 -0000 1.33 +++ ntfsprogs/ntfsfix.c 28 Nov 2006 10:09:57 -0000 1.34 @@ -82,8 +82,6 @@ static const char *EXEC_NAME = "ntfsfix"; static const char *OK = "OK\n"; static const char *FAILED = "FAILED\n"; -static BOOL vol_is_dirty = FALSE; -static BOOL journal_is_empty = FALSE; struct { char *volume; @@ -247,9 +245,8 @@ { u16 flags; - if (vol_is_dirty == TRUE) + if (NVolWasDirty(vol)) return 0; - ntfs_log_info("Setting required flags on partition... "); /* * Set chkdsk flag, i.e. mark the partition dirty so chkdsk will run @@ -264,37 +261,9 @@ ntfs_log_error("Error setting volume flags.\n"); return -1; } + vol->flags = flags; ntfs_log_info(OK); - vol_is_dirty = TRUE; - return 0; -} - -/** - * set_dirty_flag_mount - */ -static int set_dirty_flag_mount(ntfs_volume *vol) -{ - u16 flags; - - if (vol_is_dirty == TRUE) - return 0; - - ntfs_log_info("Setting required flags on partition... "); - /* - * Set chkdsk flag, i.e. mark the partition dirty so chkdsk will run - * and fix it for us. - */ - flags = vol->flags | VOLUME_IS_DIRTY; - /* If NTFS volume version >= 2.0 then set mounted on NT4 flag. */ - if (vol->major_ver >= 2) - flags |= VOLUME_MOUNTED_ON_NT4; - if (ntfs_volume_write_flags(vol, flags)) { - ntfs_log_info(FAILED); - ntfs_log_error("Error setting volume flags.\n"); - return -1; - } - ntfs_log_info(OK); - vol_is_dirty = TRUE; + NVolSetWasDirty(vol); return 0; } @@ -303,9 +272,8 @@ */ static int empty_journal(ntfs_volume *vol) { - if (journal_is_empty == TRUE) + if (NVolLogFileEmpty(vol)) return 0; - ntfs_log_info("Going to empty the journal ($LogFile)... "); if (ntfs_logfile_reset(vol)) { ntfs_log_info(FAILED); @@ -313,7 +281,6 @@ return -1; } ntfs_log_info(OK); - journal_is_empty = TRUE; return 0; } @@ -475,13 +442,13 @@ ntfs_log_info("Attempting to correct errors... "); - dev = ntfs_device_alloc(opt.volume, 0, &ntfs_device_default_io_ops, NULL); + dev = ntfs_device_alloc(opt.volume, 0, &ntfs_device_default_io_ops, + NULL); if (!dev) { ntfs_log_info(FAILED); ntfs_log_perror("Failed to allocate device"); return -1; } - vol = ntfs_volume_startup(dev, 0); if (!vol) { ntfs_log_info(FAILED); @@ -490,17 +457,12 @@ ntfs_device_free(dev); return -1; } - if (fix_mftmirr(vol) < 0) goto error_exit; - - /* FIXME: Will this fail? Probably... */ if (set_dirty_flag(vol) < 0) goto error_exit; - if (empty_journal(vol) < 0) goto error_exit; - ret = 0; error_exit: /* ntfs_umount() will invoke ntfs_device_free() for us. */ @@ -550,7 +512,8 @@ exit(1); } } - + /* So the unmount does not clear it again. */ + NVolSetWasDirty(vol); /* Check NTFS version is ok for us (in $Volume) */ ntfs_log_info("NTFS volume version is %i.%i.\n", vol->major_ver, vol->minor_ver); @@ -558,22 +521,13 @@ ntfs_log_error("Error: Unknown NTFS version.\n"); goto error_exit; } - - if (set_dirty_flag_mount(vol) < 0) - goto error_exit; - - if (empty_journal(vol) < 0) - goto error_exit; - if (vol->major_ver >= 3) { - /* FIXME: If on NTFS 3.0+, check for presence of the usn journal and - disable it (if present) as Win2k might be unhappy otherwise and Bad - Things(TM) could happen depending on what applications are actually - using it for. */ + /* + * FIXME: If on NTFS 3.0+, check for presence of the usn + * journal and stamp it if present. + */ } - - /* FIXME: Should we be marking the quota out of date, too? */ - + /* FIXME: We should be marking the quota out of date, too. */ /* That's all for now! */ ntfs_log_info("NTFS partition %s was processed successfully.\n", vol->dev->d_name); Index: ntfsprogs/ntfsinfo.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsinfo.c,v retrieving revision 1.154 retrieving revision 1.155 diff -u -r1.154 -r1.155 --- ntfsprogs/ntfsinfo.c 25 Nov 2006 18:38:47 -0000 1.154 +++ ntfsprogs/ntfsinfo.c 28 Nov 2006 10:09:57 -0000 1.155 @@ -1165,7 +1165,7 @@ runlist *rlc = rl; printf("\tRunlist:\tVCN\t\tLCN\t\tLength\n"); while (rlc->length) { - printf("\t\t\t%lld\t\t%lld\t\t%lld\n", + printf("\t\t\t0x%llx\t\t0x%llx\t\t0x%llx\n", rlc->vcn, rlc->lcn, rlc->length); rlc++; } Index: ntfsprogs/ntfsmove.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsmove.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- ntfsprogs/ntfsmove.c 12 Nov 2006 22:46:50 -0000 1.24 +++ ntfsprogs/ntfsmove.c 28 Nov 2006 10:09:57 -0000 1.25 @@ -889,10 +889,7 @@ count = move_file(vol, inode, opts.location, 0); if ((count > 0) && (!opts.nodirty)) { - if (ntfs_volume_write_flags(vol, vol->flags | VOLUME_IS_DIRTY) < - 0) { - ntfs_log_error("Couldn't mark volume dirty\n"); - } + NVolSetWasDirty(vol); ntfs_log_info("Relocated %lld bytes\n", count); } if (count >= 0) Index: ntfsprogs/ntfsresize.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfsresize.c,v retrieving revision 1.123 retrieving revision 1.124 diff -u -r1.123 -r1.124 --- ntfsprogs/ntfsresize.c 12 Nov 2006 22:46:50 -0000 1.123 +++ ntfsprogs/ntfsresize.c 28 Nov 2006 10:09:57 -0000 1.124 @@ -2256,7 +2256,7 @@ exit(1); } - if (vol->flags & VOLUME_IS_DIRTY) + if (NVolWasDirty(vol)) if (opt.force-- <= 0) err_exit("Volume is scheduled for check.\nRun chkdsk /f" " and please try again, or see option -f.\n"); @@ -2280,32 +2280,16 @@ /** * prepare_volume_fixup * - * Set the volume's dirty flag and wipe the filesystem journal. When Windows - * boots it will automatically run chkdsk to check for any problems. If the - * read-only command line option was given, this function will do nothing. + * Make sure the volume's dirty flag does not get cleared at umount time. When + * Windows boots it will automatically run chkdsk to check for any problems. + * If the read-only command line option was given, this function will do + * nothing. */ static void prepare_volume_fixup(ntfs_volume *vol) { - u16 flags; - - flags = vol->flags | VOLUME_IS_DIRTY; - if (vol->major_ver >= 2) - flags |= VOLUME_MOUNTED_ON_NT4; - printf("Schedule chkdsk for NTFS consistency check at Windows " "boot time ...\n"); - - if (ntfs_volume_write_flags(vol, flags)) - perr_exit("Failed to set $Volume dirty"); - - if (vol->dev->d_ops->sync(vol->dev) == -1) - perr_exit("Failed to sync device"); - - printf("Resetting $LogFile ... (this might take a while)\n"); - - if (ntfs_logfile_reset(vol)) - perr_exit("Failed to reset $LogFile"); - + NVolSetWasDirty(vol); if (vol->dev->d_ops->sync(vol->dev) == -1) perr_exit("Failed to sync device"); } Index: ntfsprogs/ntfswipe.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/ntfswipe.c,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- ntfsprogs/ntfswipe.c 12 Nov 2006 22:46:51 -0000 1.45 +++ ntfsprogs/ntfswipe.c 28 Nov 2006 10:09:57 -0000 1.46 @@ -1346,7 +1346,7 @@ if (!vol) goto free; - if ((vol->flags & VOLUME_IS_DIRTY) && (!opts.force)) + if (NVolWasDirty(vol) && !opts.force) goto umount; if (opts.info) { Index: ntfsprogs/utils.c =================================================================== RCS file: /cvs/linux-ntfs/ntfsprogs/ntfsprogs/utils.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -r1.69 -r1.70 --- ntfsprogs/utils.c 25 Nov 2006 21:44:36 -0000 1.69 +++ ntfsprogs/utils.c 28 Nov 2006 10:09:57 -0000 1.70 @@ -196,7 +196,7 @@ return NULL; } - if (vol->flags & VOLUME_IS_DIRTY) { + if (NVolWasDirty(vol)) { ntfs_log_warning("Volume is dirty.\n"); if (!force) { ntfs_log_error("Run chkdsk and try again, or use the " "force option.\n"); ++++++ ntfsprogs-1.11.2.tar.bz2 -> ntfsprogs-1.13.1.tar.bz2 ++++++ ++++ 90889 lines of diff (skipped) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@suse.de