X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=libexfat%2Fexfat.h;h=a141c673c5170c29f505185ebc308c3844b39fd5;hb=c05a94a1d347abff3a80a3929b1814252571bde6;hp=d0dbeae8acf07abf7df111f3434b81d57e3b45c0;hpb=1a11935a441648480daecbb1b8f3eb228f1bffe1;p=android-x86%2Fexternal-exfat.git diff --git a/libexfat/exfat.h b/libexfat/exfat.h index d0dbeae..a141c67 100644 --- a/libexfat/exfat.h +++ b/libexfat/exfat.h @@ -4,7 +4,7 @@ implementation. Free exFAT implementation. - Copyright (C) 2010-2013 Andrew Nayenko + Copyright (C) 2010-2015 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 @@ -24,15 +24,16 @@ #ifndef EXFAT_H_INCLUDED #define EXFAT_H_INCLUDED +#include "config.h" +#include "compiler.h" +#include "exfatfs.h" +#include "version.h" #include #include #include #include #include #include -#include "compiler.h" -#include "exfatfs.h" -#include "version.h" #define EXFAT_NAME_MAX 256 #define EXFAT_ATTRIB_CONTIGUOUS 0x10000 @@ -51,7 +52,6 @@ #define ROUND_UP(x, d) (DIV_ROUND_UP(x, d) * (d)) #define UTF8_BYTES(c) ((c) * 6) /* UTF-8 character can occupy up to 6 bytes */ -typedef size_t bitmap_t; #define BMAP_SIZE(count) (ROUND_UP(count, sizeof(bitmap_t) * 8) / 8) #define BMAP_BLOCK(index) ((index) / sizeof(bitmap_t) / 8) #define BMAP_MASK(index) ((bitmap_t) 1 << ((index) % (sizeof(bitmap_t) * 8))) @@ -62,6 +62,10 @@ typedef size_t bitmap_t; #define BMAP_CLR(bitmap, index) \ ((bitmap)[BMAP_BLOCK(index)] &= ~BMAP_MASK(index)) +/* The size of off_t type must be 64 bits. File systems larger than 2 GB will + be corrupted with 32-bit off_t. */ +STATIC_ASSERT(sizeof(off_t) == 8); + struct exfat_node { struct exfat_node* parent; @@ -166,7 +170,7 @@ cluster_t exfat_next_cluster(const struct exfat* ef, const struct exfat_node* node, cluster_t cluster); cluster_t exfat_advance_cluster(const struct exfat* ef, struct exfat_node* node, uint32_t count); -void exfat_flush(struct exfat* ef); +int exfat_flush(struct exfat* ef); int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size, bool erase); uint32_t exfat_count_free_clusters(const struct exfat* ef); @@ -194,9 +198,10 @@ size_t utf16_length(const le16_t* str); struct exfat_node* exfat_get_node(struct exfat_node* node); void exfat_put_node(struct exfat* ef, struct exfat_node* node); +int exfat_cleanup_node(struct exfat* ef, struct exfat_node* node); int exfat_cache_directory(struct exfat* ef, struct exfat_node* dir); void exfat_reset_cache(struct exfat* ef); -void exfat_flush_node(struct exfat* ef, struct exfat_node* node); +int exfat_flush_node(struct exfat* ef, struct exfat_node* node); int exfat_unlink(struct exfat* ef, struct exfat_node* node); int exfat_rmdir(struct exfat* ef, struct exfat_node* node); int exfat_mknod(struct exfat* ef, const char* path);