OSDN Git Service

Rename write_entry() to commit_entry().
[android-x86/external-exfat.git] / libexfat / node.c
index 90002eb..5b623be 100644 (file)
@@ -43,19 +43,19 @@ struct exfat_node* exfat_get_node(struct exfat_node* node)
 
 void exfat_put_node(struct exfat* ef, struct exfat_node* node)
 {
-       char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+       char buffer[EXFAT_UTF8_NAME_BUFFER_MAX];
 
        --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);
                }
        }
@@ -94,16 +94,16 @@ static off_t co2o(struct exfat* ef, cluster_t cluster, off_t offset)
 static int opendir(struct exfat* ef, const struct exfat_node* dir,
                struct iterator* it)
 {
-       char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+       char buffer[EXFAT_UTF8_NAME_BUFFER_MAX];
 
        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;
@@ -208,7 +208,7 @@ static const struct exfat_entry* get_entry_ptr(const struct exfat* ef,
 static bool check_node(const struct exfat_node* node, uint16_t actual_checksum,
                uint16_t reference_checksum, uint64_t valid_size, int cluster_size)
 {
-       char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+       char buffer[EXFAT_UTF8_NAME_BUFFER_MAX];
        bool ret = true;
 
        /*
@@ -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;
@@ -523,7 +523,7 @@ static int readdir(struct exfat* ef, const struct exfat_node* parent,
                                goto error;
                        }
                        if (utf16_to_utf8(ef->label, label->name,
-                                               sizeof(ef->label) - 1, EXFAT_ENAME_MAX) != 0)
+                                               sizeof(ef->label), EXFAT_ENAME_MAX) != 0)
                                goto error;
                        break;
 
@@ -627,7 +627,7 @@ static void tree_detach(struct exfat_node* node)
 
 static void reset_cache(struct exfat* ef, struct exfat_node* node)
 {
-       char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+       char buffer[EXFAT_UTF8_NAME_BUFFER_MAX];
 
        while (node->child)
        {
@@ -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)
@@ -926,7 +926,7 @@ static int find_slot(struct exfat* ef, struct exfat_node* dir,
        return 0;
 }
 
-static int write_entry(struct exfat* ef, struct exfat_node* dir,
+static int commit_entry(struct exfat* ef, struct exfat_node* dir,
                const le16_t* name, cluster_t cluster, off_t offset, uint16_t attrib)
 {
        struct exfat_node* node;
@@ -957,7 +957,7 @@ static int write_entry(struct exfat* ef, struct exfat_node* dir,
        meta2.type = EXFAT_ENTRY_FILE_INFO;
        meta2.flags = EXFAT_FLAG_ALWAYS1;
        meta2.name_length = name_length;
-       meta2.name_hash = exfat_calc_name_hash(ef, node->name);
+       meta2.name_hash = exfat_calc_name_hash(ef, node->name, name_length);
        meta2.start_cluster = cpu_to_le32(EXFAT_CLUSTER_FREE);
 
        meta1.checksum = exfat_calc_checksum(&meta1, &meta2, node->name);
@@ -1026,7 +1026,7 @@ static int create(struct exfat* ef, const char* path, uint16_t attrib)
                exfat_put_node(ef, dir);
                return rc;
        }
-       rc = write_entry(ef, dir, name, cluster, offset, attrib);
+       rc = commit_entry(ef, dir, name, cluster, offset, attrib);
        if (rc != 0)
        {
                exfat_put_node(ef, dir);
@@ -1099,7 +1099,7 @@ static int rename_entry(struct exfat* ef, struct exfat_node* dir,
                return -EIO;
        }
        meta1.continuations = 1 + name_entries;
-       meta2.name_hash = exfat_calc_name_hash(ef, name);
+       meta2.name_hash = exfat_calc_name_hash(ef, name, name_length);
        meta2.name_length = name_length;
        meta1.checksum = exfat_calc_checksum(&meta1, &meta2, name);
 
@@ -1303,7 +1303,7 @@ int exfat_set_label(struct exfat* ef, const char* label)
        struct exfat_entry_label entry;
 
        memset(label_utf16, 0, sizeof(label_utf16));
-       rc = utf8_to_utf16(label_utf16, label, EXFAT_ENAME_MAX, strlen(label));
+       rc = utf8_to_utf16(label_utf16, label, EXFAT_ENAME_MAX + 1, strlen(label));
        if (rc != 0)
                return rc;