[svn] GnuPG - r4122 - in branches/GNUPG-1-9-BRANCH: common g10 jnlib

svn author wk cvs at cvs.gnupg.org
Fri Apr 21 14:56:42 CEST 2006


Author: wk
Date: 2006-04-21 14:56:40 +0200 (Fri, 21 Apr 2006)
New Revision: 4122

Modified:
   branches/GNUPG-1-9-BRANCH/common/ChangeLog
   branches/GNUPG-1-9-BRANCH/common/iobuf.c
   branches/GNUPG-1-9-BRANCH/common/iobuf.h
   branches/GNUPG-1-9-BRANCH/common/miscellaneous.c
   branches/GNUPG-1-9-BRANCH/g10/exec.c
   branches/GNUPG-1-9-BRANCH/g10/keydb.c
   branches/GNUPG-1-9-BRANCH/g10/keylist.c
   branches/GNUPG-1-9-BRANCH/g10/keyserver.c
   branches/GNUPG-1-9-BRANCH/g10/mainproc.c
   branches/GNUPG-1-9-BRANCH/g10/options.h
   branches/GNUPG-1-9-BRANCH/g10/plaintext.c
   branches/GNUPG-1-9-BRANCH/g10/seckey-cert.c
   branches/GNUPG-1-9-BRANCH/g10/sign.c
   branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog
   branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c
   branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h
Log:
Still merging 1.4.3 code back


Modified: branches/GNUPG-1-9-BRANCH/common/ChangeLog
===================================================================
--- branches/GNUPG-1-9-BRANCH/common/ChangeLog	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/common/ChangeLog	2006-04-21 12:56:40 UTC (rev 4122)
@@ -1,3 +1,19 @@
+2006-04-19  Werner Koch  <wk at g10code.com>
+
+	* iobuf.c (iobuf_get_fd): New.  Taken from 1.4.3.
+	(iobuf_is_pipe_filename): New.
+	(pop_filter): Made static.
+	(iobuf_skip_rest): New.  Orginal patch by Florian
+	Weimer.  Added new argument PARTIAL.
+	(block_filter): Remove the old gpg indeterminate length mode.
+	(block_filter): Properly handle a partial body stream
+	that ends with a 5-byte length that happens to be zero.
+	(iobuf_set_block_mode, iobuf_in_block_mode): Removed as
+	superfluous.
+	(iobuf_get_filelength): New arg OVERFLOW.
+	(iobuf_get_filelength) [W32]: Use GetFileSizeEx if available
+	* miscellaneous.c (is_file_compressed): Take care of OVERFLOW.
+
 2006-04-18  Werner Koch  <wk at g10code.com>
 
 	* homedir.c (w32_shgetfolderpath): New.  Taken from gpg 1.4.3.

Modified: branches/GNUPG-1-9-BRANCH/common/iobuf.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/common/iobuf.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/common/iobuf.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -1,5 +1,6 @@
 /* iobuf.c  -  file handling
- * Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2003,
+ *               2004, 2006  Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -41,6 +42,11 @@
 #include "util.h"
 #include "iobuf.h"
 
+/* The size of the internal buffers. 
+   NOTE: If you change this value you MUST also adjust the regression
+   test "armored_key_8192" in armor.test! */
+#define IOBUF_BUFFER_SIZE  8192
+
 #undef FILE_FILTER_USES_STDIO
 
 #ifdef HAVE_DOSISH_SYSTEM
@@ -762,32 +768,23 @@
 			  break;
 			}
 		      a->size |= c;
+                      a->partial = 2;
+                      if (!a->size)
+                        {
+                          a->eof = 1;
+                          if (!n)
+                            rc = -1;
+                          break;
+			}
 		    }
 		  else
-		    {		/* next partial body length */
+		    { /* Next partial body length. */
 		      a->size = 1 << (c & 0x1f);
 		    }
 		  /*  log_debug("partial: ctx=%p c=%02x size=%u\n", a, c, a->size); */
 		}
 	      else
