diff options
Diffstat (limited to 'exfat/libexfat/exfat.h')
-rw-r--r-- | exfat/libexfat/exfat.h | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/exfat/libexfat/exfat.h b/exfat/libexfat/exfat.h index ff58e8414..5beba7cba 100644 --- a/exfat/libexfat/exfat.h +++ b/exfat/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,19 @@ #ifndef EXFAT_H_INCLUDED #define EXFAT_H_INCLUDED +#if defined(__ANDROID__) +#include "android_config.h" +#else +#include "config.h" +#endif +#include "compiler.h" +#include "exfatfs.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdbool.h> #include <sys/stat.h> #include <sys/types.h> -#include "compiler.h" -#include "exfatfs.h" -#include "version.h" #define EXFAT_NAME_MAX 256 #define EXFAT_ATTRIB_CONTIGUOUS 0x10000 @@ -51,7 +55,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 +65,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; @@ -73,7 +80,7 @@ struct exfat_node uint32_t fptr_index; cluster_t fptr_cluster; cluster_t entry_cluster; - off64_t entry_offset; + off_t entry_offset; cluster_t start_cluster; int flags; uint64_t size; @@ -139,18 +146,18 @@ struct exfat_dev* exfat_open(const char* spec, enum exfat_mode mode); int exfat_close(struct exfat_dev* dev); int exfat_fsync(struct exfat_dev* dev); enum exfat_mode exfat_get_mode(const struct exfat_dev* dev); -off64_t exfat_get_size(const struct exfat_dev* dev); -off64_t exfat_seek(struct exfat_dev* dev, off64_t offset, int whence); +off_t exfat_get_size(const struct exfat_dev* dev); +off_t exfat_seek(struct exfat_dev* dev, off_t offset, int whence); ssize_t exfat_read(struct exfat_dev* dev, void* buffer, size_t size); ssize_t exfat_write(struct exfat_dev* dev, const void* buffer, size_t size); ssize_t exfat_pread(struct exfat_dev* dev, void* buffer, size_t size, - off64_t offset); + off_t offset); ssize_t exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size, - off64_t offset); + off_t offset); ssize_t exfat_generic_pread(const struct exfat* ef, struct exfat_node* node, - void* buffer, size_t size, off64_t offset); + void* buffer, size_t size, off_t offset); ssize_t exfat_generic_pwrite(struct exfat* ef, struct exfat_node* node, - const void* buffer, size_t size, off64_t offset); + const void* buffer, size_t size, off_t offset); int exfat_opendir(struct exfat* ef, struct exfat_node* dir, struct exfat_iterator* it); @@ -161,16 +168,17 @@ int exfat_lookup(struct exfat* ef, struct exfat_node** node, int exfat_split(struct exfat* ef, struct exfat_node** parent, struct exfat_node** node, le16_t* name, const char* path); -off64_t exfat_c2o(const struct exfat* ef, cluster_t cluster); +off_t exfat_c2o(const struct exfat* ef, cluster_t cluster); 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); +int exfat_flush_nodes(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); -int exfat_find_used_sectors(const struct exfat* ef, off64_t* a, off64_t* b); +int exfat_find_used_sectors(const struct exfat* ef, off_t* a, off_t* b); void exfat_stat(const struct exfat* ef, const struct exfat_node* node, struct stat* stbuf); @@ -194,6 +202,7 @@ 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); int exfat_flush_node(struct exfat* ef, struct exfat_node* node); |