]> git.sven.stormbind.net Git - sven/fuse-exfat.git/commitdiff
Imported Upstream version 0.9.8 upstream/0.9.8
authorSven Hoexter <sven@timegate.de>
Sun, 12 Aug 2012 17:17:10 +0000 (19:17 +0200)
committerSven Hoexter <sven@timegate.de>
Sun, 12 Aug 2012 17:17:10 +0000 (19:17 +0200)
16 files changed:
ChangeLog
SConstruct
fuse/main.c
libexfat/byteorder.h
libexfat/cluster.c
libexfat/exfat.h
libexfat/exfatfs.h
libexfat/io.c
libexfat/log.c
libexfat/lookup.c
libexfat/mount.c
libexfat/node.c
libexfat/time.c
libexfat/utf.c
libexfat/utils.c
libexfat/version.h

index d492c393923df8789cf066e6f426891296f7bb7c..e42a095e09bbf0618f103e691422683a2c60201b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+0.9.8 (2012-08-09)
+
+* The mkfs utility can now create huge file systems (up to several exabytes).
+* Fixed handling of characters beyond Basic Multilingual Plane.
+* Echo messages to syslog only if stderr is not connected to a terminal.
+
 0.9.7 (2012-03-08)
 
 * Out-of-the-box FreeBSD support (via ublio library).
index 14bd10e8fbcfbd6e31e38af4b3faf62a9e984250..3206c545abf656197954233c619887994dd95431 100644 (file)
@@ -2,7 +2,7 @@
 #      SConstruct (10.09.09)
 #      SConscript for all components.
 #
-#      Copyright (C) 2009, 2010  Andrew Nayenko
+#      Copyright (C) 2010-2012  Andrew Nayenko
 #
 #      This program is free software: you can redistribute it and/or modify
 #      it under the terms of the GNU General Public License as published by
@@ -36,16 +36,23 @@ if 'CCFLAGS' in os.environ:
 # Set default CCFLAGS for known compilers
 if not conf.env['CCFLAGS']:
        if conf.env['CC'] == 'gcc':
-               conf.env.Replace(CCFLAGS = '-Wall -O2 -ggdb')
+               conf.env.Replace(CCFLAGS = '-Wall -O2 -ggdb -std=c99')
        elif conf.env['CC'] == 'clang':
-               conf.env.Replace(CCFLAGS = '-Wall -O2 -g')
-conf.env.Append(CPPDEFINES = {'FUSE_USE_VERSION': 26})
+               conf.env.Replace(CCFLAGS = '-Wall -O2 -g -std=c99')
+if 'CPPFLAGS' in os.environ:
+       conf.env.Replace(CPPFLAGS = os.environ['CPPFLAGS'])
 conf.env.Append(CPPDEFINES = {'_FILE_OFFSET_BITS' : 64})
 conf.env.Append(CPPPATH = ['libexfat'])
 if 'LDFLAGS' in os.environ:
        conf.env.Append(LINKFLAGS = os.environ['LDFLAGS'])
 conf.env.Append(LIBPATH = ['libexfat'])
 
+# GNU/Linux requires _BSD_SOURCE define for vsyslog(), _XOPEN_SOURCE >= 500 for
+# pread(), pwrite(), snprintf(), strdup(), etc. Everything needed is enabled by
+# _GNU_SOURCE.
+if platform.system() == 'Linux':
+       conf.env.Append(CPPDEFINES = '_GNU_SOURCE');
+
 # __DARWIN_64_BIT_INO_T=0 define is needed because since Snow Leopard inode
 # numbers are 64-bit by default, but libfuse operates 32-bit ones. This define
 # forces 32-bit inode declaration in system headers, but it's also possible to
index 9155912ea1f1a21227fb86eea15953ae76296ff0..643df3f7e7557bf51282a9fc566a6c3b281de901 100644 (file)
@@ -2,7 +2,7 @@
        main.c (01.09.09)
        FUSE-based exFAT implementation. Requires FUSE 2.6 or later.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#define FUSE_USE_VERSION 26
 #include <fuse.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -401,7 +402,7 @@ int main(int argc, char* argv[])
                else if (strcmp(*pp, "-v") == 0)
                {
                        free(mount_options);
-                       puts("Copyright (C) 2009  Andrew Nayenko");
+                       puts("Copyright (C) 2010-2012  Andrew Nayenko");
                        return 0;
                }
                else if (spec == NULL)