-		{		/* the gnupg partial length scheme - much better :-) */
-		  c = iobuf_get (chain);
-		  a->size = c << 8;
-		  c = iobuf_get (chain);
-		  a->size |= c;
-		  if (c == -1)
-		    {
-		      log_error ("block_filter: error reading length info\n");
-		      rc = GPG_ERR_BAD_DATA;
-		    }
-		  if (!a->size)
-		    {
-		      a->eof = 1;
-		      if (!n)
-			rc = -1;
-		      break;
-		    }
-		}
+		BUG ();	
 	    }
 
 	  while (!rc && size && a->size)
@@ -876,39 +873,7 @@
 	    }
 	}
       else
-	{			/* the gnupg scheme (which is not openpgp compliant) */
-	  size_t avail, n;
-
-	  for (p = buf; !rc && size;)
-	    {
-	      n = size;
-	      avail = a->size - a->count;
-	      if (!avail)
-		{
-		  if (n > a->size)
-		    {
-		      iobuf_put (chain, (a->size >> 8) & 0xff);
-		      iobuf_put (chain, a->size & 0xff);
-		      avail = a->size;
-		      a->count = 0;
-		    }
-		  else
-		    {
-		      iobuf_put (chain, (n >> 8) & 0xff);
-		      iobuf_put (chain, n & 0xff);
-		      avail = n;
-		      a->count = a->size - n;
-		    }
-		}
-	      if (n > avail)
-		n = avail;
-	      if (iobuf_write (chain, p, n))
-		rc = gpg_error_from_errno (errno);
-	      a->count += n;
-	      p += n;
-	      size -= n;
-	    }
-	}
+	BUG ();
     }
   else if (control == IOBUFCTRL_INIT)
     {
@@ -976,10 +941,7 @@
 	      a->buflen = 0;
 	    }
 	  else
-	    {
-	      iobuf_writebyte (chain, 0);
-	      iobuf_writebyte (chain, 0);
-	    }
+	    BUG ();
 	}
       else if (a->size)
 	{
@@ -1159,11 +1121,10 @@
   special_names_enabled = yes;
 }
 
-/*
- * see whether the filename has the for "-&nnnn", where n is a
- * non-zero number.
- * Returns this number or -1 if it is not the case.
- */
+
+/* See whether the filename has the form "-&nnnn", where n is a
+   non-zero number.  Returns this number or -1 if it is not the
+   case.  */
 static int
 check_special_filename (const char *fname)
 {
@@ -1180,6 +1141,17 @@
   return -1;
 }
 
+
+/* This fucntion returns true if FNAME indicates a PIPE (stdout or
+   stderr) or a special file name if those are enabled. */
+int
+iobuf_is_pipe_filename (const char *fname)
+{
+  if (!fname || (*fname=='-' && !fname[1]) )
+    return 1;
+  return check_special_filename (fname) != -1;
+}
+
 /****************
  * Create a head iobuf for reading from a file
  * returns: NULL if an error occures and sets errno
@@ -1547,7 +1519,7 @@
 /****************
  * Remove an i/o filter.
  */
-int
+static int
 pop_filter (iobuf_t a, int (*f) (void *opaque, int control,
 			       iobuf_t chain, byte * buf, size_t * len),
 	    void *ov)
@@ -2038,49 +2010,110 @@
 
 
 
-/****************
- * Return the length of an open file
- */
+/* Return the length of an open file A.  IF OVERFLOW is not NULL it
+   will be set to true if the file is larger than what off_t can cope
+   with.  The function return 0 on error or on overflow condition.  */
 off_t
