X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fexfat-utils.git;a=blobdiff_plain;f=libexfat%2Flookup.c;h=23aa1415a1ce39aff7d6378ddee2d7d93ba1def5;hp=51915e630ec3ea87cdcd8c7c2e2beb83570603f7;hb=131f1e366cc229964e2ef8036b60229ea1f56af9;hpb=f77812e8b678b8bf620bfbf33882139997ccda34 diff --git a/libexfat/lookup.c b/libexfat/lookup.c index 51915e6..23aa141 100644 --- a/libexfat/lookup.c +++ b/libexfat/lookup.c @@ -3,7 +3,7 @@ exFAT file system implementation library. Free exFAT implementation. - Copyright (C) 2010-2014 Andrew Nayenko + Copyright (C) 2010-2018 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 @@ -46,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; @@ -61,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) @@ -89,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) { @@ -197,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);