index 6b38646313871081700c881ba2ca6d936f3fc660..abcf811f4ea0a77b1c16887d6087439292388c4b 100644 (file)
@@ -2,7 +2,7 @@
        byteorder.h (12.01.10)
        Endianness stuff. exFAT uses little-endian byte order.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 1257c7ae45c3789ce500aeaebe115a9640ede72c..0418932ec802f66590fcf29139a2d075aa64e335 100644 (file)
@@ -2,7 +2,7 @@
        cluster.c (03.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index bca0d240f5496ee6baffa13e9be1e13100909cbc..392c95d09c251897abcb084da35558cb806c8a0e 100644 (file)
@@ -3,7 +3,7 @@
        Definitions of structures and constants used in exFAT file system
        implementation.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
 #define IS_CONTIGUOUS(node) (((node).flags & EXFAT_ATTRIB_CONTIGUOUS) != 0)
 #define SECTOR_SIZE(sb) (1 << (sb).sector_bits)
 #define CLUSTER_SIZE(sb) (SECTOR_SIZE(sb) << (sb).spc_bits)
-#define CLUSTER_INVALID(c) ((c) == EXFAT_CLUSTER_BAD || (c) == EXFAT_CLUSTER_END)
+#define CLUSTER_INVALID(c) ((c) > EXFAT_LAST_DATA_CLUSTER)
 
 #define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
 #define DIV_ROUND_UP(x, d) (((x) + (d) - 1) / (d))
+#define ROUND_UP(x, d) (DIV_ROUND_UP(x, d) * (d))
 
 #define BMAP_GET(bitmap, index) \
        (((uint8_t*) bitmap)[(index) / 8] & (1u << ((index) % 8)))
index 61e39a1261ba48afa79966deee0a2adf4b794a78..5a8e39fda58337a9b80077e2dc0f68a0372f183c 100644 (file)
@@ -2,7 +2,7 @@
        exfatfs.h (29.08.09)
        Definitions of structures and constants used in exFAT file system.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@
 typedef uint32_t cluster_t;            /* cluster number */
 
 #define EXFAT_FIRST_DATA_CLUSTER 2
+#define EXFAT_LAST_DATA_CLUSTER 0xfffffff6
 
 #define EXFAT_CLUSTER_FREE         0 /* free cluster */
 #define EXFAT_CLUSTER_BAD 0xfffffff7 /* cluster contains bad sector */
index c9c1e2bc324e5661dbc51931632ef9b00a26cddf..f0beddc97b0ae424c683e858a937be3379fee097 100644 (file)
@@ -2,7 +2,7 @@
        io.c (02.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -18,7 +18,6 @@
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#define _XOPEN_SOURCE 500 /* for pread() and pwrite() in Linux */
 #include "exfat.h"
 #include <inttypes.h>
 #include <sys/types.h>
@@ -32,7 +31,7 @@
 #include <ublio.h>
 #endif
 
-#if _FILE_OFFSET_BITS != 64
+#if !defined(_FILE_OFFSET_BITS) || (_FILE_OFFSET_BITS != 64)
        #error You should define _FILE_OFFSET_BITS=64
 #endif
 
index 7a2b35d90005f172605e3286a7dfb3f288cb65d4..8b589b406d238ee6388b631455eda37a72cbafe5 100644 (file)
@@ -2,7 +2,7 @@
        log.c (02.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
 #include "exfat.h"
 #include <stdarg.h>
 #include <syslog.h>
+#include <unistd.h>
 
 int exfat_errors;
 
@@ -40,7 +41,8 @@ void exfat_bug(const char* format, ...)
        va_end(ap);
        fputs(".\n", stderr);
 
-       vsyslog(LOG_CRIT, format, aq);
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_CRIT, format, aq);
        va_end(aq);
 
        abort();
@@ -63,7 +65,8 @@ void exfat_error(const char* format, ...)
        va_end(ap);
        fputs(".\n", stderr);
 
-       vsyslog(LOG_ERR, format, aq);
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_ERR, format, aq);
        va_end(aq);
 }
 
