X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=wordlist.c;h=6827ba282db2ecc5a7a64e2a02238d4a85991c27;hb=3da81770b841f841c5145f91a9ccedc296e13f4b;hp=71299e12c88fd3e811965bbd337ba8c9ad07fd5b;hpb=2eed640f944a24204fa4ed0dbbc80004a800b1eb;p=onak.git diff --git a/wordlist.c b/wordlist.c index 71299e1..6827ba2 100644 --- a/wordlist.c +++ b/wordlist.c @@ -1,18 +1,29 @@ /* * wordlist.c - Routines for manipulating word lists * - * Jonathan McDowell + * Copyright 2004 Jonathan McDowell * - * Copyright 2004 Project Purple + * 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; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of 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 . */ #include #include +#include #include #include "ll.h" #include "decodekey.h" -#include "log.h" +#include "keystructs.h" #include "wordlist.h" /** @@ -40,11 +51,11 @@ struct ll *makewordlist(struct ll *wordlist, char *word) end = word; while (end != NULL && *end != 0) { start = end; - while (*start != 0 && !isalnum(*start)) { + while (*start != 0 && (ispunct(*start) || isspace (*start))) { start++; } end = start; - while (*end != 0 && isalnum(*end)) { + while (*end != 0 && (!ispunct(*end) && !isspace (*end))) { *end = tolower(*end); end++; } @@ -57,7 +68,7 @@ struct ll *makewordlist(struct ll *wordlist, char *word) if (llfind(wordlist, start, (int (*)(const void *, const void *)) strcmp ) == NULL) { - wordlist = lladd(wordlist, start); + wordlist = lladdend(wordlist, start); } } } @@ -86,7 +97,7 @@ struct ll *makewordlistfromkey(struct ll *wordlist, struct ll *wl = NULL; uids = keyuids(key, NULL); - for (i = 0; uids[i] != NULL; ++i) { + for (i = 0; uids != NULL && uids[i] != NULL; ++i) { words = makewordlist(NULL, uids[i]); for (wl = words; wl != NULL; wl = wl->next) { if (llfind(wordlist, wl->object, @@ -95,6 +106,7 @@ struct ll *makewordlistfromkey(struct ll *wordlist, wordlist = lladd(wordlist, strdup(wl->object)); } } + llfree(words, NULL); free(uids[i]); uids[i] = NULL; }