-iobuf_get_filelength (iobuf_t a)
+iobuf_get_filelength (iobuf_t a, int *overflow)
 {
-  struct stat st;
+    struct stat st;
 
-  if (a->directfp)
-    {
-      FILE *fp = a->directfp;
+    if (overflow)
+      *overflow = 0;
 
-      if (!fstat (fileno (fp), &st))
-	return st.st_size;
-      log_error ("fstat() failed: %s\n", strerror (errno));
-      return 0;
+    if( a->directfp )  {
+	FILE *fp = a->directfp;
+
+       if( !fstat(fileno(fp), &st) )
+           return st.st_size;
+	log_error("fstat() failed: %s\n", strerror(errno) );
+	return 0;
     }
 
-  /* Hmmm: file_filter may have already been removed */
-  for (; a; a = a->chain)
-    if (!a->chain && a->filter == file_filter)
-      {
-	file_filter_ctx_t *b = a->filter_ov;
-	FILEP_OR_FD fp = b->fp;
+    /* Hmmm: file_filter may have already been removed */
+    for( ; a; a = a->chain )
+	if( !a->chain && a->filter == file_filter ) {
+	    file_filter_ctx_t *b = a->filter_ov;
+	    FILEP_OR_FD fp = b->fp;
 
 #if defined(HAVE_DOSISH_SYSTEM) && !defined(FILE_FILTER_USES_STDIO)
-	ulong size;
+            ulong size;
+            static int (* __stdcall get_file_size_ex) 
+              (void *handle, LARGE_INTEGER *size);
+            static int get_file_size_ex_initialized;
 
-	if ((size = GetFileSize (fp, NULL)) != 0xffffffff)
-	  return size;
-	log_error ("GetFileSize for handle %p failed: ec=%d\n",
-		   fp, (int) GetLastError ());
+            if (!get_file_size_ex_initialized)
+              {
+                void *handle;
+                
+                handle = dlopen ("kernel32.dll", RTLD_LAZY);
+                if (handle)
+                  {
+                    get_file_size_ex = dlsym (handle, "GetFileSizeEx");
+                    if (!get_file_size_ex)
+                    dlclose (handle);
+                  }
+                get_file_size_ex_initialized = 1;
+              }
+
+            if (get_file_size_ex)
+              {
+                /* This is a newer system with GetFileSizeEx; we use
+                   this then becuase it seem that GetFileSize won't
+                   return a proper error in case a file is larger than
+                   4GB. */
+                LARGE_INTEGER size;
+                
+                if (get_file_size_ex (fp, &size))
+                  {
+                    if (!size.u.HighPart)
+                      return size.u.LowPart;
+                    if (overflow)
+                      *overflow = 1;
+                    return 0; 
+                  }
+              }
+            else
+              {
+                if  ((size=GetFileSize (fp, NULL)) != 0xffffffff)
+                  return size;
+              }
+            log_error ("GetFileSize for handle %p failed: %s\n",
+                       fp, w32_strerror (0));
 #else
-	if (!fstat (my_fileno (fp), &st))
-	  return st.st_size;
-	log_error ("fstat() failed: %s\n", strerror (errno));
+            if( !fstat(my_fileno(fp), &st) )
+		return st.st_size;
+	    log_error("fstat() failed: %s\n", strerror(errno) );
 #endif
-	break;
+	    break;
+	}
+
+    return 0;
+}
+
+
+/* Return the file descriptor of the underlying file or -1 if it is
+   not available.  */
+int 
+iobuf_get_fd (iobuf_t a)
+{
+  if (a->directfp)
+    return fileno ( (FILE*)a->directfp );
+
+  for ( ; a; a = a->chain )
+    if (!a->chain && a->filter == file_filter)
+      {
+        file_filter_ctx_t *b = a->filter_ov;
+        FILEP_OR_FD fp = b->fp;
+
+        return my_fileno (fp);
       }
 
-  return 0;
+  return -1;
 }
 
+
+
 /****************
  * Tell the file position, where the next read will take place
  */
@@ -2233,31 +2266,7 @@
   return NULL;
 }
 
-/****************
- * Start the block write mode, see rfc1991.new for details.
- * A value of 0 for N stops this mode (flushes and writes
- * the end marker)
- */
-void
-iobuf_set_block_mode (iobuf_t a, size_t n)
-{
-  block_filter_ctx_t *ctx = xcalloc (1, sizeof *ctx);
 
-  assert (a->use == 1 || a->use == 2);
-  ctx->use = a->use;
-  if (!n)
-    {
-      if (a->use == 1)
-	log_debug ("pop_filter called in set_block_mode - please report\n");
-      pop_filter (a, block_filter, NULL);
-    }
-  else
-    {
-      ctx->size = n;		/* only needed for use 2 */
-      iobuf_push_filter (a, block_filter, ctx);
-    }
-}
-
 /****************
  * enable partial block mode as described in the OpenPGP draft.
  * LEN is the first length byte on read, but ignored on writes.
@@ -2286,19 +2295,7 @@
 }
 
 
-/****************
- * Checks whether the stream is in block mode
- * Note: This does not work if other filters are pushed on the stream.
- */
-int
-iobuf_in_block_mode (iobuf_t a)
-{
-  if (a && a->filter == block_filter)
-    return 1;			/* yes */
-  return 0;			/* no */
-}
 
-
 /****************
  * Same as fgets() but if the buffer is too short a larger one will
  * be allocated up to some limit *max_length.
@@ -2416,3 +2413,54 @@
 #endif
   return fd;
 }
+
+
+void
+iobuf_skip_rest (iobuf_t a, unsigned long n, int partial)
+{
+  if ( partial )
+    {
+      for (;;)
+        {
+          if (a->nofast || a->d.start >= a->d.len) 
+            {
+              if (iobuf_readbyte (a) == -1)
+                {
+                  break;
+                }
+	    } 
+          else
+            {
+              unsigned long count = a->d.len - a->d.start;
+              a->nbytes += count;
+              a->d.start = a->d.len;
+	    }
+	}
+    } 
+  else
+    {
+      unsigned long remaining = n;
+      while (remaining > 0) 
+        {
+          if (a->nofast || a->d.start >= a->d.len)
+            {
+              if (iobuf_readbyte (a) == -1)
+                {
+                  break;
+		}
+              --remaining;
+	    } 
+          else 
+            {
+              unsigned long count = a->d.len - a->d.start;
+              if (count > remaining) 
+                {
+                  count = remaining;
+		}
+              a->nbytes += count;
+              a->d.start += count;
+              remaining -= count;
+	    }
+	}
+    }
+}

Modified: branches/GNUPG-1-9-BRANCH/common/iobuf.h
===================================================================
--- branches/GNUPG-1-9-BRANCH/common/iobuf.h	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/common/iobuf.h	2006-04-21 12:56:40 UTC (rev 4122)
@@ -90,6 +90,7 @@
 EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode;
 
 void iobuf_enable_special_filenames (int yes);
+int  iobuf_is_pipe_filename (const char *fname);
 iobuf_t iobuf_alloc (int use, size_t bufsize);
 iobuf_t iobuf_temp (void);
 iobuf_t iobuf_temp_with_content (const char *buffer, size_t length);
@@ -134,14 +135,13 @@
 size_t iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen);
 void iobuf_unget_and_close_temp (iobuf_t a, iobuf_t temp);
 
-off_t iobuf_get_filelength (iobuf_t a);
+off_t iobuf_get_filelength (iobuf_t a, int *overflow);
 #define IOBUF_FILELENGTH_LIMIT 0xffffffff
+int  iobuf_get_fd (iobuf_t a);
 const char *iobuf_get_real_fname (iobuf_t a);
 const char *iobuf_get_fname (iobuf_t a);
 
-void iobuf_set_block_mode (iobuf_t a, size_t n);
 void iobuf_set_partial_block_mode (iobuf_t a, size_t len);
-int iobuf_in_block_mode (iobuf_t a);
 
 int iobuf_translate_file_handle (int fd, int for_write);
 

Modified: branches/GNUPG-1-9-BRANCH/common/miscellaneous.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/common/miscellaneous.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/common/miscellaneous.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -81,6 +81,7 @@
     iobuf_t a;
     byte buf[4];
     int i, rc = 0;
+    int overflow;
 
     struct magic_compress_s {
         size_t len;
@@ -91,7 +92,7 @@
         { 4, { 0x50, 0x4b, 0x03, 0x04 } }, /* (pk)zip */
     };
     
