jnlib/
authorWerner Koch <wk@gnupg.org>
Thu, 24 Jan 2002 13:28:35 +0000 (13:28 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 24 Jan 2002 13:28:35 +0000 (13:28 +0000)
Replaced by a fresh copy from GnuPG (actually the NewPG
development branch).  Adjusted Makefile.am and jnlib-config.h
accordingly.

* logging.c (log_printf): Do not initialize ARG_PTR with 0, we
don't know the correct type.  Instead, run va_start and va_end
unconditionally.
Reported by Jose Carlos Garcia Sogo <jsogo@debian.org>.

mpi/
* mpi-inv.c (_gcry_mpi_invm): Typo fixes, noted by Carlo Perassi.

17 files changed:
ChangeLog
jnlib/ChangeLog
jnlib/Makefile.am
jnlib/README
jnlib/argparse.c
jnlib/argparse.h
jnlib/dotlock.c
jnlib/dotlock.h
jnlib/logging.c
jnlib/logging.h
jnlib/mischelp.h
jnlib/stringhelp.c
jnlib/stringhelp.h
jnlib/xmalloc.c
jnlib/xmalloc.h
mpi/ChangeLog
mpi/mpi-inv.c

index f3ac9e5..eafe8d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-01-24  Werner Koch  <wk@gnupg.org>
+
+       * jnlib/: Replaced by a fresh copy from GnuPG (actually the NewPG
+       development branch).  Adjusted Makefile.am and jnlib-config.h
+       accordingly.
+
 2001-12-18  Werner Koch  <wk@gnupg.org>
 
        Released 1.1.5.
index 5b2b650..63664ec 100644 (file)
@@ -1,31 +1,90 @@
-2000-12-19  Werner Koch  <wk@gnupg.org>
+2002-01-24  Werner Koch  <wk@gnupg.org>
 
-       Major change:
-       Removed all GnuPG stuff and renamed this piece of software
-       to gcrypt. 
+       * argparse.c (strusage): Set default copyright notice year to 2002.
 
-Fri Jul 14 19:38:23 CEST 2000  Werner Koch  <wk@>
+       Fixed the copyright notice of this file, as it has always been
+       part of GnuPG and therefore belongs to the FSF.
 
-        * argparse.c (default_strusage): Changed year of default copyright.
+2001-11-01  Marcus Brinkmann  <marcus@g10code.de>
 
-        * dotlock.c (disable_dotlock): New.
+       * logging.c (log_printf): Do not initialize ARG_PTR with 0, we
+       don't know the correct type.  Instead, run va_start and va_end
+       unconditionally.
+       Reported by Jose Carlos Garcia Sogo <jsogo@debian.org>.
+
+2002-01-19  Werner Koch  <wk@gnupg.org>
+
+       * logging.c (log_get_stream): New.
+
+2001-12-05  Werner Koch  <wk@gnupg.org>
+
+       * logging.c (log_set_prefix): New.
+       (do_logv): Include prefix and pid only if enabled. Print time only
+       when explicitly enabled.
+       (log_logv): New.  
+       * logging.h: Include log_logv() only when requested.
+
+2001-11-06  Werner Koch  <wk@gnupg.org>
+
+       * strlist.c, strlist.h: New. Taken from pgnupg/util/strgutil.c
+
+2001-08-30  Werner Koch  <wk@gnupg.org>
+
+       * logging.c (log_printf): Don't pass NULL instead of arg_ptr.
+
+2001-07-19  Werner Koch  <wk@gnupg.org>
+
+       * stringhelp.c (ascii_memistr,ascii_isupper,ascii_islower,
+       ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New.
+
+2000-07-26 10:02:51  Werner Koch  (wk@habibti.openit.de)
+
+  * stringhelp.c.: Add stdarg.h
+  * argparse.h: s/ulong/unsigned long/ although this should be defined
+  by types.h.
+
+2000-06-28 19:40:23  Werner Koch  (wk@habibti.openit.de)
+
+  * Makefile.am: Replaced second logging.c by .h
+
+2000-05-24 08:58:15  Werner Koch  (wk@habibti.openit.de)
+
+  * logging.c (log_get_errorcount): New.
+
+2000-05-24 08:44:47  Werner Koch  (wk@habibti.openit.de)
+
+  * stringhelp.c: Added a few filename related helper functions.
+
+2000-05-11 18:04:43  Werner Koch  (wk@habibti.openit.de)
+
+  * xmalloc.c (xstrcat2):  Replaced stpcpy to quickly address W32
+    problems.
+
+2000-05-02 19:43:38  Werner Koch  (wk@habibti.openit.de)
+
+  * xmalloc.c (xstrcat2): New.
 
 Mon Jan 24 13:04:28 CET 2000  Werner Koch  <wk@gnupg.de>
 
-       * README: New.
-       * Makefile.am: new.
-       * argparse.c argparse.h logging.c logging.h
-         mischelp.h stringhelp.c stringhelp.h xmalloc.c
-         xmalloc.h dotlock.c: Moved from ../util to here.
-       * dotlock.h: New.
-       * libjnlib-config.h: New.
+  * README: New.
+  * Makefile.am: new.
+  * argparse.c argparse.h logging.c logging.h
+    mischelp.h stringhelp.c stringhelp.h xmalloc.c
+    xmalloc.h dotlock.c: Moved from ../util to here.
+  * dotlock.h: New.
+  * libjnlib-config.h: New.
+
+  * logging.c (log_set_file): New.
+  (log_printf): New.
+  (do_logv): Add kludge to insert LFs.
 
-       * logging.c (log_set_file): New.
-       (log_printf): New.
-       (do_logv): Add kludge to insert LFs.
 
+     ***********************************************************
+     * Please note that Jnlib is maintained as part of GnuPG.  *
+     * You may find it source-copied in other packages.        *
+     ***********************************************************       
        
- Copyright 2000,2001 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
 
  This file is free software; as a special exception the author gives
  unlimited permission to copy and/or distribute it, with or without
index a690bfc..941d911 100644 (file)
@@ -1,16 +1,39 @@
+# Copyright (C) 1999, 2000, 2001 Feee Software Soundation, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
 ## Process this file with automake to produce Makefile.in
 
-EXTRA_DIST = README 
+EXTRA_DIST = README
 
-INCLUDES = -I$(top_srcdir)/src 
+INCLUDES = -I$(top_srcdir)/src
 
 noinst_LTLIBRARIES = libjnlib.la
 
 
-libjnlib_la_LDFLAGS =
-libjnlib_la_SOURCES = libjnlib-config.h          \
-                     stringhelp.c stringhelp.h \
-                     mischelp.h
-
+#libjnlib_la_LDFLAGS =
+libjnlib_la_SOURCES = \
+       libjnlib-config.h \
+       stringhelp.c stringhelp.h \
+       mischelp.h
 
+#      strlist.c strlist.h \
+#      argparse.c argparse.h \
+#      logging.c logging.h  \
+#      dotlock.c dotlock.h  \
+#                   xmalloc.c xmalloc.h       
 
index 694c378..e49ef44 100644 (file)
@@ -3,5 +3,5 @@ too small to put into a library.
 
 libjnlib-config.h should be be modified for each project
 to make these functions fit into the software. Mainly these
-are memory functions in case you need another allocaort (like gcrypt).
+are memory functions in case you need another allocator.
 
index 1d0c49b..2733164 100644 (file)
@@ -1,13 +1,14 @@
 /* [argparse.c wk 17.06.97] Argument Parser for option handling
- *     Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+ *     Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ *
  *  This file is part of GnuPG.
  *
- *  Libgcrypt is free software; you can redistribute it and/or modify
+ *  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.
  *
- *  Libgcrypt is distributed in the hope that it will be useful,
+ *  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.
@@ -899,7 +900,7 @@ strusage( int level )
     switch( level ) {
       case 11: p = "foo"; break;
       case 13: p = "0.0"; break;
-      case 14: p = "Copyright (C) 2000 Free Software Foundation, Inc."; break;
+      case 14: p = "Copyright (C) 2002 Free Software Foundation, Inc."; break;
       case 15: p =
 "This program comes with ABSOLUTELY NO WARRANTY.\n"
 "This is free software, and you are welcome to redistribute it\n"
index c32d066..e8922fa 100644 (file)
@@ -1,14 +1,14 @@
 /* argparse.h
- *     Copyright (C) 1998,1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1998,1999,2000,2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -21,6 +21,9 @@
 #ifndef LIBJNLIB_ARGPARSE_H
 #define LIBJNLIB_ARGPARSE_H
 
+#include <stdio.h>
+#include "types.h"
+
 typedef struct {
      int  *argc;           /* pointer to argc (value subject to change) */
      char ***argv;         /* pointer to argv (value subject to change) */
@@ -32,7 +35,7 @@ typedef struct {
      union {
         int   ret_int;
         long  ret_long;
-        ulong ret_ulong;
+        unsigned long ret_ulong;
         char *ret_str;
      } r;                  /* Return values */
      struct {
index b755bab..772c770 100644 (file)
@@ -1,14 +1,14 @@
 /* dotlock.c - dotfile locking
- *     Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ *     Copyright (C) 1998,2000,2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -42,22 +42,14 @@ struct dotlock_handle {
     char *tname;    /* name of lockfile template */
     char *lockname; /* name of the real lockfile */
     int locked;     /* lock status */
-    int disable;    /* locking */
 };
 
 
 static DOTLOCK all_lockfiles;
-static int never_lock;
 
 static int read_lockfile( const char *name );
 static void remove_lockfiles(void);
 
-void
-disable_dotlock(void)
-{
-    never_lock = 1;
-}
-
 /****************
  * Create a lockfile with the given name and return an object of
  * type DOTLOCK which may be used later to actually do the lock.
@@ -96,16 +88,6 @@ create_dotlock( const char *file_to_lock )
        return NULL;
 
     h = jnlib_xcalloc( 1, sizeof *h );
-    if( never_lock ) {
-       h->disable = 1;
-      #ifdef _REENTRANT
-       /* fixme: aquire mutex on all_lockfiles */
-      #endif
-       h->next = all_lockfiles;
-       all_lockfiles = h;
-       return h;
-    }
-
 #ifndef HAVE_DOSISH_SYSTEM
     sprintf( pidstr, "%10d\n", (int)getpid() );
     /* fixme: add the hostname to the second line (FQDN or IP addr?) */
@@ -209,10 +191,6 @@ make_dotlock( DOTLOCK h, long timeout )
     const char *maybe_dead="";
     int backoff=0;
 
-    if( h->disable ) {
-       return 0;
-    }
-
     if( h->locked ) {
        log_debug("oops, `%s' is already locked\n", h->lockname );
        return 0;
@@ -281,10 +259,6 @@ release_dotlock( DOTLOCK h )
 #else
     int pid;
 
-    if( h->disable ) {
-       return 0;
-    }
-
     if( !h->locked ) {
        log_debug("oops, `%s' is not locked\n", h->lockname );
        return 0;
@@ -359,13 +333,11 @@ remove_lockfiles()
 
     while( h ) {
        h2 = h->next;
-       if( !h->disable ) {
-           if( h->locked )
-               unlink( h->lockname );
-           unlink(h->tname);
-           jnlib_free(h->tname);
-           jnlib_free(h->lockname);
-       }
+       if( h->locked )
+           unlink( h->lockname );
+       unlink(h->tname);
+       jnlib_free(h->tname);
+       jnlib_free(h->lockname);
        jnlib_free(h);
        h = h2;
     }
index f98484e..7d45c82 100644 (file)
@@ -1,14 +1,14 @@
 /* dotlock.h
- *     Copyright (C) 2000 Free Software Foundation, Inc.
+ *     Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -24,7 +24,6 @@
 struct dotlock_handle;
 typedef struct dotlock_handle *DOTLOCK;
 
-void disable_dotlock(void);
 DOTLOCK create_dotlock( const char *file_to_lock );
 int make_dotlock( DOTLOCK h, long timeout );
 int release_dotlock( DOTLOCK h );
index 1497238..2e0d53a 100644 (file)
@@ -1,14 +1,14 @@
 /* logging.c - useful logging functions
- *     Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -20,7 +20,7 @@
 
 
 /* This file should replace logger.c in the future - for now it is not
- * used GnuPG.
+ * used by GnuPG but by GPA.
  * It is a quite simple implemenation but sufficient for most purposes.
  */
 
 #include <stdarg.h>
 #include <errno.h>
 #include <time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#ifdef __MINGW32__
+  #include <io.h>
+#endif
 
+#define JNLIB_NEED_LOG_LOGV 1
 #include "libjnlib-config.h"
 #include "logging.h"
 
-enum my_log_levels {
-    MY_LOG_BEGIN,  /* only print the timestamp if configured */
-    MY_LOG_CONT,
-    MY_LOG_INFO,
-    MY_LOG_WARN,
-    MY_LOG_ERROR,
-    MY_LOG_FATAL,
-    MY_LOG_BUG,
-    MY_LOG_DEBUG
-};
 
 static FILE *logstream;
-static int use_time;
+static char prefix_buffer[80];
+static int with_time;
+static int with_prefix;
+static int with_pid;
+
 static int missing_lf;
+static int errorcount;
 
 #if 0
 static void
@@ -68,6 +69,15 @@ do_die(int rc, const char *text )
 }
 #endif
 
+int
+log_get_errorcount (int clear)
+{
+    int n = errorcount;
+    if( clear )
+       errorcount = 0;
+    return n;
+}
+
 void
 log_set_file( const char *name )
 {
@@ -82,61 +92,93 @@ log_set_file( const char *name )
     if( logstream && logstream != stderr )
        fclose( logstream );
     logstream = fp;
-    use_time = fp != stderr;
     missing_lf = 0;
 }
 
 
+void
+log_set_prefix (const char *text, unsigned int flags)
+{
+  if (text)
+    {
+      strncpy (prefix_buffer, text, sizeof (prefix_buffer)-1);
+      prefix_buffer[sizeof (prefix_buffer)-1] = 0;
+    }
+  
+  with_prefix = (flags & 1);
+  with_time = (flags & 2);
+  with_pid  = (flags & 4);
+}
+
 int
 log_get_fd()
 {
     return fileno(logstream?logstream:stderr);
 }
 
-static void
-do_logv( int level, const char *fmt, va_list arg_ptr )
+FILE *
+log_get_stream ()
 {
-    if( !logstream )
-       logstream = stderr;
-
-    if( missing_lf && level != MY_LOG_CONT )
-       putc('\n', logstream );
-    missing_lf = 0;
+    return logstream?logstream:stderr;
+}
 
-    if( use_time && level != MY_LOG_CONT ) {
-       /* Note this does not work for multiple line logging as we would
-        * need to print to a buffer first */
-       struct tm *tp;
-       time_t atime = time(NULL);
 
-       tp = localtime( &atime );
-       fprintf( logstream, "%04d-%02d-%02d %02d:%02d:%02d ",
-                   1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday,
-                        tp->tm_hour, tp->tm_min, tp->tm_sec );
+static void
+do_logv( int level, const char *fmt, va_list arg_ptr )
+{
+  if (!logstream)
+    logstream = stderr;
+
+  if (missing_lf && level != JNLIB_LOG_CONT)
+    putc('\n', logstream );
+  missing_lf = 0;
+
+  if (level != JNLIB_LOG_CONT)
+    { /* Note this does not work for multiple line logging as we would
+       * need to print to a buffer first */
+      if (with_time)
+        {
+          struct tm *tp;
+          time_t atime = time (NULL);
+          
+          tp = localtime (&atime);
+          fprintf (logstream, "%04d-%02d-%02d %02d:%02d:%02d ",
+                   1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday,
+                   tp->tm_hour, tp->tm_min, tp->tm_sec );
+        }
+      if (with_prefix)
+        fputs (prefix_buffer, logstream);
+      if (with_pid)
+        fprintf (logstream, "[%u]", (unsigned int)getpid ());
+      if (!with_time)
+        putc (':', logstream);
+      putc (' ', logstream);
     }
 
-    switch ( level ) {
-      case MY_LOG_BEGIN: break;
-      case MY_LOG_CONT: break;
-      case MY_LOG_INFO: break;
-      case MY_LOG_WARN: break;
-      case MY_LOG_ERROR: break;
-      case MY_LOG_FATAL: fputs("Fatal: ",logstream ); break;
-      case MY_LOG_BUG: fputs("Ohhhh jeeee: ", logstream); break;
-      case MY_LOG_DEBUG: fputs("DBG: ", logstream ); break;
-      default: fprintf(logstream,"[Unknown log level %d]: ", level ); break;
+  switch (level)
+    {
+    case JNLIB_LOG_BEGIN: break;
+    case JNLIB_LOG_CONT: break;
+    case JNLIB_LOG_INFO: break;
+    case JNLIB_LOG_WARN: break;
+    case JNLIB_LOG_ERROR: break;
+    case JNLIB_LOG_FATAL: fputs("Fatal: ",logstream ); break;
+    case JNLIB_LOG_BUG: fputs("Ohhhh jeeee: ", logstream); break;
+    case JNLIB_LOG_DEBUG: fputs("DBG: ", logstream ); break;
+    default: fprintf(logstream,"[Unknown log level %d]: ", level ); break;
     }
 
-    if( fmt ) {
-       vfprintf(logstream,fmt,arg_ptr) ;
-       if( *fmt && fmt[strlen(fmt)-1] != '\n' )
-           missing_lf = 1;
+  if (fmt)
+    {
+      vfprintf(logstream,fmt,arg_ptr) ;
+      if (*fmt && fmt[strlen(fmt)-1] != '\n')
+        missing_lf = 1;
     }
 
-    if( level == MY_LOG_FATAL )
-       exit(2);
-    if( level == MY_LOG_BUG )
-       abort();
+  if (level == JNLIB_LOG_FATAL)
+    exit(2);
+  if (level == JNLIB_LOG_BUG)
+    abort();
 }
 
 static void
@@ -150,6 +192,11 @@ do_log( int level, const char *fmt, ... )
 }
 
 
+void
+log_logv (int level, const char *fmt, va_list arg_ptr)
+{
+  do_logv (level, fmt, arg_ptr);
+}
 
 void
 log_info( const char *fmt, ... )
@@ -157,7 +204,7 @@ log_info( const char *fmt, ... )
     va_list arg_ptr ;
 
     va_start( arg_ptr, fmt ) ;
-    do_logv( MY_LOG_INFO, fmt, arg_ptr );
+    do_logv( JNLIB_LOG_INFO, fmt, arg_ptr );
     va_end(arg_ptr);
 }
 
@@ -167,8 +214,11 @@ log_error( const char *fmt, ... )
     va_list arg_ptr ;
 
     va_start( arg_ptr, fmt ) ;
-    do_logv( MY_LOG_ERROR, fmt, arg_ptr );
+    do_logv( JNLIB_LOG_ERROR, fmt, arg_ptr );
     va_end(arg_ptr);
+    /* protect against counter overflow */
+    if( errorcount < 30000 )
+       errorcount++;
 }
 
 
@@ -178,7 +228,7 @@ log_fatal( const char *fmt, ... )
     va_list arg_ptr ;
 
     va_start( arg_ptr, fmt ) ;
-    do_logv( MY_LOG_FATAL, fmt, arg_ptr );
+    do_logv( JNLIB_LOG_FATAL, fmt, arg_ptr );
     va_end(arg_ptr);
     abort(); /* never called, bugs it makes the compiler happy */
 }
@@ -189,7 +239,7 @@ log_bug( const char *fmt, ... )
     va_list arg_ptr ;
 
     va_start( arg_ptr, fmt ) ;
-    do_logv( MY_LOG_BUG, fmt, arg_ptr );
+    do_logv( JNLIB_LOG_BUG, fmt, arg_ptr );
     va_end(arg_ptr);
     abort(); /* never called, but it makes the compiler happy */
 }
@@ -200,24 +250,38 @@ log_debug( const char *fmt, ... )
     va_list arg_ptr ;
 
     va_start( arg_ptr, fmt ) ;
-    do_logv( MY_LOG_DEBUG, fmt, arg_ptr );
+    do_logv( JNLIB_LOG_DEBUG, fmt, arg_ptr );
     va_end(arg_ptr);
 }
 
 
 void
