Commit Graph

168 Commits (11a3997a0df5c20f27d11254a6dca5d6830b4b92)

Author SHA1 Message Date
Erik Larsson f076fae75a Fix endianness issues in log and terminal output.
This commit addresses issues where little-endian variables are emitted
raw to a log or output stream which is to be interpreted by the user.

Outputting data in non-native endianness can cause confusion for anybody
attempting to debug issues with a file system.
2015-12-21 23:31:09 +01:00
Erik Larsson dfa4a6647f Fix code to use const_cpu_to_X/const_X_to_cpu macros for constants.
This enables the compiler to optimize this code in cases where compiler
support for endianness swapping is not present.
2015-12-21 23:21:00 +01:00
Jean-Pierre André 1aaaa8fac1 Wrote as much data as possible in compressed attribute pwrite
When writing to compressed data, the function ntfs_attr_pwrite()
cannot cross a compression block border. This is a problem for archivers
which rely on libntfs-3g, so the function is now wrapped in another one
which restarts the writing as needed.
2015-11-09 16:00:31 +01:00
Jean-Pierre André 70e5b1b250 Fixed inserting a new ACL after they have been wiped out by chkdsk
chkdsk deletes the ACLs when they are bad or when they are not used any
more. This fixes inserting a new ACL after the previously last ACL (or
even all of them) was deleted.
2014-04-23 09:53:13 +02:00
Jean-Pierre André 25d0f163ee Mapped the runlist when filling an initial hole
A bug was introduced by commit d2c7d40a2b :
when the beginning of a file was a hole and the runlist span over several
MFT extents, the runlist was not mapped on filling the initial hole.
This lead to a crash when using torrent to download big files.
2014-04-12 09:32:59 +02:00
Jean-Pierre André fb88692394 Implemented updating an encrypted file in ntfsdecrypt
Existing encrypted files can be updated provided the encryption method
and key can be extracted from the LOGGED_UTILITY_STREAM attribute.
2014-03-11 11:10:33 +01:00
Jean-Pierre André e6c46d4fa0 Used MFT record 15 for the first extent to MFT:DATA
When the runlist of the data attribute of MFT has to be split across
several extents, the location of each extent has to be known from the
runlist present in previous extents. So, force the first extent into
record 15 to avoid a bad layout.
2014-03-11 10:16:26 +01:00
Jean-Pierre André ea8e192613 Traced dirtying runlists and updated them accordingly
Use a new flag to trace changes to a runlist and avoid recomputing the
runlist when no actual change occurred.
2014-03-11 10:11:00 +01:00
Jean-Pierre André d2c7d40a2b Avoided full runlist updating in more situations
When a hole in a sparse file was filled, the runlist was fully recomputed.
When a sparse file spans over several MFT extents, this patch leads to
only recompute the runlist from the modified extent to the end.
2014-03-11 10:04:54 +01:00
Jean-Pierre André f0c5c2a54f Ignored unmapped regions when checking whether sparse
Updating an attribute may imply decompressing runlists which are not
contiguous, leaving an unmapped region between them. When checking whether
the attribute has been made sparse, such unmapped regions should be ignored
This mostly happens after updating an index. (fix by Forrest Liu)
2013-12-17 10:39:55 +01:00
Jean-Pierre André 5b38218f0b Logged more details when an attribute is not found
Log the inode number and attribute type when an attribute is not found.
This simplifies identifying relevant ones among such log messages.
2013-09-20 16:20:02 +02:00
Jean-Pierre André 89af38f687 Fixed expanding a resident attribute without inserting holes
When calling ntfstruncate() to expand a resident attribute, the function
is called again recursively, losing the requirement for not inserting
holes. This is for forwarding the requirement (used by ntfscp).
2013-09-09 15:27:38 +02:00
Jean-Pierre André 1f7fd0160f Fixed testing whether a stream has been wiped out
When testing whether a stream has been wiped out for possibly changing
its compression status, only the non-resident case was considered.
This fixes the test for streams which were never made non-resident.
2013-09-09 15:19:50 +02:00
Erik Larsson ebb38c4b1c API cleanup of const arguments.
- Replaced 'ntfschar*' parameters with 'const ntfschar*' where
  appropriate (the function does not need to modify the string).
- Replaced some instances of 'u8*' and 'char*' read-only buffer
  arguments with 'const u8*' and 'const char*'.
