aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/ChangeLog8
-rw-r--r--common/asshelp.c31
-rw-r--r--common/asshelp.h3
-rw-r--r--common/estream.c6
-rw-r--r--common/logging.c115
-rw-r--r--common/logging.h1
-rw-r--r--common/miscellaneous.c2
7 files changed, 113 insertions, 53 deletions
diff --git a/common/ChangeLog b/common/ChangeLog
index 5fd8b03a9..6f33deee8 100644
--- a/common/ChangeLog
+++ b/common/ChangeLog
@@ -1,3 +1,11 @@
+2010-03-11 Werner Koch <[email protected]>
+
+ * estream.c (es_setvbuf): Fix parameter check.
+ (es_set_buffering): Allow a SIZE of 0.
+ * asshelp.c (setup_libassuan_logging, my_libassuan_log_handler): New.
+ * logging.c (do_logv): Add arg IGNORE_ARG_PTR. Change all callers.
+ (log_string): New.
+
2010-03-10 Werner Koch <[email protected]>
* estream.c (es_func_fp_read, es_func_fp_write, es_func_fp_seek)
diff --git a/common/asshelp.c b/common/asshelp.c
index b2d13f32b..76518485f 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -27,6 +27,7 @@
#include <locale.h>
#endif
+#define JNLIB_NEED_LOG_LOGV
#include "i18n.h"
#include "util.h"
#include "exechelp.h"
@@ -34,6 +35,36 @@
#include "status.h"
#include "asshelp.h"
+
+static int
+my_libassuan_log_handler (assuan_context_t ctx, void *hook,
+ unsigned int cat, const char *msg)
+{
+ unsigned int dbgval;
+
+ if (cat != ASSUAN_LOG_CONTROL)
+ return 0; /* We only want the control channel messages. */
+ dbgval = hook? *(unsigned int*)hook : 0;
+ if (!(dbgval & 1024))
+ return 0; /* Assuan debugging is not enabled. */
+
+ if (msg)
+ log_string (JNLIB_LOG_DEBUG, msg);
+
+ return 1;
+}
+
+
+/* Setup libassuan to use our own logging functions. Should be used
+ early at startup. */
+void
+setup_libassuan_logging (unsigned int *debug_var_address)
+{
+ assuan_set_log_cb (my_libassuan_log_handler, debug_var_address);
+}
+
+
+
static gpg_error_t
send_one_option (assuan_context_t ctx, gpg_err_source_t errsource,
const char *name, const char *value, int use_putenv)
diff --git a/common/asshelp.h b/common/asshelp.h
index f7bc88bad..3c961fef8 100644
--- a/common/asshelp.h
+++ b/common/asshelp.h
@@ -25,6 +25,9 @@
#include "session-env.h"
+void setup_libassuan_logging (unsigned int *debug_var_address);
+
+
gpg_error_t
send_pinentry_environment (assuan_context_t ctx,
gpg_err_source_t errsource,
diff --git a/common/estream.c b/common/estream.c
index dfa2de4aa..32567e631 100644
--- a/common/estream.c
+++ b/common/estream.c
@@ -2028,6 +2028,8 @@ es_set_buffering (estream_t ES__RESTRICT stream,
buffer_new = buffer;
else
{
+ if (!size)
+ size = BUFSIZ;
buffer_new = mem_alloc (size);
if (! buffer_new)
{
@@ -3207,8 +3209,8 @@ es_setvbuf (estream_t ES__RESTRICT stream,
{
int err;
- if (((type == _IOFBF) || (type == _IOLBF) || (type == _IONBF))
- && (! ((! size) && (type != _IONBF))))
+ if ((type == _IOFBF || type == _IOLBF || type == _IONBF)
+ && (!buf || size || type == _IONBF))
{
ESTREAM_LOCK (stream);
err = es_set_buffering (stream, buf, type, size);
diff --git a/common/logging.c b/common/logging.c
index c0e01da11..3b767cb97 100644
--- a/common/logging.c
+++ b/common/logging.c
@@ -415,7 +415,7 @@ log_get_stream ()
}
static void
-do_logv (int level, const char *fmt, va_list arg_ptr)
+do_logv (int level, int ignore_arg_ptr, const char *fmt, va_list arg_ptr)
{
if (!logstream)
{
@@ -478,7 +478,10 @@ do_logv (int level, const char *fmt, va_list arg_ptr)
if (fmt)
{
- es_vfprintf_unlocked (logstream, fmt, arg_ptr);
+ if (ignore_arg_ptr)
+ es_fputs_unlocked (fmt, logstream);
+ else
+ es_vfprintf_unlocked (logstream, fmt, arg_ptr);
if (*fmt && fmt[strlen(fmt)-1] != '\n')
missing_lf = 1;
}
@@ -503,76 +506,91 @@ do_logv (int level, const char *fmt, va_list arg_ptr)
static void
-do_log( int level, const char *fmt, ... )
+do_log (int level, const char *fmt, ...)
{
- va_list arg_ptr ;
-
- va_start( arg_ptr, fmt ) ;
- do_logv( level, fmt, arg_ptr );
- va_end(arg_ptr);
+ va_list arg_ptr ;
+
+ va_start (arg_ptr, fmt) ;
+ do_logv (level, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
}
void
log_logv (int level, const char *fmt, va_list arg_ptr)
{
- do_logv (level, fmt, arg_ptr);
+ do_logv (level, 0, fmt, arg_ptr);
}
+
void
-log_info( const char *fmt, ... )
+log_string (int level, const char *string)
{
- va_list arg_ptr ;
+ /* We need to provide a dummy arg_ptr. volatile is needed to
+ suppress compiler warnings. */
+ volatile va_list dummy_arg_ptr;
- va_start( arg_ptr, fmt ) ;
- do_logv( JNLIB_LOG_INFO, fmt, arg_ptr );
- va_end(arg_ptr);
+ do_logv (level, 1, string, dummy_arg_ptr);
}
+
void
-log_error( const char *fmt, ... )
+log_info (const char *fmt, ...)
{
- va_list arg_ptr ;
-
- va_start( arg_ptr, fmt ) ;
- do_logv( JNLIB_LOG_ERROR, fmt, arg_ptr );
- va_end(arg_ptr);
- /* protect against counter overflow */
- if( errorcount < 30000 )
- errorcount++;
+ va_list arg_ptr ;
+
+ va_start (arg_ptr, fmt);
+ do_logv (JNLIB_LOG_INFO, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
}
void
-log_fatal( const char *fmt, ... )
+log_error (const char *fmt, ...)
{
- va_list arg_ptr ;
+ va_list arg_ptr ;
+
+ va_start (arg_ptr, fmt);
+ do_logv (JNLIB_LOG_ERROR, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
+ /* Protect against counter overflow. */
+ if (errorcount < 30000)
+ errorcount++;
+}
+
- va_start( arg_ptr, fmt ) ;
- do_logv( JNLIB_LOG_FATAL, fmt, arg_ptr );
- va_end(arg_ptr);
- abort(); /* never called, but it makes the compiler happy */
+void
+log_fatal (const char *fmt, ...)
+{
+ va_list arg_ptr ;
+
+ va_start (arg_ptr, fmt);
+ do_logv (JNLIB_LOG_FATAL, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
+ abort (); /* Never called; just to make the compiler happy. */
}
+
void
-log_bug( const char *fmt, ... )
+log_bug (const char *fmt, ...)
{
- va_list arg_ptr ;
+ va_list arg_ptr ;
- va_start( arg_ptr, fmt ) ;
- do_logv( JNLIB_LOG_BUG, fmt, arg_ptr );
- va_end(arg_ptr);
- abort(); /* never called, but it makes the compiler happy */
+ va_start (arg_ptr, fmt);
+ do_logv (JNLIB_LOG_BUG, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
+ abort (); /* Never called; just to make the compiler happy. */
}
+
void
-log_debug( const char *fmt, ... )
+log_debug (const char *fmt, ...)
{
- va_list arg_ptr ;
-
- va_start( arg_ptr, fmt ) ;
- do_logv( JNLIB_LOG_DEBUG, fmt, arg_ptr );
- va_end(arg_ptr);
+ va_list arg_ptr ;
+
+ va_start (arg_ptr, fmt);
+ do_logv (JNLIB_LOG_DEBUG, 0, fmt, arg_ptr);
+ va_end (arg_ptr);
}
@@ -580,12 +598,13 @@ void
log_printf (const char *fmt, ...)
{
va_list arg_ptr;
-
+
va_start (arg_ptr, fmt);
- do_logv (fmt ? JNLIB_LOG_CONT : JNLIB_LOG_BEGIN, fmt, arg_ptr);
+ do_logv (fmt ? JNLIB_LOG_CONT : JNLIB_LOG_BEGIN, 0, fmt, arg_ptr);
va_end (arg_ptr);
}
+
/* Print a hexdump of BUFFER. With TEXT of NULL print just the raw
dump, with TEXT just an empty string, print a trailing linefeed,
otherwise print an entire debug line. */
@@ -610,17 +629,15 @@ log_printhex (const char *text, const void *buffer, size_t length)
void
bug_at( const char *file, int line, const char *func )
{
- do_log( JNLIB_LOG_BUG,
- ("... this is a bug (%s:%d:%s)\n"), file, line, func );
- abort(); /* never called, but it makes the compiler happy */
+ do_log (JNLIB_LOG_BUG, ("... this is a bug (%s:%d:%s)\n"), file, line, func);
+ abort (); /* Never called; just to make the compiler happy. */
}
#else
void
bug_at( const char *file, int line )
{
- do_log( JNLIB_LOG_BUG,
- _("you found a bug ... (%s:%d)\n"), file, line);
- abort(); /* never called, but it makes the compiler happy */
+ do_log (JNLIB_LOG_BUG, _("you found a bug ... (%s:%d)\n"), file, line);
+ abort (); /* Never called; just to make the compiler happy. */
}
#endif
diff --git a/common/logging.h b/common/logging.h
index 7f595273d..f089cf0b5 100644
--- a/common/logging.h
+++ b/common/logging.h
@@ -65,6 +65,7 @@ enum jnlib_log_levels {
JNLIB_LOG_DEBUG
};
void log_logv (int level, const char *fmt, va_list arg_ptr);
+void log_string (int level, const char *string);
#endif /*JNLIB_NEED_LOG_LOGV*/
diff --git a/common/miscellaneous.c b/common/miscellaneous.c
index 1c88068f1..396f7224f 100644
--- a/common/miscellaneous.c
+++ b/common/miscellaneous.c
@@ -26,7 +26,6 @@
#include "iobuf.h"
#include "i18n.h"
-
/* Used by libgcrypt for logging. */
static void
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
@@ -97,7 +96,6 @@ setup_libgcrypt_logging (void)
}
-
/* Decide whether the filename is stdout or a real filename and return
* an appropriate string. */
const char *