summaryrefslogtreecommitdiff
Diffstat
-rwxr-xr-xAUTHORS23
-rwxr-xr-xAndroid.mk89
-rwxr-xr-xAndroid.mk.bak89
-rwxr-xr-xCOPYING340
-rwxr-xr-xCOPYING.LIB482
-rwxr-xr-xCREDITS41
-rwxr-xr-xChangeLog7
-rwxr-xr-xINSTALL237
-rwxr-xr-xMakefile715
-rwxr-xr-xMakefile.am66
-rwxr-xr-xMakefile.in722
-rwxr-xr-xNEWS5
-rwxr-xr-xREADME68
-rwxr-xr-xaclocal.m47723
-rwxr-xr-xautogen.sh22
-rwxr-xr-xcompile142
-rwxr-xr-xconfig.guess1536
-rwxr-xr-xconfig.h361
-rwxr-xr-xconfig.h.in350
-rwxr-xr-xconfig.log3290
-rwxr-xr-xconfig.status1220
-rwxr-xr-xconfig.sub1658
-rwxr-xr-xconfigure25302
-rwxr-xr-xconfigure.ac441
-rwxr-xr-xdepcomp589
-rwxr-xr-xinclude/Makefile.am4
-rwxr-xr-xinclude/Makefile.in503
-rwxr-xr-xinclude/fuse-lite/Makefile.am10
-rwxr-xr-xinclude/fuse-lite/Makefile.in400
-rwxr-xr-xinclude/fuse-lite/fuse.h654
-rwxr-xr-xinclude/fuse-lite/fuse_common.h193
-rwxr-xr-xinclude/fuse-lite/fuse_kernel.h422
-rwxr-xr-xinclude/fuse-lite/fuse_lowlevel.h1375
-rwxr-xr-xinclude/fuse-lite/fuse_lowlevel_compat.h16
-rwxr-xr-xinclude/fuse-lite/fuse_opt.h261
-rwxr-xr-xinclude/ntfs-3g/Makefile.am45
-rwxr-xr-xinclude/ntfs-3g/Makefile.in471
-rwxr-xr-xinclude/ntfs-3g/acls.h199
-rwxr-xr-xinclude/ntfs-3g/attrib.h358
-rwxr-xr-xinclude/ntfs-3g/attrlist.h51
-rwxr-xr-xinclude/ntfs-3g/bitmap.h96
-rwxr-xr-xinclude/ntfs-3g/bootsect.h42
-rwxr-xr-xinclude/ntfs-3g/cache.h115
-rwxr-xr-xinclude/ntfs-3g/collate.h34
-rwxr-xr-xinclude/ntfs-3g/compat.h69
-rwxr-xr-xinclude/ntfs-3g/compress.h39
-rwxr-xr-xinclude/ntfs-3g/debug.h47
-rwxr-xr-xinclude/ntfs-3g/device.h128
-rwxr-xr-xinclude/ntfs-3g/device_io.h77
-rwxr-xr-xinclude/ntfs-3g/dir.h128
-rwxr-xr-xinclude/ntfs-3g/efs.h30
-rwxr-xr-xinclude/ntfs-3g/endians.h203
-rwxr-xr-xinclude/ntfs-3g/index.h167
-rwxr-xr-xinclude/ntfs-3g/inode.h225
-rwxr-xr-xinclude/ntfs-3g/layout.h2661
-rwxr-xr-xinclude/ntfs-3g/lcnalloc.h50
-rwxr-xr-xinclude/ntfs-3g/logfile.h394
-rwxr-xr-xinclude/ntfs-3g/logging.h118
-rwxr-xr-xinclude/ntfs-3g/mft.h132
-rwxr-xr-xinclude/ntfs-3g/misc.h30
-rwxr-xr-xinclude/ntfs-3g/mst.h34
-rwxr-xr-xinclude/ntfs-3g/ntfstime.h131
-rwxr-xr-xinclude/ntfs-3g/object_id.h35
-rwxr-xr-xinclude/ntfs-3g/param.h63
-rwxr-xr-xinclude/ntfs-3g/reparse.h39
-rwxr-xr-xinclude/ntfs-3g/runlist.h89
-rwxr-xr-xinclude/ntfs-3g/security.h353
-rwxr-xr-xinclude/ntfs-3g/support.h85
-rwxr-xr-xinclude/ntfs-3g/types.h124
-rwxr-xr-xinclude/ntfs-3g/unistr.h116
-rwxr-xr-xinclude/ntfs-3g/volume.h277
-rwxr-xr-xinstall-sh519
-rwxr-xr-xlibfuse-lite/Makefile.am28
-rwxr-xr-xlibfuse-lite/Makefile.in572
-rwxr-xr-xlibfuse-lite/fuse.c2789
-rwxr-xr-xlibfuse-lite/fuse_i.h25
-rwxr-xr-xlibfuse-lite/fuse_kern_chan.c96
-rwxr-xr-xlibfuse-lite/fuse_loop.c40
-rwxr-xr-xlibfuse-lite/fuse_lowlevel.c1395
-rwxr-xr-xlibfuse-lite/fuse_misc.h106
-rwxr-xr-xlibfuse-lite/fuse_opt.c368
-rwxr-xr-xlibfuse-lite/fuse_session.c183
-rwxr-xr-xlibfuse-lite/fuse_signals.c73
-rwxr-xr-xlibfuse-lite/fusermount.c772
-rwxr-xr-xlibfuse-lite/helper.c40
-rwxr-xr-xlibfuse-lite/mount.c256
-rwxr-xr-xlibfuse-lite/mount_util.c219
-rwxr-xr-xlibfuse-lite/mount_util.h22
-rwxr-xr-xlibntfs-3g/Makefile.am79
-rwxr-xr-xlibntfs-3g/Makefile.in841
-rwxr-xr-xlibntfs-3g/acls.c4296
-rwxr-xr-xlibntfs-3g/attrib.c5913
-rwxr-xr-xlibntfs-3g/attrlist.c314
-rwxr-xr-xlibntfs-3g/bitmap.c300
-rwxr-xr-xlibntfs-3g/bootsect.c285
-rwxr-xr-xlibntfs-3g/cache.c609
-rwxr-xr-xlibntfs-3g/collate.c271
-rwxr-xr-xlibntfs-3g/compat.c250
-rwxr-xr-xlibntfs-3g/compress.c1431
-rwxr-xr-xlibntfs-3g/debug.c79
-rwxr-xr-xlibntfs-3g/device.c730
-rwxr-xr-xlibntfs-3g/dir.c2582
-rwxr-xr-xlibntfs-3g/efs.c346
-rwxr-xr-xlibntfs-3g/index.c2063
-rwxr-xr-xlibntfs-3g/inode.c1566
-rwxr-xr-xlibntfs-3g/lcnalloc.c735
-rwxr-xr-xlibntfs-3g/libntfs-3g.pc.in10
-rwxr-xr-xlibntfs-3g/libntfs-3g.script.so.in2
-rwxr-xr-xlibntfs-3g/logfile.c737
-rwxr-xr-xlibntfs-3g/logging.c613
-rwxr-xr-xlibntfs-3g/mft.c1909
-rwxr-xr-xlibntfs-3g/misc.c61
-rwxr-xr-xlibntfs-3g/mst.c231
-rwxr-xr-xlibntfs-3g/object_id.c637
-rwxr-xr-xlibntfs-3g/reparse.c1222
-rwxr-xr-xlibntfs-3g/runlist.c2166
-rwxr-xr-xlibntfs-3g/security.c5167
-rwxr-xr-xlibntfs-3g/unistr.c1321
-rwxr-xr-xlibntfs-3g/unix_io.c386
-rwxr-xr-xlibntfs-3g/volume.c1663
-rwxr-xr-xlibntfs-3g/win32_io.c1477
-rwxr-xr-xlibtool7621
-rwxr-xr-xltmain.sh6956
-rwxr-xr-xm4/.keep0
-rwxr-xr-xmissing367
-rwxr-xr-xprog.IAB1071
-rwxr-xr-xprog.IAD5
-rwxr-xr-xprog.IMB466
-rwxr-xr-xprog.IMD2
-rwxr-xr-xprog.PFI2
-rwxr-xr-xprog.PO1
-rwxr-xr-xprog.PR14
-rwxr-xr-xprog.PRI219
-rwxr-xr-xprog.PS979
-rwxr-xr-xprog.SearchResults3
-rwxr-xr-xprog.WK39
-rwxr-xr-xsrc/lowntfs-3g.c4492
-rwxr-xr-xsrc/ntfs-3g.8.in349
-rwxr-xr-xsrc/ntfs-3g.c4461
-rwxr-xr-xsrc/ntfs-3g.probe.8.in81
-rwxr-xr-xsrc/ntfs-3g.probe.c163
-rwxr-xr-xsrc/ntfs-3g.secaudit.8.in171
-rwxr-xr-xsrc/ntfs-3g.usermap.8.in96
-rwxr-xr-xsrc/secaudit.c7176
-rwxr-xr-xsrc/secaudit.h731
-rwxr-xr-xsrc/test.c88
-rwxr-xr-xsrc/usermap.c1356
-rwxr-xr-xstamp-h11
148 files changed, 141286 insertions, 0 deletions
diff --git a/libntfs-3g/bitmap.c b/libntfs-3g/bitmap.c
new file mode 100755
index 0000000..65162a2
--- a/dev/null
+++ b/libntfs-3g/bitmap.c
@@ -0,0 +1,300 @@
+/**
+ * bitmap.c - Bitmap handling code. Originated from the Linux-NTFS project.
+ *
+ * Copyright (c) 2002-2006 Anton Altaparmakov
+ * Copyright (c) 2004-2005 Richard Russon
+ * Copyright (c) 2004-2008 Szabolcs Szakacsits
+ *
+ * This program/include file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program (in the main directory of the NTFS-3G
+ * distribution in the file COPYING); if not, write to the Free Software
+ * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include "types.h"
+#include "attrib.h"
+#include "bitmap.h"
+#include "debug.h"
+#include "logging.h"
+#include "misc.h"
+
+/**
+ * ntfs_bit_set - set a bit in a field of bits
+ * @bitmap: field of bits
+ * @bit: bit to set
+ * @new_value: value to set bit to (0 or 1)
+ *
+ * Set the bit @bit in the @bitmap to @new_value. Ignore all errors.
+ */
+void ntfs_bit_set(u8 *bitmap, const u64 bit, const u8 new_value)
+{
+ if (!bitmap || new_value > 1)
+ return;
+ if (!new_value)
+ bitmap[bit >> 3] &= ~(1 << (bit & 7));
+ else
+ bitmap[bit >> 3] |= (1 << (bit & 7));
+}
+
+/**
+ * ntfs_bit_get - get value of a bit in a field of bits
+ * @bitmap: field of bits
+ * @bit: bit to get
+ *
+ * Get and return the value of the bit @bit in @bitmap (0 or 1).
+ * Return -1 on error.
+ */
+char ntfs_bit_get(const u8 *bitmap, const u64 bit)
+{
+ if (!bitmap)
+ return -1;
+ return (bitmap[bit >> 3] >> (bit & 7)) & 1;
+}
+
+/**
+ * ntfs_bit_get_and_set - get value of a bit in a field of bits and set it
+ * @bitmap: field of bits
+ * @bit: bit to get/set
+ * @new_value: value to set bit to (0 or 1)
+ *
+ * Return the value of the bit @bit and set it to @new_value (0 or 1).
+ * Return -1 on error.
+ */
+char ntfs_bit_get_and_set(u8 *bitmap, const u64 bit, const u8 new_value)
+{
+ register u8 old_bit, shift;
+
+ if (!bitmap || new_value > 1)
+ return -1;
+ shift = bit & 7;
+ old_bit = (bitmap[bit >> 3] >> shift) & 1;
+ if (new_value != old_bit)
+ bitmap[bit >> 3] ^= 1 << shift;
+ return old_bit;
+}
+
+/**
+ * ntfs_bitmap_set_bits_in_run - set a run of bits in a bitmap to a value
+ * @na: attribute containing the bitmap
+ * @start_bit: first bit to set
+ * @count: number of bits to set
+ * @value: value to set the bits to (i.e. 0 or 1)
+ *
+ * Set @count bits starting at bit @start_bit in the bitmap described by the
+ * attribute @na to @value, where @value is either 0 or 1.
+ *
+ * On success return 0 and on error return -1 with errno set to the error code.
+ */
+static int ntfs_bitmap_set_bits_in_run(ntfs_attr *na, s64 start_bit,
+ s64 count, int value)
+{
+ s64 bufsize, br;
+ u8 *buf, *lastbyte_buf;
+ int bit, firstbyte, lastbyte, lastbyte_pos, tmp, ret = -1;
+
+ if (!na || start_bit < 0 || count < 0) {
+ errno = EINVAL;
+ ntfs_log_perror("%s: Invalid argument (%p, %lld, %lld)",
+ __FUNCTION__, na, (long long)start_bit, (long long)count);
+ return -1;
+ }
+
+ bit = start_bit & 7;
+ if (bit)
+ firstbyte = 1;
+ else
+ firstbyte = 0;
+
+ /* Calculate the required buffer size in bytes, capping it at 8kiB. */
+ bufsize = ((count - (bit ? 8 - bit : 0) + 7) >> 3) + firstbyte;
+ if (bufsize > 8192)
+ bufsize = 8192;
+
+ buf = ntfs_malloc(bufsize);
+ if (!buf)
+ return -1;
+
+ /* Depending on @value, zero or set all bits in the allocated buffer. */
+ memset(buf, value ? 0xff : 0, bufsize);
+
+ /* If there is a first partial byte... */
+ if (bit) {
+ /* read it in... */
+ br = ntfs_attr_pread(na, start_bit >> 3, 1, buf);
+ if (br != 1) {
+ if (br >= 0)
+ errno = EIO;
+ goto free_err_out;
+ }
+ /* and set or clear the appropriate bits in it. */
+ while ((bit & 7) && count--) {
+ if (value)
+ *buf |= 1 << bit++;
+ else
+ *buf &= ~(1 << bit++);
+ }
+ /* Update @start_bit to the new position. */
+ start_bit = (start_bit + 7) & ~7;
+ }
+
+ /* Loop until @count reaches zero. */
+ lastbyte = 0;
+ lastbyte_buf = NULL;
+ bit = count & 7;
+ do {
+ /* If there is a last partial byte... */
+ if (count > 0 && bit) {
+ lastbyte_pos = ((count + 7) >> 3) + firstbyte;
+ if (!lastbyte_pos) {
+ // FIXME: Eeek! BUG!
+ ntfs_log_error("Lastbyte is zero. Leaving "
+ "inconsistent metadata.\n");
+ errno = EIO;
+ goto free_err_out;
+ }
+ /* and it is in the currently loaded bitmap window... */
+ if (lastbyte_pos <= bufsize) {
+ lastbyte_buf = buf + lastbyte_pos - 1;
+
+ /* read the byte in... */
+ br = ntfs_attr_pread(na, (start_bit + count) >>
+ 3, 1, lastbyte_buf);
+ if (br != 1) {
+ // FIXME: Eeek! We need rollback! (AIA)
+ if (br >= 0)
+ errno = EIO;
+ ntfs_log_perror("Reading of last byte "
+ "failed (%lld). Leaving inconsistent "
+ "metadata", (long long)br);
+ goto free_err_out;
+ }
+ /* and set/clear the appropriate bits in it. */
+ while (bit && count--) {
+ if (value)
+ *lastbyte_buf |= 1 << --bit;
+ else
+ *lastbyte_buf &= ~(1 << --bit);
+ }
+ /* We don't want to come back here... */
+ bit = 0;
+ /* We have a last byte that we have handled. */
+ lastbyte = 1;
+ }
+ }
+
+ /* Write the prepared buffer to disk. */
+ tmp = (start_bit >> 3) - firstbyte;
+ br = ntfs_attr_pwrite(na, tmp, bufsize, buf);
+ if (br != bufsize) {
+ // FIXME: Eeek! We need rollback! (AIA)
+ if (br >= 0)
+ errno = EIO;
+ ntfs_log_perror("Failed to write buffer to bitmap "
+ "(%lld != %lld). Leaving inconsistent metadata",
+ (long long)br, (long long)bufsize);
+ goto free_err_out;
+ }
+
+ /* Update counters. */
+ tmp = (bufsize - firstbyte - lastbyte) << 3;
+ if (firstbyte) {
+ firstbyte = 0;
+ /*
+ * Re-set the partial first byte so a subsequent write
+ * of the buffer does not have stale, incorrect bits.
+ */
+ *buf = value ? 0xff : 0;
+ }
+ start_bit += tmp;
+ count -= tmp;
+ if (bufsize > (tmp = (count + 7) >> 3))
+ bufsize = tmp;
+
+ if (lastbyte && count != 0) {
+ // FIXME: Eeek! BUG!
+ ntfs_log_error("Last buffer but count is not zero "
+ "(%lld). Leaving inconsistent metadata.\n",
+ (long long)count);
+ errno = EIO;
+ goto free_err_out;
+ }
+ } while (count > 0);
+
+ ret = 0;
+
+free_err_out:
+ free(buf);
+ return ret;
+}
+
+/**
+ * ntfs_bitmap_set_run - set a run of bits in a bitmap
+ * @na: attribute containing the bitmap
+ * @start_bit: first bit to set
+ * @count: number of bits to set
+ *
+ * Set @count bits starting at bit @start_bit in the bitmap described by the
+ * attribute @na.
+ *
+ * On success return 0 and on error return -1 with errno set to the error code.
+ */
+int ntfs_bitmap_set_run(ntfs_attr *na, s64 start_bit, s64 count)
+{
+ int ret;
+
+ ntfs_log_enter("Set from bit %lld, count %lld\n",
+ (long long)start_bit, (long long)count);
+ ret = ntfs_bitmap_set_bits_in_run(na, start_bit, count, 1);
+ ntfs_log_leave("\n");
+ return ret;
+}
+
+/**
+ * ntfs_bitmap_clear_run - clear a run of bits in a bitmap
+ * @na: attribute containing the bitmap
+ * @start_bit: first bit to clear
+ * @count: number of bits to clear
+ *
+ * Clear @count bits starting at bit @start_bit in the bitmap described by the
+ * attribute @na.
+ *
+ * On success return 0 and on error return -1 with errno set to the error code.
+ */
+int ntfs_bitmap_clear_run(ntfs_attr *na, s64 start_bit, s64 count)
+{
+ int ret;
+
+ ntfs_log_enter("Clear from bit %lld, count %lld\n",
+ (long long)start_bit, (long long)count);
+ ret = ntfs_bitmap_set_bits_in_run(na, start_bit, count, 0);
+ ntfs_log_leave("\n");
+ return ret;
+}
+