X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fexfat-utils.git;a=blobdiff_plain;f=libexfat%2Flookup.c;h=23aa1415a1ce39aff7d6378ddee2d7d93ba1def5;hp=d65097689fb40c090410290aae149e044129b129;hb=131f1e366cc229964e2ef8036b60229ea1f56af9;hpb=70a4b10edcf53a90140e6dd80ccaa045f3647ad7 diff --git a/libexfat/lookup.c b/libexfat/lookup.c index d650976..23aa141 100644 --- a/libexfat/lookup.c +++ b/libexfat/lookup.c @@ -2,11 +2,12 @@ lookup.c (02.09.09) exFAT file system implementation library. - Copyright (C) 2010-2012 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 . + 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) { @@ -145,14 +144,14 @@ int exfat_lookup(struct exfat* ef, struct exfat_node** node, 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; } -static int is_allowed(const char* comp, size_t length) +static bool is_allowed(const char* comp, size_t length) { size_t i; @@ -169,9 +168,9 @@ static int is_allowed(const char* comp, size_t length) case '<': case '>': case '|': - return 0; + return false; } - return 1; + return true; } 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; } - 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);