From 46c27e2883a78388c895dc883dbb9b902fc8350d Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Mon, 31 May 2004 23:48:22 +0000 Subject: [PATCH] cscvs to tla changeset 129 Author: noodles Date: 2004/05/27 03:34:35 Moving makewordlist to its own file so we can use it elsewhere (dsilvers). --- wordlist.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ wordlist.h | 47 +++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 wordlist.c create mode 100644 wordlist.h diff --git a/wordlist.c b/wordlist.c new file mode 100644 index 0000000..0a9a836 --- /dev/null +++ b/wordlist.c @@ -0,0 +1,95 @@ +/* + * wordlist.c - Routines for manipulating word lists + * + * Jonathan McDowell + * + * Copyright 2004 Project Purple + * + * $Id: wordlist.c,v 1.1 2004/05/27 03:34:35 noodles Exp $ + */ + +#include +#include +#include + +#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 index 0000000..e696693 --- /dev/null +++ b/wordlist.h @@ -0,0 +1,47 @@ +/* + * wordlist.h - Routines for manipulating word lists + * + * Jonathan McDowell + * + * 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__ */ -- 2.30.2