]> 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 2e1aa81844c98fa0a51c02475c5567791a98c15a..23aa1415a1ce39aff7d6378ddee2d7d93ba1def5 100644 (file)
@@ -2,11 +2,12 @@
        lookup.c (02.09.09)
        exFAT file system implementation library.
 
-       Copyright (C) 2010-2013  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
-       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,
@@ -14,8 +15,9 @@
        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"
@@ -44,7 +46,7 @@ void exfat_closedir(struct exfat* ef, struct exfat_iterator* it)
        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;
@@ -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)
 {
-       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)
@@ -87,14 +86,14 @@ static int lookup_name(struct exfat* ef, struct exfat_node* parent,
 
        *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;
-       while ((*node = exfat_readdir(ef, &it)))
+       while ((*node = exfat_readdir(&it)))
        {
                if (compare_name(ef, buffer, (*node)->name) == 0)
                {
@@ -195,7 +194,7 @@ int exfat_split(struct exfat* ef, struct exfat_node** parent,
                                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);