]> git.sven.stormbind.net Git - sven/exfat-utils.git/blobdiff - libexfat/lookup.c
Update upstream source from tag 'upstream/1.2.8'
[sven/exfat-utils.git] / libexfat / lookup.c
index 619dcea4eb769157a52f05a19069e8be27fc5231..23aa1415a1ce39aff7d6378ddee2d7d93ba1def5 100644 (file)
@@ -2,11 +2,12 @@
        lookup.c (02.09.09)
        exFAT file system implementation library.
 
        lookup.c (02.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Free exFAT implementation.
+       Copyright (C) 2010-2018  Andrew Nayenko
 
 
-       This program is free software: you can redistribute it and/or modify
+       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
        it under the terms of the GNU General Public License as published by
-       the Free Software Foundation, either version 3 of the License, or
+       the Free Software Foundation, either version 2 of the License, or
        (at your option) any later version.
 
        This program is distributed in the hope that it will be useful,
        (at your option) any later version.
 
        This program is distributed in the hope that it will be useful,
@@ -14,8 +15,9 @@
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
 
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
 
-       You should have received a copy of the GNU General Public License
-       along with this program.  If not, see <http://www.gnu.org/licenses/>.
+       You should have received a copy of the GNU General Public License along
+       with this program; if not, write to the Free Software Foundation, Inc.,
+       51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
 #include "exfat.h"
 */
 
 #include "exfat.h"
@@ -44,7 +46,7 @@ void exfat_closedir(struct exfat* ef, struct exfat_iterator* it)
        it->current = NULL;
 }
 
        it->current = NULL;
 }
 
-struct exfat_node* exfat_readdir(struct exfat* ef, struct exfat_iterator* it)
+struct exfat_node* exfat_readdir(struct exfat_iterator* it)
 {
        if (it->current == NULL)
                it->current = it->parent->child;
 {
        if (it->current == NULL)
                it->current = it->parent->child;
@@ -59,10 +61,7 @@ struct exfat_node* exfat_readdir(struct exfat* ef, struct exfat_iterator* it)
 
 static int compare_char(struct exfat* ef, uint16_t a, uint16_t b)
 {
 
 static int compare_char(struct exfat* ef, uint16_t a, uint16_t b)
 {
-       if (a >= ef->upcase_chars || b >= ef->upcase_chars)
-               return (int) a - (int) b;
-
-       return (int) le16_to_cpu(ef->upcase[a]) - (int) le16_to_cpu(ef->upcase[b]);
+       return (int) ef->upcase[a] - (int) ef->upcase[b];
 }
 
 static int compare_name(struct exfat* ef, const le16_t* a, const le16_t* b)
 }
 
 static int compare_name(struct exfat* ef, const le16_t* a, const le16_t* b)
@@ -87,14 +86,14 @@ static int lookup_name(struct exfat* ef, struct exfat_node* parent,
 
        *node = NULL;
 
 
        *node = NULL;
 
-       rc = utf8_to_utf16(buffer, name, EXFAT_NAME_MAX, n);
+       rc = utf8_to_utf16(buffer, name, EXFAT_NAME_MAX + 1, n);
        if (rc != 0)
                return rc;
 
        rc = exfat_opendir(ef, parent, &it);
        if (rc != 0)
                return rc;
        if (rc != 0)
                return rc;
 
        rc = exfat_opendir(ef, parent, &it);
        if (rc != 0)
                return rc;
-       while ((*node = exfat_readdir(ef, &it)))
+       while ((*node = exfat_readdir(&it)))
        {
                if (compare_name(ef, buffer, (*node)->name) == 0)
                {
        {
                if (compare_name(ef, buffer, (*node)->name) == 0)
                {
@@ -145,14 +144,14 @@ int exfat_lookup(struct exfat* ef, struct exfat_node** node,
        return 0;
 }
 
        return 0;
 }
 
-static int is_last_comp(const char* comp, size_t length)
+static bool is_last_comp(const char* comp, size_t length)
 {
        const char* p = comp + length;
 
        return get_comp(p, &p) == 0;
 }
 
 {
        const char* p = comp + length;
 
        return get_comp(p, &p) == 0;
 }
 
-static int is_allowed(const char* comp, size_t length)
+static bool is_allowed(const char* comp, size_t length)
 {
        size_t i;
 
 {
        size_t i;
 
@@ -169,9 +168,9 @@ static int is_allowed(const char* comp, size_t length)
                case '<':
                case '>':
                case '|':
                case '<':
                case '>':
                case '|':
-                       return 0;
+                       return false;
                }
                }
-       return 1;
+       return true;
 }
 
 int exfat_split(struct exfat* ef, struct exfat_node** parent,
 }
 
 int exfat_split(struct exfat* ef, struct exfat_node** parent,
@@ -195,7 +194,7 @@ int exfat_split(struct exfat* ef, struct exfat_node** parent,
                                exfat_put_node(ef, *parent);
                                return -ENOENT;
                        }
                                exfat_put_node(ef, *parent);
                                return -ENOENT;
                        }
-                       rc = utf8_to_utf16(name, p, EXFAT_NAME_MAX, n);
+                       rc = utf8_to_utf16(name, p, EXFAT_NAME_MAX + 1, n);
                        if (rc != 0)
                        {
                                exfat_put_node(ef, *parent);
                        if (rc != 0)
                        {
                                exfat_put_node(ef, *parent);