-    if ( !s || (*s == '-' && !s[1]) || !ret_rc )
+    if ( iobuf_is_pipe_filename (s) || !ret_rc )
         return 0; /* We can't check stdin or no file was given */
 
     a = iobuf_open( s );
@@ -100,7 +101,7 @@
         return 0;
     }
 
-    if ( iobuf_get_filelength( a ) < 4 ) {
+    if ( iobuf_get_filelength( a, &overflow ) < 4 && !overflow) {
         *ret_rc = 0;
         goto leave;
     }

Modified: branches/GNUPG-1-9-BRANCH/g10/exec.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/exec.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/exec.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -473,9 +473,9 @@
     (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
   if((*info)->tochild==NULL)
     {
+      ret = gpg_error_from_errno (errno);
       log_error(_("can't create `%s': %s\n"),
 		(*info)->tempfile_in,strerror(errno));
-      ret=G10ERR_WRITE_FILE;
       goto fail;
     }
 

Modified: branches/GNUPG-1-9-BRANCH/g10/keydb.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/keydb.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/keydb.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -134,9 +134,9 @@
         log_info ("can't allocate lock for `%s'\n", filename );
 
       if (!force) 
-        return G10ERR_OPEN_FILE; 
+        return gpg_error (GPG_ERR_ENOENT); 
       else
-        return G10ERR_GENERAL;
+        return gpg_error (GPG_ERR_GENERAL);
     }
 
   if ( make_dotlock (lockhd, -1) )
@@ -166,9 +166,9 @@
   umask (oldmask);
   if (!iobuf) 
     {
+      rc = gpg_error_from_errno (errno);
       log_error ( _("error creating keyring `%s': %s\n"),
                   filename, strerror(errno));
-      rc = G10ERR_OPEN_FILE;
       goto leave;
     }
 

Modified: branches/GNUPG-1-9-BRANCH/g10/keylist.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/keylist.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/keylist.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -1310,7 +1310,7 @@
 		  case 0:		        sigrc = '!'; break;
 		  case GPG_ERR_BAD_SIGNATURE:   sigrc = '-'; break;
 		  case GPG_ERR_NO_PUBKEY: 
-		  case Gpg_Err_UNUSABLE_PUBKEY: sigrc = '?'; break;
+		  case GPG_ERR_UNUSABLE_PUBKEY: sigrc = '?'; break;
 		  default:		        sigrc = '%'; break;
 		}
 