-log_printf( const char *fmt, ... )
+log_printf (const char *fmt, ...)
 {
-    va_list arg_ptr ;
+  va_list arg_ptr;
 
-    if( !fmt ) {
-       do_logv( MY_LOG_BEGIN, NULL, NULL );
-    }
-    else {
-       va_start( arg_ptr, fmt ) ;
-       do_logv( MY_LOG_CONT, fmt, arg_ptr );
-       va_end(arg_ptr);
+  va_start (arg_ptr, fmt);
+  do_logv (fmt ? JNLIB_LOG_CONT : JNLIB_LOG_BEGIN, 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. */
+void
+log_printhex (const char *text, const void *buffer, size_t length)
+{
+  if (text && *text)
+    log_debug ("%s ", text);
+  if (length)
+    {
+      const unsigned char *p = buffer;
+      log_printf ("%02X", *p);
+      for (length--, p++; length--; p++)
+        log_printf (" %02X", *p);
     }
+  if (text)
+    log_printf ("\n");
 }
 
 
@@ -225,7 +289,7 @@ log_printf( const char *fmt, ... )
 void
 bug_at( const char *file, int line, const char *func )
 {
-    do_log( MY_LOG_BUG,
+    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 */
 }
@@ -233,7 +297,7 @@ bug_at( const char *file, int line, const char *func )
 void
 bug_at( const char *file, int line )
 {
-    do_log( MY_LOG_BUG,
+    do_log( JNLIB_LOG_BUG,
             _("you found a bug ... (%s:%d)\n"), file, line);
     abort(); /* never called, but it makes the compiler happy */
 }
index 7eb7489..7b7b8c8 100644 (file)
@@ -1,14 +1,14 @@
 /* logging.h
- *     Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ *     Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
 #include <stdio.h>
 #include "mischelp.h"
 
+
+int  log_get_errorcount (int clear);
 void log_set_file( const char *name );
+void log_set_prefix (const char *text, unsigned int flags);
 int  log_get_fd(void);
+FILE *log_get_stream (void);
 
 #ifdef JNLIB_GCC_M_FUNCTION
   void bug_at( const char *file, int line, const char *func ) JNLIB_GCC_A_NR;
@@ -35,12 +39,36 @@ int  log_get_fd(void);
 # define BUG() bug_at( __FILE__ , __LINE__ )
 #endif
 
+/* To avoid mandatory inclusion of stdarg and other stuff, do it only
+   if explicitly requested to do so. */
+#ifdef JNLIB_NEED_LOG_LOGV
+#include <stdarg.h>
+enum jnlib_log_levels {
+    JNLIB_LOG_BEGIN,
+    JNLIB_LOG_CONT,
+    JNLIB_LOG_INFO,
+    JNLIB_LOG_WARN,
+    JNLIB_LOG_ERROR,
+    JNLIB_LOG_FATAL,
+    JNLIB_LOG_BUG,
+    JNLIB_LOG_DEBUG
+};
+void log_logv (int level, const char *fmt, va_list arg_ptr);
+#endif /*JNLIB_NEED_LOG_LOGV*/
+
+
 void log_bug( const char *fmt, ... )   JNLIB_GCC_A_NR_PRINTF(1,2);
 void log_fatal( const char *fmt, ... ) JNLIB_GCC_A_NR_PRINTF(1,2);
 void log_error( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
 void log_info( const char *fmt, ... )  JNLIB_GCC_A_PRINTF(1,2);
 void log_debug( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
 void log_printf( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2);
+void log_printhex (const char *text, const void *buffer, size_t length);
 
 
 #endif /*LIBJNLIB_LOGGING_H*/
+
+
+
+
+
index abe82a9..58c9250 100644 (file)
@@ -1,14 +1,14 @@
 /* mischelp.h
- *     Copyright (C) 1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
index 5a02d4a..0d3035e 100644 (file)
@@ -1,14 +1,14 @@
 /* stringhelp.c -  standard string helper functions
- *     Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -21,6 +21,7 @@
 #include <config.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdarg.h>
 #include <ctype.h>
 
 #include "libjnlib-config.h"
@@ -159,6 +160,182 @@ trim_trailing_ws( byte *line, unsigned len )
 }
 
 
+/***************
+ * Extract from a given path the filename component.
+ *
+ */
+char *
+make_basename(const char *filepath)
+{
+    char *p;
+
+    if ( !(p=strrchr(filepath, '/')) )
+      #ifdef HAVE_DRIVE_LETTERS
+       if ( !(p=strrchr(filepath, '\\')) )
+           if ( !(p=strrchr(filepath, ':')) )
+      #endif
+             {
+               return jnlib_xstrdup(filepath);
+             }
+
+    return jnlib_xstrdup(p+1);
+}
+
+
+
+/***************
+ * Extract from a given filename the path prepended to it.
+ * If their isn't a path prepended to the filename, a dot
+ * is returned ('.').
+ *
+ */
+char *
+make_dirname(const char *filepath)
+{
+    char *dirname;
+    int  dirname_length;
+    char *p;
+
+    if ( !(p=strrchr(filepath, '/')) )
+      #ifdef HAVE_DRIVE_LETTERS
+       if ( !(p=strrchr(filepath, '\\')) )
+           if ( !(p=strrchr(filepath, ':')) )
+      #endif
+             {
+               return jnlib_xstrdup(".");
+             }
+
+    dirname_length = p-filepath;
+    dirname = jnlib_xmalloc(dirname_length+1);
+    strncpy(dirname, filepath, dirname_length);
+    dirname[dirname_length] = 0;
+
+    return dirname;
+}
+
+
+
+/****************
+ * Construct a filename from the NULL terminated list of parts.
+ * Tilde expansion is done here.
+ */
+char *
+make_filename( const char *first_part, ... )
+{
+    va_list arg_ptr ;
+    size_t n;
+    const char *s;
+    char *name, *home, *p;
+
+    va_start( arg_ptr, first_part ) ;
+    n = strlen(first_part)+1;
+    while( (s=va_arg(arg_ptr, const char *)) )
+       n += strlen(s) + 1;
+    va_end(arg_ptr);
+
+    home = NULL;
+    if( *first_part == '~' && first_part[1] == '/'
+                          && (home = getenv("HOME")) && *home )
+       n += strlen(home);
+
+    name = jnlib_xmalloc(n);
+    p = home ? stpcpy(stpcpy(name,home), first_part+1)
+            : stpcpy(name, first_part);
+    va_start( arg_ptr, first_part ) ;
+    while( (s=va_arg(arg_ptr, const char *)) )
+       p = stpcpy(stpcpy(p,"/"), s);
+    va_end(arg_ptr);
+
+    return name;
+}
+
+
+int
+compare_filenames( const char *a, const char *b )
+{
+    /* ? check whether this is an absolute filename and
+     * resolve symlinks?
+     */
+  #ifdef HAVE_DRIVE_LETTERS
+    return stricmp(a,b);
+  #else
+    return strcmp(a,b);
+  #endif
+}
+
+
+/****************************************************
+ ******** locale insensitive ctype functions ********
+ ****************************************************/
+/* FIXME: replace them by a table lookup and macros */
+int
+ascii_isupper (int c)
+{
+    return c >= 'A' && c <= 'Z';
+}
+
+int
+ascii_islower (int c)
+{
+    return c >= 'a' && c <= 'z';
+}
+
+int 
+ascii_toupper (int c)
+{
+    if (c >= 'a' && c <= 'z')
+        c &= ~0x20;
+    return c;
+}
+
+int 
+ascii_tolower (int c)
+{
+    if (c >= 'A' && c <= 'Z')
+        c |= 0x20;
+    return c;
+}
+
+
+int
+ascii_strcasecmp( const char *a, const char *b )
+{
+    if (a == b)
+        return 0;
+
+    for (; *a && *b; a++, b++) {
+       if (*a != *b && ascii_toupper(*a) != ascii_toupper(*b))
+           break;
+    }
+    return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b));
+}
+
+int
+ascii_memcasecmp( const char *a, const char *b, size_t n )
+{
+    if (a == b)
+        return 0;
+    for ( ; n; n--, a++, b++ ) {
+       if( *a != *b  && ascii_toupper (*a) != ascii_toupper (*b) )
+            return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b));
+    }
+    return 0;
+}
+
+int
+ascii_strcmp( const char *a, const char *b )
+{
+    if (a == b)
+        return 0;
+
+    for (; *a && *b; a++, b++) {
+       if (*a != *b )
+           break;
+    }
+    return *a == *b? 0 : (*(signed char *)a - *(signed char *)b);
+}
+
+
 
 /*********************************************
  ********** missing string functions *********
index 38019cf..17a6ad0 100644 (file)
@@ -1,14 +1,14 @@
 /* stringhelp.h
- *     Copyright (C) 1998,1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1998,1999,2000,2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -21,6 +21,7 @@
 #ifndef LIBJNLIB_STRINGHELP_H
 #define LIBJNLIB_STRINGHELP_H
 
+#include "types.h"
 
 const char *memistr( const char *buf, size_t buflen, const char *sub );
 char *mem2str( char *, const void *, size_t);
@@ -31,6 +32,20 @@ unsigned int trim_trailing_chars( unsigned char *line, unsigned len,
 unsigned int trim_trailing_ws( unsigned char *line, unsigned len );
 
 
+char *make_basename(const char *filepath);
+char *make_dirname(const char *filepath);
+char *make_filename( const char *first_part, ... );
+int compare_filenames( const char *a, const char *b );
+
+const char *ascii_memistr( const char *buf, size_t buflen, const char *sub );
+int ascii_isupper (int c);
+int ascii_islower (int c);
+int ascii_toupper (int c);
+int ascii_tolower (int c);
+int ascii_strcasecmp( const char *a, const char *b );
+int ascii_memcasecmp( const char *a, const char *b, size_t n );
+
+
 #ifndef HAVE_MEMICMP
 int memicmp( const char *a, const char *b, size_t n );
 #endif
@@ -50,7 +65,6 @@ char *strlwr(char *a);
   #define stricmp(a,b)  strcasecmp( (a), (b) )
 #endif
 
-
 #ifndef STR
   #define STR(v) #v
 #endif
index fe53fb8..1cfaab9 100644 (file)
@@ -1,14 +1,14 @@
 /* xmalloc.c - standard malloc wrappers
- *     Copyright (C) 1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -20,6 +20,7 @@
 
 #include <config.h>
 #include <stdlib.h>
+#include <string.h>
 #include <stdio.h>
 
 #include "libjnlib-config.h"
@@ -68,3 +69,20 @@ xstrdup( const char *string )
     return p;
 }
 
+
+char *
+xstrcat2( const char *a, const char *b )
+{
+    size_t n1;
+    char *p;
+
+    if( !b )
+       return xstrdup( a );
+
+    n1 = strlen(a);
+    p = xmalloc( n1 + strlen(b) + 1 );
+    memcpy(p, a, n1 );
+    strcpy(p+n1, b );
+    return p;
+}
+
index 27c43b1..150ef36 100644 (file)
@@ -1,14 +1,14 @@
 /* xmalloc.h
- *     Copyright (C) 1999 Free Software Foundation, Inc.
+ *     Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
  *
- * This file is part of Libgcrypt.
+ * This file is part of GnuPG.
  *
- * Libgcrypt is free software; you can redistribute it and/or modify
+ * 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.
  *
- * Libgcrypt is distributed in the hope that it will be useful,
+ * 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.
@@ -25,6 +25,7 @@ void *xmalloc( size_t n );
 void *xrealloc( void *a, size_t n );
 void *xcalloc( size_t n, size_t m );
 char *xstrdup( const char *string );
+char *xstrcat2( const char *a, const char *b );
 
 
 #endif /*LIBJNLIB_XMALLOC_H*/
index 89384b0..46355f2 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-14  Werner Koch  <wk@gnupg.org>
+
+       * mpi-inv.c (_gcry_mpi_invm): Typo fixes, noted by Carlo Perassi.
+
 2001-11-01  Werner Koch  <wk@gnupg.org>
 
        * mpicoder.c (gcry_mpi_scan): Allow to pass a nbytes as NULL or
index ab890a7..99924b4 100644 (file)
@@ -77,8 +77,8 @@ _gcry_mpi_invm( MPI x, MPI a, MPI n )
     mpi_free(u);
     mpi_free(v);
   #elif 0
-    /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
-     * modified according to Michael Penk's solution for Exercice 35 */
+    /* Extended Euclid's algorithm (See TAOCP Vol II, 4.5.2, Alg X)
+     * modified according to Michael Penk's solution for Exercise 35 */
 
     /* FIXME: we can simplify this in most cases (see Knuth) */
     MPI u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3;
@@ -158,8 +158,8 @@ _gcry_mpi_invm( MPI x, MPI a, MPI n )
     mpi_free(t2);
     mpi_free(t3);
   #else
-    /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
-     * modified according to Michael Penk's solution for Exercice 35
+    /* Extended Euclid's algorithm (See TAOCP Vol II, 4.5.2, Alg X)
+     * modified according to Michael Penk's solution for Exercise 35
      * with further enhancement */
     MPI u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3;
     unsigned k;