]> git.sommitrealweird.co.uk Git - onak.git/blobdiff - wordlist.c
Switch debian build system to dh
[onak.git] / wordlist.c
index 0a9a836a67e10c7c2ca5e57c609f72edfe3f9c63..605ec06967752a4209be7591c966d2209f6618d3 100644 (file)
@@ -1,11 +1,20 @@
 /*
  * wordlist.c - Routines for manipulating word lists
  *
 /*
  * wordlist.c - Routines for manipulating word lists
  *
- * Jonathan McDowell <noodles@earth.li>
+ * Copyright 2004 Jonathan McDowell <noodles@earth.li>
  *
  *
- * 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.
  *
  *
- * $Id: wordlist.c,v 1.1 2004/05/27 03:34:35 noodles Exp $
+ * 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, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <ctype.h>
  */
 
 #include <ctype.h>
@@ -42,11 +51,11 @@ struct ll *makewordlist(struct ll *wordlist, char *word)
        end = word;
        while (end != NULL && *end != 0) {
                start = end;
        end = word;
        while (end != NULL && *end != 0) {
                start = end;
-               while (*start != 0 && !isalnum(*start)) {
+               while (*start != 0 && (ispunct(*start) || isspace (*start))) {
                        start++;
                }
                end = start;
                        start++;
                }
                end = start;
-               while (*end != 0 && isalnum(*end)) {
+               while (*end != 0 && (!ispunct(*end) && !isspace (*end))) {
                        *end = tolower(*end);
                        end++;
                }
                        *end = tolower(*end);
                        end++;
                }
@@ -56,8 +65,10 @@ struct ll *makewordlist(struct ll *wordlist, char *word)
                                end++;
                        }
 
                                end++;
                        }
 
-                       if (llfind(wordlist, start, strcmp) == NULL) {
-                               wordlist = lladd(wordlist, start);
+                       if (llfind(wordlist, start, 
+                               (int (*)(const void *, const void *)) strcmp
+                                       ) == NULL) {
+                               wordlist = lladdend(wordlist, start);
                        }
                }
        }
                        }
                }
        }
@@ -80,12 +91,21 @@ struct ll *makewordlist(struct ll *wordlist, char *word)
 struct ll *makewordlistfromkey(struct ll *wordlist,
                               struct openpgp_publickey *key)
 {
 struct ll *makewordlistfromkey(struct ll *wordlist,
                               struct openpgp_publickey *key)
 {
-       char **uids;
-       int i;
+       char      **uids;
+       int         i;
+       struct ll  *words = NULL;
+       struct ll  *wl = NULL;
 
        uids = keyuids(key, NULL);
        for (i = 0; uids[i] != NULL; ++i) {
 
        uids = keyuids(key, NULL);
        for (i = 0; uids[i] != NULL; ++i) {
-               wordlist = makewordlist(wordlist, uids[i]);
+               words = makewordlist(NULL, uids[i]);
+               for (wl = words; wl != NULL; wl = wl->next) {
+                       if (llfind(wordlist, wl->object, 
+                               (int (*)(const void *, const void *)) strcmp
+                                               ) == NULL) {
+                               wordlist = lladd(wordlist, strdup(wl->object));
+                       }
+               }
                free(uids[i]);
                uids[i] = NULL;
        }
                free(uids[i]);
                uids[i] = NULL;
        }