OSDN Git Service

Remove buffer size argument for exfat_get_name().
authorrelan <relan@users.noreply.github.com>
Tue, 20 Dec 2016 08:22:32 +0000 (11:22 +0300)
committerrelan <relan@users.noreply.github.com>
Mon, 26 Dec 2016 07:01:18 +0000 (10:01 +0300)
The output buffer is always UTF8_BYTES(EXFAT_NAME_MAX)+1 characters. No
need to repeat this every time.

fsck/main.c
fuse/main.c
libexfat/exfat.h
libexfat/node.c
libexfat/utils.c

index cda1965..c08b956 100644 (file)
@@ -43,7 +43,7 @@ static int nodeck(struct exfat* ef, struct exfat_node* node)
                {
                        char name[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
 
-                       exfat_get_name(node, name, sizeof(name) - 1);
+                       exfat_get_name(node, name);
                        exfat_error("file '%s' has invalid cluster 0x%x", name, c);
                        rc = 1;
                        break;
@@ -52,7 +52,7 @@ static int nodeck(struct exfat* ef, struct exfat_node* node)
                {
                        char name[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
 
-                       exfat_get_name(node, name, sizeof(name) - 1);
+                       exfat_get_name(node, name);
                        exfat_error("cluster 0x%x of file '%s' is not allocated", c, name);
                        rc = 1;
                }
@@ -100,8 +100,7 @@ static void dirck(struct exfat* ef, const char* path)
        }
        while ((node = exfat_readdir(ef, &it)))
        {
-               exfat_get_name(node, entry_path + path_length + 1,
-                               UTF8_BYTES(EXFAT_NAME_MAX));
+               exfat_get_name(node, entry_path + path_length + 1);
                exfat_debug("%s: %s, %"PRIu64" bytes, cluster %u", entry_path,
                                IS_CONTIGUOUS(*node) ? "contiguous" : "fragmented",
                                node->size, node->start_cluster);
index bc0faf3..8cc2eb3 100644 (file)
@@ -130,7 +130,7 @@ static int fuse_exfat_readdir(const char* path, void* buffer,
        }
        while ((node = exfat_readdir(&ef, &it)))
        {
-               exfat_get_name(node, name, sizeof(name) - 1);
+               exfat_get_name(node, name);
                exfat_debug("[%s] %s: %s, %"PRId64" bytes, cluster 0x%x", __func__,
                                name, IS_CONTIGUOUS(*node) ? "contiguous" : "fragmented",
                                node->size, node->start_cluster);
index 78da924..a93484c 100644 (file)
@@ -177,7 +177,8 @@ 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);
-void exfat_get_name(const struct exfat_node* node, char* buffer, size_t n);
+void exfat_get_name(const struct exfat_node* node,
+               char buffer[UTF8_BYTES(EXFAT_NAME_MAX)]);
 uint16_t exfat_start_checksum(const struct exfat_entry_meta1* entry);
 uint16_t exfat_add_checksum(const void* entry, uint16_t sum);
 le16_t exfat_calc_checksum(const struct exfat_entry_meta1* meta1,
index 94061b4..a413fa2 100644 (file)
@@ -48,14 +48,14 @@ void exfat_put_node(struct exfat* ef, struct exfat_node* node)
        --node->references;
        if (node->references < 0)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_bug("reference counter of '%s' is below zero", buffer);
        }
        else if (node->references == 0 && node != ef->root)
        {
                if (node->flags & EXFAT_ATTRIB_DIRTY)
                {
-                       exfat_get_name(node, buffer, sizeof(buffer) - 1);
+                       exfat_get_name(node, buffer);
                        exfat_warn("dirty node '%s' with zero references", buffer);
                }
        }
@@ -98,12 +98,12 @@ static int opendir(struct exfat* ef, const struct exfat_node* dir,
 
        if (!(dir->flags & EXFAT_ATTRIB_DIR))
        {
-               exfat_get_name(dir, buffer, sizeof(buffer) - 1);
+               exfat_get_name(dir, buffer);
                exfat_bug("'%s' is not a directory", buffer);
        }
        if (CLUSTER_INVALID(dir->start_cluster))
        {
-               exfat_get_name(dir, buffer, sizeof(buffer) - 1);
+               exfat_get_name(dir, buffer);
                exfat_error("'%s' directory starts with invalid cluster %#x", buffer,
                                dir->start_cluster);
                return -EIO;
@@ -120,7 +120,7 @@ static int opendir(struct exfat* ef, const struct exfat_node* dir,
                        exfat_c2o(ef, it->cluster)) < 0)
        {
                free(it->chunk);
-               exfat_get_name(dir, buffer, sizeof(buffer) - 1);
+               exfat_get_name(dir, buffer);
                exfat_error("failed to read '%s' directory cluster %#x", buffer,
                                it->cluster);
                return -EIO;
@@ -217,7 +217,7 @@ static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
        */
        if (actual_checksum != reference_checksum)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' has invalid checksum (%#hx != %#hx)", buffer,
                                actual_checksum, reference_checksum);
                ret = false;
@@ -231,7 +231,7 @@ static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
        */
        if (valid_size > node->size)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' has valid size (%"PRIu64") greater than size "
                                "(%"PRIu64")", buffer, valid_size, node->size);
                ret = false;
@@ -245,14 +245,14 @@ static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
        */
        if (node->size == 0 && node->start_cluster != EXFAT_CLUSTER_FREE)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' is empty but start cluster is %#x", buffer,
                                node->start_cluster);
                ret = false;
        }
        if (node->size > 0 && CLUSTER_INVALID(node->start_cluster))
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' points to invalid cluster %#x", buffer,
                                node->start_cluster);
                ret = false;