Modified: branches/GNUPG-1-9-BRANCH/g10/keyserver.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/keyserver.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/keyserver.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -31,13 +31,13 @@
 #endif
 
 #include "gpg.h"
+#include "iobuf.h"
 #include "filter.h"
 #include "keydb.h"
 #include "status.h"
 #include "exec.h"
 #include "main.h"
 #include "i18n.h"
-#include "iobuf.h"
 #include "ttyio.h"
 #include "options.h"
 #include "packet.h"

Modified: branches/GNUPG-1-9-BRANCH/g10/mainproc.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/mainproc.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/mainproc.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -647,7 +647,7 @@
 	else if(n->pkt->pkttype==PKT_SIGNATURE)
 	  {
 	    /* For the SIG+LITERAL case that PGP used to use. */
-	    md_enable( c->mfx.md, n->pkt->pkt.signature->digest_algo );
+	    gcry_md_enable ( c->mfx.md, n->pkt->pkt.signature->digest_algo );
 	    any=1;
 	  }
       }
@@ -2010,7 +2010,7 @@
 		     && is_RSA( sig->pubkey_algo ) ) {
 		/* enable a workaround for a pgp2 bug */
                 if (gcry_md_open (&c->mfx.md2, DIGEST_ALGO_MD5, 0))
-                    BUG ():
+                  BUG ();
 	    }
 	    else if( sig->digest_algo == DIGEST_ALGO_SHA1
 		     && sig->pubkey_algo == PUBKEY_ALGO_DSA

Modified: branches/GNUPG-1-9-BRANCH/g10/options.h
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/options.h	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/options.h	2006-04-21 12:56:40 UTC (rev 4122)
@@ -262,6 +262,7 @@
 #define DBG_CARD_IO_VALUE 2048  /* debug smart card I/O.  */
 
 #define DBG_PACKET (opt.debug & DBG_PACKET_VALUE)
+#define DBG_CIPHER (opt.debug & DBG_CIPHER_VALUE)
 #define DBG_FILTER (opt.debug & DBG_FILTER_VALUE)
 #define DBG_CACHE  (opt.debug & DBG_CACHE_VALUE)
 #define DBG_TRUST  (opt.debug & DBG_TRUST_VALUE)
@@ -304,6 +305,7 @@
 #define EXPORT_RESET_SUBKEY_PASSWD       (1<<3)
 #define EXPORT_MINIMAL                   (1<<4)
 #define EXPORT_CLEAN                     (1<<5)
+#define EXPORT_SEXP_FORMAT               (1<<6)
 
 #define LIST_SHOW_PHOTOS                 (1<<0)
 #define LIST_SHOW_POLICY_URLS            (1<<1)

Modified: branches/GNUPG-1-9-BRANCH/g10/plaintext.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/plaintext.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/plaintext.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -133,13 +133,13 @@
     else if (is_secured_filename (fname))
       {
         errno = EPERM;
+	rc = gpg_error_from_errno (errno);
 	log_error(_("error creating `%s': %s\n"), fname, strerror(errno) );
-	rc = G10ERR_CREATE_FILE;
 	goto leave;
       }
     else if( !(fp = fopen(fname,"wb")) ) {
+	rc = gpg_error_from_errno (errno);
 	log_error(_("error creating `%s': %s\n"), fname, strerror(errno) );
-	rc = G10ERR_CREATE_FILE;
 	goto leave;
     }
 #else /* __riscos__ */
@@ -205,7 +205,7 @@
 		      {
 			log_error ("error writing to `%s': %s\n",
                                    fname,"exceeded --max-output limit\n");
-			rc = gpg_error (GPG_ERR_GENERAL);
+			rc = gpg_error (GPG_ERR_TOO_LARGE);
 			goto leave;
 		      }
 		    else if( putc( c, fp ) == EOF )
@@ -239,17 +239,17 @@
 		  {
 		    if(opt.max_output && (count+=len)>opt.max_output)
 		      {
-			log_error("Error writing to `%s': %s\n",
-				  fname,"exceeded --max-output limit\n");
-			rc = G10ERR_WRITE_FILE;
+			log_error ("error writing to `%s': %s\n",
+                                   fname,"exceeded --max-output limit\n");
+			rc = gpg_error (GPG_ERR_TOO_LARGE);
 			xfree( buffer );
 			goto leave;
 		      }
 		    else if( fwrite( buffer, 1, len, fp ) != len )
 		      {
-			log_error("Error writing to `%s': %s\n",
-				  fname, strerror(errno) );
-			rc = G10ERR_WRITE_FILE;
+                        rc = gpg_error_from_errno (errno);
+			log_error ("error writing to `%s': %s\n",
+                                   fname, strerror(errno) );
 			xfree( buffer );
 			goto leave;
 		      }
@@ -274,14 +274,17 @@
 		      {
 			log_error("Error writing to `%s': %s\n",
 				  fname,"exceeded --max-output limit\n");
-			rc = G10ERR_WRITE_FILE;
+			rc = gpg_error (GPG_ERR_TOO_LARGE);
 			goto leave;
 		      }
 		    else if( putc( c, fp ) == EOF )
 		      {
+                        if ( ferror (fp ) )
+                          rc = gpg_error_from_errno (errno);
+                        else
+                          rc = gpg_error (GPG_ERR_EOF);
 			log_error("Error writing to `%s': %s\n",
 				  fname, strerror(errno) );
-			rc = G10ERR_WRITE_FILE;
 			goto leave;
 		      }
 		  }
@@ -310,7 +313,7 @@
 		      {
 			log_error("Error writing to `%s': %s\n",
 				  fname,"exceeded --max-output limit\n");
-			rc = G10ERR_WRITE_FILE;
+			rc = gpg_error (GPG_ERR_TOO_LARGE);
 			xfree( buffer );
 			goto leave;
 		      }
@@ -337,7 +340,7 @@
 		  {
 		    log_error("Error writing to `%s': %s\n",
 			      fname,"exceeded --max-output limit\n");
-		    rc = G10ERR_WRITE_FILE;
+                    rc = gpg_error (GPG_ERR_TOO_LARGE);
 		    goto leave;
 		  }
 		else if( putc( c, fp ) == EOF )
@@ -351,8 +354,8 @@
 	    if( !mfx->md )
 		continue;
 	    if( state == 2 ) {
-		md_putc(mfx->md, '\r' );
-		md_putc(mfx->md, '\n' );
+		gcry_md_putc (mfx->md, '\r' );
+		gcry_md_putc (mfx->md, '\n' );
 		state = 0;
 	    }
 	    if( !state ) {
@@ -361,18 +364,18 @@
 		else if( c == '\n'  )
 		    state = 2;
 		else
-		    md_putc(mfx->md, c );
+		    gcry_md_putc(mfx->md, c );
 	    }
 	    else if( state == 1 ) {
 		if( c == '\n'  )
 		    state = 2;
 		else {
-		    md_putc(mfx->md, '\r' );
+		    gcry_md_putc(mfx->md, '\r' );
 		    if( c == '\r'  )
 			state = 1;
 		    else {
 			state = 0;
-			md_putc(mfx->md, c );
+			gcry_md_putc(mfx->md, c );
 		    }
 		}
 	    }

Modified: branches/GNUPG-1-9-BRANCH/g10/seckey-cert.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/seckey-cert.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/seckey-cert.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -294,7 +294,8 @@
             log_info (_("%s ...\n"), _(tryagain));
         }
 	rc = do_check( sk, tryagain, mode, &canceled );
