cscvs to tla changeset 129
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:48:22 +0000 (23:48 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:48:22 +0000 (23:48 +0000)
Author: noodles
Date: 2004/05/27 03:34:35
Moving makewordlist to its own file so we can use it elsewhere (dsilvers).

wordlist.c [new file with mode: 0644]
wordlist.h [new file with mode: 0644]

diff --git a/wordlist.c b/wordlist.c
new file mode 100644 (file)
index 0000000..0a9a836
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * wordlist.c - Routines for manipulating word lists
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2004 Project Purple
+ *
+ * $Id: wordlist.c,v 1.1 2004/05/27 03:34:35 noodles Exp $
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "ll.h"
+#include "decodekey.h"
+#include "log.h"
+#include "wordlist.h"
+
+/**
+ *     makewordlist - Takes a string and splits it into a set of unique words.
+ *     @wordlist: The current word list.
+ *     @words: The string to split and add.
+ *
+ *     We take words and split it on non alpha numeric characters. These get
+ *     added to the word list if they're not already present. If the wordlist
+ *     is NULL then we start a new list, otherwise it's search for already
+ *     added words. Note that words is modified in the process of scanning.
+ *
+ *     Returns the new word list.
+ */
+struct ll *makewordlist(struct ll *wordlist, char *word)
+{
+       char *start = NULL;
+       char *end = NULL;
+
+       /*
+        * Walk through the words string, spliting on non alphanumerics and
+        * then checking if the word already exists in the list. If not then
+        * we add it.
+        */
+       end = word;
+       while (end != NULL && *end != 0) {
+               start = end;
+               while (*start != 0 && !isalnum(*start)) {
+                       start++;
+               }
+               end = start;
+               while (*end != 0 && isalnum(*end)) {
+                       *end = tolower(*end);
+                       end++;
+               }
+               if (end - start > 1) {
+                       if (*end != 0) {
+                               *end = 0;
+                               end++;
+                       }
+
+                       if (llfind(wordlist, start, strcmp) == NULL) {
+                               wordlist = lladd(wordlist, start);
+                       }
+               }
+       }
+       return wordlist;
+}
+
+/**
+ *     makewordlistfromkey - Takes a public key and splits it into a set of 
+ *                     unique words.
+ *     @wordlist: The current word list.
+ *     @key: The key to return the words from.
+ *
+ *     We take words and split it on non alpha numeric characters. These get
+ *     added to the word list if they're not already present. If the wordlist
+ *     is NULL then we start a new list, otherwise it's search for already
+ *     added words. Note that words is modified in the process of scanning.
+ *
+ *     Returns the new word list.
+ */
+struct ll *makewordlistfromkey(struct ll *wordlist,
+                              struct openpgp_publickey *key)
+{
+       char **uids;
+       int i;
+
+       uids = keyuids(key, NULL);
+       for (i = 0; uids[i] != NULL; ++i) {
+               wordlist = makewordlist(wordlist, uids[i]);
+               free(uids[i]);
+               uids[i] = NULL;
+       }
+       free(uids);
+
+       return wordlist;
+}
diff --git a/wordlist.h b/wordlist.h
new file mode 100644 (file)
index 0000000..e696693
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * wordlist.h - Routines for manipulating word lists
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2004 Project Purple
+ *
+ * $Id: wordlist.h,v 1.1 2004/05/27 03:34:35 noodles Exp $
+ */
+
+#ifndef __WORDLIST_H__
+#define __WORDLIST_H__
+
+#include "ll.h"
+#include "keystructs.h"
+
+/**
+ *     makewordlist - Takes a string and splits it into a set of unique words.
+ *     @wordlist: The current word list.
+ *     @words: The string to split and add.
+ *
+ *     We take words and split it on non alpha numeric characters. These get
+ *     added to the word list if they're not already present. If the wordlist
+ *     is NULL then we start a new list, otherwise it's search for already
+ *     added words. Note that words is modified in the process of scanning.
+ *
+ *     Returns the new word list.
+ */
+struct ll *makewordlist(struct ll *wordlist, char *word);
+
+/**
+ *     makewordlistfromkey - Takes a public key and splits it into a set of 
+ *                     unique words.
+ *     @wordlist: The current word list.
+ *     @key: The key to return the words from.
+ *
+ *     We take words and split it on non alpha numeric characters. These get
+ *     added to the word list if they're not already present. If the wordlist
+ *     is NULL then we start a new list, otherwise it's search for already
+ *     added words. Note that words is modified in the process of scanning.
+ *
+ *     Returns the new word list.
+ */
+struct ll *makewordlistfromkey(struct ll *wordlist,
+                              struct openpgp_publickey *key);
+
+#endif /* __WORDLIST_H__ */