cscvs to tla changeset 27
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:07 +0000 (23:47 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:07 +0000 (23:47 +0000)
Author: noodles
Date: 2002/11/11 14:15:54
Pull out some common fetch/putchar functions into charfuncs.c

Makefile
add.c
charfuncs.c [new file with mode: 0644]
charfuncs.h [new file with mode: 0644]
keydb_db2.c
keydb_db3.c
keydb_file.c

index 4eb0ad7e818f16baa4ee85f320f94be9465b0143..2d6cfee6a8e90942fdeef4de9f8e1bc4c1abe256 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -11,10 +11,10 @@ LIBS = -L/usr/local/lib -ldb3
 
 PROGS = add lookup gpgwww onak
 OBJS = armor.o parsekey.o keydb_$(DBTYPE).o merge.o keyid.o md5.o sha.o \
-       getcgi.o keyindex.o mem.o stats.o ll.o hash.o onak-conf.o
+       getcgi.o keyindex.o mem.o stats.o ll.o hash.o onak-conf.o charfuncs.o
 SRCS = armor.c parsekey.c merge.c keyid.c md5.c sha.c main.c getcgi.c stats.c \
        keyindex.c mem.c lookup.c add.c keydb_$(DBTYPE).c ll.c hash.c \
-       gpgwww.c onak-conf.c
+       gpgwww.c onak-conf.c charfuncs.c
 
 all: $(PROGS) testparse maxpath
 
@@ -28,22 +28,22 @@ gpgwww: gpgwww.o $(OBJS)
        $(CC) -o gpgwww gpgwww.o $(OBJS) $(LIBS)
 
 lookup: lookup.o getcgi.o keyindex.o keydb_$(DBTYPE).o keyid.o sha.o \
-               parsekey.o mem.o armor.o ll.o hash.o onak-conf.o
+               parsekey.o mem.o armor.o ll.o hash.o onak-conf.o charfuncs.o
        $(CC) -o lookup lookup.o getcgi.o keyindex.o keydb_$(DBTYPE).o keyid.o \
-               sha.o parsekey.o mem.o armor.o ll.o hash.o onak-conf.o $(LIBS)
+               sha.o parsekey.o mem.o armor.o ll.o hash.o onak-conf.o \
+               charfuncs.o $(LIBS)
 
 add: add.o getcgi.o armor.o parsekey.o keydb_$(DBTYPE).o keyid.o sha.o mem.o \
-               keyindex.o ll.o hash.o merge.o onak-conf.o
+               keyindex.o ll.o hash.o merge.o onak-conf.o charfuncs.o
        $(CC) -o add add.o getcgi.o armor.o parsekey.o keydb_$(DBTYPE).o \
                keyid.o sha.o mem.o keyindex.o ll.o hash.o merge.o onak-conf.o \
-               $(LIBS)
+               charfuncs.o $(LIBS)
 
-onak: onak.o merge.o keyid.o sha.o armor.o parsekey.o ll.o \
+onak: onak.o merge.o keyid.o sha.o armor.o parsekey.o ll.o charfuncs.o \
                keydb_$(DBTYPE).o mem.o keyindex.o hash.o getcgi.o onak-conf.o
-       $(CC) $(LDFLAGS) -o onak onak.o merge.o keyid.o sha.o armor.o parsekey.o \
-               keydb_$(DBTYPE).o mem.o keyindex.o ll.o hash.o getcgi.o \
-               onak-conf.o $(LIBS)
-
+       $(CC) $(LDFLAGS) -o onak onak.o merge.o keyid.o sha.o armor.o \
+               parsekey.o keydb_$(DBTYPE).o mem.o keyindex.o ll.o hash.o \
+               getcgi.o charfuncs.o onak-conf.o $(LIBS)
 
 clean:
        rm -f $(PROGS) $(OBJS) Makefile.bak testparse maxpath *.core core \
diff --git a/add.c b/add.c
index 95f218943b5dcaab6540201e116fe57bce2e5608..80afaddf5ba352615af93f22f7978e54d77214ac 100644 (file)
--- a/add.c
+++ b/add.c
 #include <string.h>
 
 #include "armor.h"
+#include "charfuncs.h"
 #include "getcgi.h"
 #include "keydb.h"
 #include "keystructs.h"
 #include "parsekey.h"
 #include "merge.h"
 
-struct cgi_get_ctx {
-       char *buffer;
-       int offset;
-};
-
-
-int cgi_getchar(void *ctx, size_t count, unsigned char *c)
-{
-       struct cgi_get_ctx *buf = NULL;
-
-       buf = (struct cgi_get_ctx *) ctx;
-
-       while (count-- > 0 && *c != 0) {
-               *c = buf->buffer[buf->offset++];
-       }
-
-       return (*c == 0);
-}
-
 int main(int argc, char *argv[])
 {
        struct openpgp_packet_list *packets = NULL;
        struct openpgp_publickey *keys = NULL;
        char **params = NULL;
-       struct cgi_get_ctx ctx;
+       struct buffer_ctx ctx;
        int i;
 
        memset(&ctx, 0, sizeof(ctx));
@@ -51,6 +33,7 @@ int main(int argc, char *argv[])
        for (i = 0; params != NULL && params[i] != NULL; i += 2) {
                if (!strcmp(params[i], "keytext")) {
                        ctx.buffer = params[i+1];
+                       ctx.size = strlen(ctx.buffer);
                } else {
                        free(params[i+1]);
                }
@@ -67,7 +50,7 @@ int main(int argc, char *argv[])
        if (ctx.buffer == NULL) {
                puts("Error: No keytext to add supplied.");
        } else {
-               dearmor_openpgp_stream(cgi_getchar,
+               dearmor_openpgp_stream(buffer_fetchchar,
                                        &ctx,
                                        &packets);
                if (packets != NULL) {
diff --git a/charfuncs.c b/charfuncs.c
new file mode 100644 (file)
index 0000000..de68b66
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * charfuncs.c - Routines for dealing with character streams.
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2002 Project Purple
+ */
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <unistd.h>
+
+#include "charfuncs.h"
+
+/**
+ *     buffer_fetchchar - Fetches a char from a buffer.
+ *     @ctx: Our buffer context structure.
+ *     @count: The number of characters to get from the buffer.
+ *     @c: Where to put the characters retrieved.
+ */
+int buffer_fetchchar(void *ctx, size_t count, unsigned char *c)
+{
+       struct buffer_ctx *buf = NULL;
+       int i;
+       
+       buf = (struct buffer_ctx *) ctx;
+       for (i = 0; i < count; i++) {
+               c[i] = buf->buffer[buf->offset++];
+       }
+
+       return (((buf->offset) == (buf->size)) ? 1 : 0);
+}
+
+/**
+ *     buffer_putchar - Puts a char to a buffer.
+ *     @ctx: Our buffer context structure.
+ *     @count: The number of characters to put into the buffer.
+ *     @c: The characters to add to the buffer.
+ *
+ *     Adds characters to the buffer references by the buffer context. If we
+ *     fill it then we double the size of the current buffer and then add the
+ *     rest.
+ */
+int buffer_putchar(void *ctx, size_t count, unsigned char *c)
+{
+       struct buffer_ctx *buf = NULL;
+       size_t newsize = 0;
+       int i;
+       
+       buf = (struct buffer_ctx *) ctx;
+
+       for (newsize = buf->size; newsize < (buf->offset + count);
+                       newsize *= 2) ;
+
+       if (newsize != buf->size) {
+               buf->buffer = realloc(buf->buffer, newsize);
+               buf->size = newsize;
+       }
+       
+       for (i = 0; i < count; i++) {
+               buf->buffer[buf->offset++] = c[i];
+       }
+
+       return 1;
+}
+
+/**
+ *     file_fetchchar - Fetches a char from a file.
+ */
+int file_fetchchar(void *fd, size_t count, unsigned char *c)
+{
+       return !(read( *(int *) fd, c, count));
+}
+
+/**
+ *     file_putchar - Puts a char to a file.
+ */
+int file_putchar(void *fd, size_t count, unsigned char *c)
+{
+       return !(write( *(int *) fd, c, count));
+}
diff --git a/charfuncs.h b/charfuncs.h
new file mode 100644 (file)
index 0000000..f394e15
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * charfuncs.h - Routines for dealing with character streams.
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2002 Project Purple
+ */
+
+#ifndef __CHARFUNCS_H__
+#define __CHARFUNCS_H__
+
+#include <stdlib.h>
+
+/**
+ *     buffer_ctx - Shared with CGI buffer stuff...
+ *     @buffer: The data buffer.
+ *     @offset: Our current position in the buffer.
+ *     @size: The size of the data buffer.
+ */
+struct buffer_ctx {
+       char *buffer;
+       int offset;
+       int size;
+};
+
+/**
+ *     buffer_fetchchar - Fetches a char from a buffer.
+ *     @ctx: Our buffer context structure.
+ *     @count: The number of characters to get from the buffer.
+ *     @c: Where to put the characters retrieved.
+ */
+int buffer_fetchchar(void *ctx, size_t count, unsigned char *c);
+
+/**
+ *     buffer_putchar - Puts a char to a buffer.
+ *     @ctx: Our buffer context structure.
+ *     @count: The number of characters to put into the buffer.
+ *     @c: The characters to add to the buffer.
+ *
+ *     Adds characters to the buffer references by the buffer context. If we
+ *     fill it then we double the size of the current buffer and then add the
+ *     rest.
+ */
+int buffer_putchar(void *ctx, size_t count, unsigned char *c);
+
+/**
+ *     file_fetchchar - Fetches a char from a file.
+ */
+int file_fetchchar(void *fd, size_t count, unsigned char *c);
+
+/**
+ *     file_putchar - Puts a char to a file.
+ */
+int file_putchar(void *fd, size_t count, unsigned char *c);
+
+
+#endif /* __CHARFUNCS_H__ */
index 3d66c5a18ca0095f0bcebd565c317dbc6504ed00..a30b62c43ba3b27413263372315641073d491191 100644 (file)
@@ -16,6 +16,7 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "charfuncs.h"
 #include "keydb.h"
 #include "keyid.h"
 #include "keyindex.h"
@@ -41,40 +42,6 @@ static DB **db2_keydbfiles = NULL;
  */
 static DB_ENV db2_env;
 
-/*
- * Shared with CGI buffer stuff...
- */
-struct db2_get_ctx {
-       char *buffer;
-       int offset;
-       int size;
-};
-
-/**
- *     keydb_fetchchar - Fetches a char from a buffer.
- */
-int keydb_fetchchar(void *ctx, int count, unsigned char *c)
-{
-       struct db2_get_ctx *buf = NULL;
-       int i;
-       
-       buf = (struct db2_get_ctx *) ctx;
-       for (i = 0; i < count; i++) {
-               c[i] = buf->buffer[buf->offset++];
-       }
-
-       return (((buf->offset) == (buf->size)) ? 1 : 0);
-}
-
-/**
- *     keydb_putchar - Puts a char to a file.
- */
-static int keydb_putchar(void *fd, unsigned char c)
-{
-//     return !(lo_write(dbconn, *(int *) fd, &c, sizeof(c)));
-       return 1;
-}
-
 DB *keydb(DBT *key)
 {
        /*
@@ -196,7 +163,7 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
        int ret;
        DBT key, data;
        char id[KEYDB_KEYID_BYTES];
-       struct db2_get_ctx fetchbuf;
+       struct buffer_ctx fetchbuf;
 
        memset(&key, 0, sizeof(key));
        memset(&data, 0, sizeof(data));
@@ -214,7 +181,7 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
                fetchbuf.buffer = data.data;
                fetchbuf.offset = 0;
                fetchbuf.size = data.size;
-               read_openpgp_stream(keydb_fetchchar, &fetchbuf, &packets);
+               read_openpgp_stream(buffer_fetchchar, &fetchbuf, &packets);
                parse_keys(packets, publickey);
        }
 
index 263397a9074978673e7a36c173919c8764076140..5224b52129f4e2828c01bff82d6998679514dd90 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <db.h>
 
+#include "charfuncs.h"
 #include "keydb.h"
 #include "keyid.h"
 #include "keyindex.h"
@@ -36,57 +37,6 @@ static DB *dbconn = NULL;
  */
 static DB *worddb = NULL;
 
-/**
- *     db3_get_ctx - Shared with CGI buffer stuff...
- */
-struct db3_get_ctx {
-       char *buffer;
-       int offset;
-       int size;
-};
-
-/**
- *     keydb_fetchchar - Fetches a char from a file.
- */
-static int keydb_fetchchar(void *ctx, size_t count, unsigned char *c)
-{
-       struct db3_get_ctx *buf = NULL;
-       int i;
-       
-       buf = (struct db3_get_ctx *) ctx;
-       for (i = 0; i < count; i++) {
-               c[i] = buf->buffer[buf->offset++];
-       }
-
-       return (((buf->offset) == (buf->size)) ? 1 : 0);
-}
-
-/**
- *     keydb_putchar - Puts a char to a file.
- */
-static int keydb_putchar(void *ctx, size_t count, unsigned char *c)
-{
-       struct db3_get_ctx *buf = NULL;
-       size_t newsize = 0;
-       int i;
-       
-       buf = (struct db3_get_ctx *) ctx;
-
-       for (newsize = buf->size; newsize < (buf->offset + count);
-                       newsize *= 2) ;
-
-       if (newsize != buf->size) {
-               buf->buffer = realloc(buf->buffer, newsize);
-               buf->size = newsize;
-       }
-       
-       for (i = 0; i < count; i++) {
-               buf->buffer[buf->offset++] = c[i];
-       }
-
-       return 1;
-}
-
 /**
  *     makewordlist - Takes a string and splits it into a set of unique words.
  *     @wordlist: The current word list.
@@ -242,7 +192,7 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
        DBT key, data;
        int ret = 0;
        int numkeys = 0;
-       struct db3_get_ctx fetchbuf;
+       struct buffer_ctx fetchbuf;
 
        memset(&key, 0, sizeof(key));
        memset(&data, 0, sizeof(data));
@@ -264,7 +214,7 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
                fetchbuf.buffer = data.data;
                fetchbuf.offset = 0;
                fetchbuf.size = data.size;
-               read_openpgp_stream(keydb_fetchchar, &fetchbuf,
+               read_openpgp_stream(buffer_fetchchar, &fetchbuf,
                                &packets);
                parse_keys(packets, publickey);
                numkeys++;
@@ -347,7 +297,7 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update)
        struct     openpgp_publickey *next = NULL;
        int        ret = 0;
        int        i = 0;
-       struct     db3_get_ctx storebuf;
+       struct     buffer_ctx storebuf;
        DBT        key;
        DBT        data;
        uint64_t   keyid = 0;
@@ -383,7 +333,7 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update)
        storebuf.size = 8192;
        storebuf.buffer = malloc(8192);
        
-       write_openpgp_stream(keydb_putchar, &storebuf, packets);
+       write_openpgp_stream(buffer_putchar, &storebuf, packets);
 
        /*
         * Now we have the key data store it in the DB; the keyid is the key.
index 243e59ef83cb60344d189ac0877c71dc7c145646..ba8dc2e6bd63798a50eaff83f0d61b4bda71214e 100644 (file)
@@ -15,6 +15,7 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "charfuncs.h"
 #include "keydb.h"
 #include "keyid.h"
 #include "keystructs.h"
 #include "onak-conf.h"
 #include "parsekey.h"
 
-/**
- *     keydb_fetchchar - Fetches a char from a file.
- */
-static int keydb_fetchchar(void *fd, size_t count, unsigned char *c)
-{
-       return !(read( *(int *) fd, c, count));
-}
-
-/**
- *     keydb_putchar - Puts a char to a file.
- */
-static int keydb_putchar(void *fd, size_t count, unsigned char *c)
-{
-       return !(write( *(int *) fd, c, count));
-}
-
 /**
  *     initdb - Initialize the key database.
  *
@@ -101,7 +86,7 @@ int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey,
        fd = open(keyfile, O_RDONLY); // | O_SHLOCK);
 
        if (fd > -1) {
-               read_openpgp_stream(keydb_fetchchar, &fd, &packets);
+               read_openpgp_stream(file_fetchchar, &fd, &packets);
                parse_keys(packets, publickey);
                close(fd);
        }
@@ -138,7 +123,7 @@ int store_key(struct openpgp_publickey *publickey, bool intrans, bool update)
                flatten_publickey(publickey, &packets, &list_end);
                publickey -> next = next;
                
-               write_openpgp_stream(keydb_putchar, &fd, packets);
+               write_openpgp_stream(file_putchar, &fd, packets);
                close(fd);
        }