@@ -84,7 +87,8 @@ void exfat_warn(const char* format, ...)
        va_end(ap);
        fputs(".\n", stderr);
 
-       vsyslog(LOG_WARNING, format, aq);
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_WARNING, format, aq);
        va_end(aq);
 }
 
index 619dcea4eb769157a52f05a19069e8be27fc5231..d65097689fb40c090410290aae149e044129b129 100644 (file)
@@ -2,7 +2,7 @@
        lookup.c (02.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 521b539085d7fdf52dd7a5bcd83f7f40efd4f447..a62466b1854fb004616ee0760337c9a1bb93dcf8 100644 (file)
@@ -2,7 +2,7 @@
        mount.c (22.10.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 2ae724d78228876ccb976bd8e821e52f4bdc5e90..4cbb3e2d6d06f976d9e1097726662cb8a3e1056e 100644 (file)
@@ -2,7 +2,7 @@
        node.c (09.10.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 2e22a99bf9de73878f4a35df43db17fb43696b6b..890930eacbcdca19faef16fca8667458db4940b4 100644 (file)
@@ -2,7 +2,7 @@
        time.c (03.02.12)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 3f0dc1971ba04368a414112c3eec81bb1c9d00d4..983c7930ba856e359ce12137edffb3eaa93d0458 100644 (file)
@@ -2,7 +2,7 @@
        utf.c (13.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -89,6 +89,7 @@ static const le16_t* utf16_to_wchar(const le16_t* input, wchar_t* wc,
                        return NULL;
                *wc = ((wchar_t) (le16_to_cpu(input[0]) & 0x3ff) << 10);
                *wc |= (le16_to_cpu(input[1]) & 0x3ff);
+               *wc += 0x10000;
                return input + 2;
        }
        else
@@ -186,6 +187,7 @@ static le16_t* wchar_to_utf16(le16_t* output, wchar_t wc, size_t outsize)
        }
        if (outsize < 2)
                return NULL;
+       wc -= 0x10000;
        output[0] = cpu_to_le16(0xd800 | ((wc >> 10) & 0x3ff));
        output[1] = cpu_to_le16(0xdc00 | (wc & 0x3ff));
        return output + 2;
index c165cf90d16dbd5ec4973e324e888faf2ffb5439..7c47f4d382bac8ba9caa92ac6f1055a0f11b324f 100644 (file)
@@ -2,7 +2,7 @@
        utils.c (04.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -133,11 +133,13 @@ le16_t exfat_calc_name_hash(const struct exfat* ef, const le16_t* name)
 void exfat_humanize_bytes(uint64_t value, struct exfat_human_bytes* hb)
 {
        size_t i;
-       const char* units[] = {"bytes", "KB", "MB", "GB", "TB", "PB"};
+       /* 16 EB (minus 1 byte) is the largest size that can be represented by
+          uint64_t */
+       const char* units[] = {"bytes", "KB", "MB", "GB", "TB", "PB", "EB"};
        uint64_t divisor = 1;
        uint64_t temp = 0;
 
-       for (i = 0; i < sizeof(units) / sizeof(units[0]) - 1; i++, divisor *= 1024)
+       for (i = 0; ; i++, divisor *= 1024)
        {
                temp = (value + divisor / 2) / divisor;
 
index aa636f8bfa4e5576286eac679f67d23e6f04e317..f35cb4fdfcfb85feffba6033ef9feba6d704ab72 100644 (file)
@@ -2,7 +2,7 @@
        version.h (12.06.10)
        Version constants.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -23,6 +23,6 @@
 
 #define EXFAT_VERSION_MAJOR 0
 #define EXFAT_VERSION_MINOR 9
-#define EXFAT_VERSION_PATCH 7
+#define EXFAT_VERSION_PATCH 8
 
 #endif /* ifndef VERSION_H_INCLUDED */