2012-11-07 14:15:53 +01:00
Jean-Pierre André 35eab4044e Avoided an unnecessary runlist update when appending data to a file
Appending data to a file is done in two steps : first extending the
file to the required size, then inserting data in the created space.
There is no need to recompute the runlist at the end of the first
step, just be sure the original configuration is rolled back if inserting
data leads to an error.
2012-08-20 13:48:49 +02:00
Jean-Pierre André 864cf7232e Fixed huge data writes
When computing the runlist for the first non-resident write to an
attribute, an inconsistency was created between the attribute image
and the ntfs_attr structure, which could cause an MFT record overflow
when the first write is huge and fragmented (reported by Vito Caputo).
2011-10-20 19:05:27 +02:00
Jean-Pierre André 08bf2b5bcb Avoided logging meaningless fixup errors in ntfsclone and ntfsresize
Logging of fixup errors for uninitialized inodes cause unnecessary
worries and suspicion of malfunctions in ntfs-3g. This patch silences
these loggings in ntfsclone and ntfsresize which have to analyze all
inodes, including the uninitialized ones.
2011-09-23 11:28:42 +02:00
Erik Larsson b8103bbcfe Permit $VOLUME_NAME to be 0-sized, even when $AttrDef says otherwise.
When clearing a volume name in Windows, $VOLUME_NAME is set to size 0, even if
the standard $AttrDef says that the minimum size is 2.