-	if ( gpg_err_code (rc) == G10ERR_BAD_PASS && is_status_enabled () ) {
+	if ( gpg_err_code (rc) == GPG_ERR_BAD_PASSPHRASE
+             && is_status_enabled () ) {
 	    u32 kid[2];
 	    char buf[50];
 

Modified: branches/GNUPG-1-9-BRANCH/g10/sign.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/g10/sign.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/g10/sign.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -656,7 +656,8 @@
 	  sig->expiredate = sig->timestamp+duration;
 	sig->sig_class = sigclass;
 
-	md = gcry_md_copy (hash);
+	if (gcry_md_copy (&md, hash))
+          BUG ();
 
 	if (sig->version >= 4)
 	    build_sig_subpkt_from_sig (sig);
@@ -938,9 +939,9 @@
                   }
 		if( !inp )
 		  {
+                    rc = gpg_error_from_errno (errno);
 		    log_error(_("can't open `%s': %s\n"),
 			      sl->d,strerror(errno));
-		    rc = G10ERR_OPEN_FILE;
 		    goto leave;
 		  }
                 handle_progress (&pfx, inp, sl->d);

Modified: branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog
===================================================================
--- branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog	2006-04-21 12:56:40 UTC (rev 4122)
@@ -1,3 +1,8 @@
+2006-04-20  Werner Koch  <wk at g10code.com>
+
+	* stringhelp.c (make_basename): New arg INPUTPATH for future
+	riscos compatibility.
+
 2006-04-18  Werner Koch  <wk at g10code.com>
 
 	* libjnlib-config.h (JNLIB_NEED_UTF8CONF): Defined.

Modified: branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c
===================================================================
--- branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c	2006-04-21 12:56:40 UTC (rev 4122)
@@ -234,15 +234,19 @@
  *
  */
 char *
-make_basename(const char *filepath)
+make_basename(const char *filepath, const char *inputpath)
 {
     char *p;
 
+#ifdef __riscos__
+    return riscos_make_basename(filepath, inputpath);
+#endif
+
     if ( !(p=strrchr(filepath, '/')) )
-      #ifdef HAVE_DRIVE_LETTERS
+#ifdef HAVE_DRIVE_LETTERS
 	if ( !(p=strrchr(filepath, '\\')) )
 	    if ( !(p=strrchr(filepath, ':')) )
-      #endif
+#endif
 	      {
 		return jnlib_xstrdup(filepath);
 	      }

Modified: branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h
===================================================================
--- branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h	2006-04-20 22:05:42 UTC (rev 4121)
+++ branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h	2006-04-21 12:56:40 UTC (rev 4122)
@@ -35,7 +35,7 @@
 size_t length_sans_trailing_ws (const unsigned char *line, size_t len);
 
 
-char *make_basename(const char *filepath);
+char *make_basename(const char *filepath, const char *inputpath);
 char *make_dirname(const char *filepath);
 char *make_filename( const char *first_part, ... );
 int compare_filenames( const char *a, const char *b );




More information about the Gnupg-commits mailing list