[svn] GnuPG - r4271 - trunk/common
svn author wk
cvs at cvs.gnupg.org
Wed Sep 27 15:58:14 CEST 2006
Author: wk
Date: 2006-09-27 15:58:13 +0200 (Wed, 27 Sep 2006)
New Revision: 4271
Added:
trunk/common/gpgrlhelp.c
Modified:
trunk/common/ChangeLog
trunk/common/iobuf.c
trunk/common/iobuf.h
trunk/common/util.h
Log:
Add missing file and other changes.
Modified: trunk/common/ChangeLog
===================================================================
--- trunk/common/ChangeLog 2006-09-26 17:32:28 UTC (rev 4270)
+++ trunk/common/ChangeLog 2006-09-27 13:58:13 UTC (rev 4271)
@@ -1,3 +1,15 @@
+2006-09-27 Werner Koch <wk at g10code.com>
+
+ * util.h: Do not include strsep.h and strpbrk.h.
+ (isascii): Removed as it is now in jnlib.
+
+ * iobuf.c (pop_filter, underflow, iobuf_close): Free the unget
+ buffer.
+
+2006-09-27 Florian Weimer <fweimer at bfk.de> (wk)
+
+ * iobuf.c (iobuf_unread): New.
+
2006-09-22 Werner Koch <wk at g10code.com>
* i18n.h: Changed license to an all permissive one.
Added: trunk/common/gpgrlhelp.c
===================================================================
--- trunk/common/gpgrlhelp.c 2006-09-26 17:32:28 UTC (rev 4270)
+++ trunk/common/gpgrlhelp.c 2006-09-27 13:58:13 UTC (rev 4271)
@@ -0,0 +1,88 @@
+/* gpgrlhelp.c - A readline wrapper.
+ * Copyright (C) 2006 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG 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.
+ */
+
+/* This module may by used by applications to initializes readline
+ support. It is required so that we can have hooks in other parts
+ of libcommon without actually requing to link against
+ libreadline. It works along ttyio.c which a proper part of
+ libcommon. */
+
+#include <config.h>
+#include <stdlib.h>
+#include <stddef.h>
+
+#ifdef HAVE_LIBREADLINE
+#define GNUPG_LIBREADLINE_H_INCLUDED
+#include <readline/readline.h>
+#include <readline/history.h>
+#endif
+
+#include "util.h"
+#include "common-defs.h"
+
+
+static void
+set_completer (rl_completion_func_t *completer)
+{
+ rl_attempted_completion_function = completer;
+ rl_inhibit_completion = 0;
+}
+
+static void
+inhibit_completion (int value)
+{
+ rl_inhibit_completion = value;
+}
+
+static void
+cleanup_after_signal (void)
+{
+ rl_free_line_state ();
+ rl_cleanup_after_signal ();
+}
+
+static void
+init_stream (FILE *fp)
+{
+ rl_catch_signals = 0;
+ rl_instream = rl_outstream = fp;
+ rl_inhibit_completion = 1;
+}
+
+
+/* Initialize our readline code. This should be called as early as
+ possible as it is actually a constructur. */
+void
+gnupg_rl_initialize (void)
+{
+ tty_private_set_rl_hooks (init_stream,
+ set_completer,
+ inhibit_completion,
+ cleanup_after_signal,
+ readline,
+ add_history);
+ rl_readline_name = "GnuPG";
+
+}
+
+
+
+
Modified: trunk/common/iobuf.c
===================================================================
--- trunk/common/iobuf.c 2006-09-26 17:32:28 UTC (rev 4270)
+++ trunk/common/iobuf.c 2006-09-27 13:58:13 UTC (rev 4271)
@@ -1037,6 +1037,7 @@
{
memset (a->d.buf, 0, a->d.size); /* erase the buffer */
xfree (a->d.buf);
+ xfree (a->unget.buf);
}
xfree (a);
}
@@ -1538,6 +1539,7 @@
b = a->chain;
assert (b);
xfree (a->d.buf);
+ xfree (a->unget.buf);
xfree (a->real_fname);
memcpy (a, b, sizeof *a);
xfree (b);
@@ -1579,6 +1581,7 @@
*/
b = a->chain;
xfree (a->d.buf);
+ xfree (a->unget.buf);
xfree (a->real_fname);
memcpy (a, b, sizeof *a);
xfree (b);
@@ -1621,6 +1624,7 @@
log_debug ("iobuf-%d.%d: pop `%s' in underflow\n",
a->no, a->subno, a->desc);
xfree (a->d.buf);
+ xfree (a->unget.buf);
xfree (a->real_fname);
memcpy (a, b, sizeof *a);
xfree (b);
@@ -1695,6 +1699,7 @@
log_debug ("iobuf-%d.%d: pop `%s' in underflow (!len)\n",
a->no, a->subno, a->desc);
xfree (a->d.buf);
+ xfree (a->unget.buf);
xfree (a->real_fname);
memcpy (a, b, sizeof *a);
xfree (b);
@@ -1859,6 +1864,31 @@
}
+
+/* This is a verly limited unget fucntion for an iobuf. It does only
+ work in certain cases and should be used with care. */
+void
+iobuf_unread (iobuf_t a, const unsigned char *buf, unsigned int buflen)
+{
+ unsigned int new_len;
+
+ if (!buflen)
+ return;
+
+ /* We always relocate the buffer, which is not optimal. However,
+ the code is easier to read this way, and it is not on the fast
+ path. */
+ if ( !a->unget.buf )
+ a->unget.size = a->unget.start = a->unget.len = 0;
+
+ new_len = a->unget.len + buflen;
+ a->unget.buf = xrealloc(a->unget.buf, new_len);
+ memcpy(a->unget.buf + a->unget.len, buf, buflen);
+ a->unget.len = new_len;
+ a->nofast |= 2;
+}
+
+
/****************
* Have a look at the iobuf.
* NOTE: This only works in special cases.
Modified: trunk/common/iobuf.h
===================================================================
--- trunk/common/iobuf.h 2006-09-26 17:32:28 UTC (rev 4270)
+++ trunk/common/iobuf.h 2006-09-27 13:58:13 UTC (rev 4271)
@@ -44,18 +44,21 @@
{
int use; /* 1 input , 2 output, 3 temp */
off_t nlimit;
- off_t nbytes; /* used together with nlimit */
- off_t ntotal; /* total bytes read (position of stream) */
- int nofast; /* used by the iobuf_get() */
+ off_t nbytes; /* Used together with nlimit. */
+ off_t ntotal; /* Total bytes read (position of stream). */
+ int nofast; /* Used by the iobuf_get (). */
+ /* bit 0 (LSB): slow path because of limit. */
+ /* bit 1: slow path because of unread. */
void *directfp;
struct
{
- size_t size; /* allocated size */
- size_t start; /* number of invalid bytes at the begin of the buffer */
- size_t len; /* currently filled to this size */
+ size_t size; /* Allocated size */
+ size_t start; /* Number of invalid bytes at the
+ begin of the buffer */
+ size_t len; /* Currently filled to this size */
byte *buf;
- }
- d;
+ } d;
+
int filter_eof;
int error;
int (*filter) (void *opaque, int control,
@@ -77,8 +80,7 @@
begin of the buffer */
size_t len; /* currently filled to this size */
byte *buf;
- }
- unget;
+ } unget;
};
#ifndef EXTERN_UNLESS_MAIN_MODULE
@@ -124,6 +126,7 @@
int iobuf_readbyte (iobuf_t a);
int iobuf_read (iobuf_t a, void *buf, unsigned buflen);
+void iobuf_unread (iobuf_t a, const unsigned char *buf, unsigned int buflen);
unsigned iobuf_read_line (iobuf_t a, byte ** addr_of_buffer,
unsigned *length_of_buffer, unsigned *max_length);
int iobuf_peek (iobuf_t a, byte * buf, unsigned buflen);
Modified: trunk/common/util.h
===================================================================
--- trunk/common/util.h 2006-09-26 17:32:28 UTC (rev 4270)
+++ trunk/common/util.h 2006-09-27 13:58:13 UTC (rev 4271)
@@ -28,8 +28,6 @@
#include <gpg-error.h> /* We need gpg_error_t. */
/* Common GNUlib includes (-I ../gl/). */
-#include "strpbrk.h"
-#include "strsep.h"
#include "vasprintf.h"
@@ -196,13 +194,6 @@
};
#endif /* !HAVE_TTYNAME */
-#ifndef HAVE_ISASCII
-static inline int
-isascii (int c)
-{
- return (((c) & ~0x7f) == 0);
-}
-#endif /* !HAVE_ISASCII */
/*-- Macros to replace ctype ones to avoid locale problems. --*/
#define spacep(p) (*(p) == ' ' || *(p) == '\t')
More information about the Gnupg-commits
mailing list