@@ -261,7 +261,7 @@ static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
        /* Empty file or directory must be marked as non-contiguous. */
        if (node->size == 0 && (node->flags & EXFAT_ATTRIB_CONTIGUOUS))
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' is empty but marked as contiguous (%#x)", buffer,
                                node->flags);
                ret = false;
@@ -270,7 +270,7 @@ static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
        /* Directory size must be aligned on at cluster boundary. */
        if ((node->flags & EXFAT_ATTRIB_DIR) && node->size % cluster_size != 0)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_error("'%s' directory size %"PRIu64" is not divisible by %d", buffer,
                                node->size, cluster_size);
                ret = false;
@@ -639,13 +639,13 @@ static void reset_cache(struct exfat* ef, struct exfat_node* node)
        node->flags &= ~EXFAT_ATTRIB_CACHED;
        if (node->references != 0)
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_warn("non-zero reference counter (%d) for '%s'",
                                node->references, buffer);
        }
        if (node != ef->root && (node->flags & EXFAT_ATTRIB_DIRTY))
        {
-               exfat_get_name(node, buffer, sizeof(buffer) - 1);
+               exfat_get_name(node, buffer);
                exfat_bug("node '%s' is dirty", buffer);
        }
        while (node->references)
index 8e7cd3e..3e08431 100644 (file)
@@ -46,9 +46,11 @@ void exfat_stat(const struct exfat* ef, const struct exfat_node* node,
        stbuf->st_ctime = node->mtime;
 }
 
-void exfat_get_name(const struct exfat_node* node, char* buffer, size_t n)
+void exfat_get_name(const struct exfat_node* node,
+               char buffer[UTF8_BYTES(EXFAT_NAME_MAX)])
 {
-       if (utf16_to_utf8(buffer, node->name, n, EXFAT_NAME_MAX) != 0)
+       if (utf16_to_utf8(buffer, node->name, UTF8_BYTES(EXFAT_NAME_MAX),
+                               EXFAT_NAME_MAX) != 0)
                exfat_bug("failed to convert name to UTF-8");
 }