So the definition in $AttrDef doesn't reflect actual Windows behaviour in this
particular case, and to clear volume names ourselves the way Windows does it,
we must must add a special rule to permit us to truncate the $VOLUME_NAME
attribute to 0 even when $AttrDef specifies a higher value as minimum size.
2011-09-12 09:07:00 +02:00
Jean-Pierre André 0b8b7521a4 Fixed the FullyMapped flag when making an attribute resident
When an attribute is truncated and made resident, the NAttrFullyMapped
flags has to be cleared, otherwise the attribute cannot be properly
mapped when the attribute is later made non-resident again.
2011-08-30 16:02:32 +02:00
Jean-Pierre André a1161d552f cosmetic : Removed a pointless store in ntfs_attr_make_resident() (Fabian Keil) 2011-08-04 15:49:36 +02:00
Jean-Pierre André 5cd49257b0 Removed unneeded variables as warned by gcc 4.6 2011-07-05 12:17:29 +02:00
Jean-Pierre André 47a4b0ba17 Fixed a too restrictive consistency check in attrib.c 2011-07-05 12:17:29 +02:00
Jean-Pierre André 262ed5f7df Cleared attribute flags controlling recursive writes 2011-07-05 12:17:28 +02:00
Jean-Pierre André c879697b12 Fixed type of argument (same value)
A boolean argument had been replaced by a tri-state one, but the change
was forgotten in one instance. No visible effect, the value is the same.
2011-03-23 09:10:10 +01:00
Jean-Pierre André 2363a26297 Removed duplicated code
A patch had been applied twice, duplication caused to no visible effects.
2011-03-23 09:02:15 +01:00
Jean-Pierre André 402924cc50 Fixed cluster mapping ahead of mapped runlist
A corner case was wrong and could cause aborted writes with error
"Run lists overlap. Cannot merge" when the clusters required by the
write are described in different MFT extents.
This can only happen in very fragmented files when the cluster size
is smaller than 4096 bytes. It does not cause any metadata corruption.
2011-03-01 12:14:53 +01:00
Jean-Pierre André 30c06f9092 Fixed dealing with holes when expanding an attribute 2011-02-16 12:22:30 +01:00
Jean-Pierre André a46a395006 Updated copyright notices 2011-02-08 13:52:12 +01:00
Jean-Pierre André 82ce1fcdfa Improved appending data to a long hole 2011-02-08 13:52:12 +01:00
Jean-Pierre André addc9be334 Merged sparse testing when appending with ntfsprogs requirement 2011-02-08 13:52:12 +01:00
Jean-Pierre André 6bf4af7544 Fixed allocated size when an attribute update causes unnamed data to be expelled 2011-01-10 11:18:16 +01:00
Jean-Pierre André 0cb35ac7aa Enabled expanding an attribute without creating a hole 2010-12-21 15:51:07 +01:00
Jean-Pierre André 351aec3f7a Enabled renaming of system extended attributes 2010-10-26 08:59:52 +02:00
Jean-Pierre André 1898b11481 Improved appending data to fragmented files 2010-10-26 08:59:51 +02:00
Jean-Pierre André d0725eb251 Fixed rounding to cluster end for compressed files 2010-08-06 21:36:38 +02:00
Jean-Pierre André c6c14cb256 Fixed zeroing the end of fragmented ex-holes 2010-07-22 15:04:53 +02:00
Jean-Pierre André f76d0aacf1 Fixed processing end of partial runlist for compressed files 2010-07-22 15:02:09 +02:00
Jean-Pierre André 400632dea5 Fixed updating compressed sizes 2010-07-22 15:00:37 +02:00
Jean-Pierre André f65aa991a9 Fixed excessive cluster allocation within big holes 2010-07-22 14:48:19 +02:00
Jean-Pierre André 09df7eade5 Fixed creating empty encrypted extended attributes 2010-07-22 14:46:01 +02:00
Jean-Pierre André 49ab780739 Fixed a sanity check when closing a compressed file 2010-07-22 14:37:01 +02:00
Jean-Pierre André b1de6e16fb Fixed compressed attribute made non resident to leave space for another one 2010-06-18 14:02:58 +02:00
Jean-Pierre André ed448ea8b4 fixed cached allocation for compressed files 2010-06-14 14:40:17 +02:00
Jean-Pierre André 207318b504 fixed compression when a runlist relocation is needed 2010-06-14 14:33:34 +02:00
Jean-Pierre André 15c4d282ce Enable/disable compression according to option 2010-06-03 10:11:42 +02:00
Jean-Pierre André ba083200aa Fixed close() after a fragmented truncate of a compressed file 2010-06-03 10:06:08 +02:00
Jean-Pierre André b20d1020fc Fixed data size after an upsizing truncate of a compressed file 2010-05-28 16:32:28 +02:00
Jean-Pierre André 1eed61e1a9 enabled downsizing compressed files 2010-05-25 10:29:34 +02:00
Jean-Pierre André a192775e2a developed overwriting compressed files 2010-05-25 10:25:31 +02:00
Jean-Pierre André 51a9ab8c48 fixed compressions on parent directory or NTFS version < 3.0 2010-05-25 09:52:34 +02:00
Jean-Pierre André 9438188703 fixed a bad error checking when closing a compressed file 2010-04-19 11:03:30 +02:00
jpandre c8fa404931 Fixed a return error code (Fabian Keil) 2010-01-21 08:15:27 +00:00
jpandre 6306826077 Removed an unneeded variable (Fabian Keil) 2010-01-21 08:13:27 +00:00
jpandre f1bd6652b1 Fixed uninitialized variable when closing a file on a read-only partition 2010-01-16 18:17:55 +00:00
jpandre da39179421 Merged Anton's patch for $TXF_DATA attribute 2010-01-08 11:15:46 +00:00
jpandre 393af928d9 Prevented TXF_DATA attribute from being made non-resident 2010-01-04 08:07:29 +00:00
jpandre d75f69d80e Cached inode data for subsequent use 2009-12-18 08:12:23 +00:00
jpandre 195945cdc0 Evaluated file names collations in a single parsing 2009-12-16 09:45:28 +00:00
jpandre 2db43fc118 Included <limits.h> explicitly, needed in some environments 2009-12-15 18:25:15 +00:00
jpandre 029faaabc6 Restricted compression to volumes with cluster size not greater than 4096 2009-12-09 10:52:21 +00:00
jpandre a69136d90b Downgraded an error message 2009-11-25 14:22:28 +00:00
jpandre 892f763d31 Fixed cluster allocation when overwriting a hole in a sparse file 2009-09-29 18:52:02 +00:00
jpandre 88473752c5 Allowed creating holes in compressed files 2009-08-11 08:02:59 +00:00
jpandre c79b3777ca Implemented backup/restoring of encrypted files (by Martin Bene) 2009-05-20 14:17:31 +00:00
jpandre f41cf451f5 Set compression parameters before making data non resident 2009-04-25 12:06:40 +00:00
jpandre c87fc027df Secured write position to compressed files 2009-04-25 12:02:20 +00:00
jpandre e4136e654c Set the data flags in base attribute and all the extents 2009-04-08 19:15:29 +00:00
jpandre 2fbaecd759 Extended transparent compression support to sequential writing to compressed files 2009-04-03 13:33:24 +00:00
jpandre 03755a9ba5 Adapted to ntfs-3g-2009.4.4 2009-04-03 06:53:12 +00:00
jpandre 2a1d75a3da Adapted to ntfs-3g.2009.3.8 2009-03-27 09:10:00 +00:00
jpandre 224c2fcda2 Changed attribute name offset when there is no name (Faisal Puthuparackat) 2009-03-02 20:24:16 +00:00
jpandre 071b5f0cb8 Removed temporary code for comparing mapping pairs size to older version 2009-03-02 20:17:34 +00:00
jpandre 571c057d05 Fixed moving the standard information attribute to an extended MFT record (Szabolcs Szakacsits) 2009-02-27 08:15:06 +00:00
jpandre ddfb2175a9 Improved creating gaps in sparse files 2009-02-13 10:37:53 +00:00
jpandre 93b695f1cc Adapted to ntfs-3g-2009.2.1 2009-02-12 20:32:21 +00:00
jpandre 2dc7362ba9 Improved computation of runlist for fragmented files O(n) instead of O(n*n) 2009-02-03 17:12:04 +00:00
jpandre 9a5e5bbfe3 Avoided logging of removal of non-existent extended attribute 2009-01-27 12:59:10 +00:00
jpandre 11216c6942 Adapted to ntfs-3g-2009.1.1 2009-01-23 11:11:44 +00:00
jpandre 9b996d31b9 Relocated code for setting/retrieving NTFS attribs 2009-01-17 08:37:17 +00:00
jpandre ca6466c6bb Mapped a few NTFS internal data to extended attributes 2009-01-05 13:56:05 +00:00
jpandre 6faf38df12 Adapted to ntfs-3g.1.5130 2008-12-01 15:29:23 +00:00
jpandre a58ff9073d Improved bit countings 2008-09-06 09:34:23 +00:00
jpandre 499e106341 Adapted to ntfs-3g.1.2812 2008-08-16 15:17:47 +00:00
jpandre 412838056a Adapted to ntfs-3g.1.2712 2008-07-13 17:55:57 +00:00
szaka a6d8c6b1a6 new: use tabulated logging; add ntfs_log_enter() and ntfs_log_leave()
and convert the most commonly used functions
2008-06-30 00:13:23 +00:00
szaka 1098244bbf copyright update 2008-06-29 23:13:32 +00:00
jpandre 7c05f13884 Adapted to ntfs-3g-1.2531 2008-05-30 07:40:22 +00:00
jpandre 75a9b157f3 Adapted to ntfs-3g.1.2412 2008-04-14 15:49:28 +00:00
szaka 77e5ff36d1 ntfs_make_room_for_attr(): "no space" condition must be ENOSPC, not EINVAL
ntfs_attr_add(): fix adding attribute which can be resident and non-resident
2008-04-02 17:21:11 +00:00
jpandre 53fa335624 Adapted to ntfs-3g.1.2310 2008-03-10 15:35:54 +00:00
szaka 906637db9e posix file time updates (Yura Pakhuchiy, Szabolcs Szakacsits) 2007-11-13 00:11:51 +00:00
jpandre a8dc8655d0 Adjusted to v 1.1030 2007-10-29 16:28:33 +00:00
jpandre a8a33f0bc3 Reverted back relay for free() and consequences on const ptrs 2007-10-09 13:33:11 +00:00
jpandre 0fcd72cf55 Cleaned code

							
						
2007-10-09 08:01:37 +00:00
szaka 4206ceddce fix warnings 2007-10-08 22:03:31 +00:00
jpandre 75f1f4c112 Upgraded to v1.1004 2007-10-06 14:34:49 +00:00
szaka a4277b3d0f ntfs_attr_pwrite: write cluster size blocks if it's possible when expanding
attributes. This will cause the kernel not to seek and read disk blocks for
filling the end of the buffer which increases write speed at least by 2-11
fold typically. (David Fox, Szabolcs Szakacsits)
2007-09-09 21:39:37 +00:00
szaka 84be568f75 ntfs_attr_pread: log all errors 2007-07-20 21:16:34 +00:00
szaka b5973632e9 ntfs_attr_pwrite, ntfs_attr_mst_pwrite: log errors 2007-07-18 22:44:11 +00:00
szaka 7444b30fc4 ntfs_attr_find_in_attrdef: log all errors 2007-07-16 20:36:21 +00:00