2003-01-29 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Wed, 29 Jan 2003 19:50:43 +0000 (19:50 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Wed, 29 Jan 2003 19:50:43 +0000 (19:50 +0000)
* configure.ac: Remove all uses of GNUPG_CHECK_TYPEDEF, for byte,
ushort, ulong, u16 and u32.
* acinclude.m4 (GNUPG_CHECK_TYPEDEF): Remove macro.

gpgme/
2003-01-29  Marcus Brinkmann  <marcus@g10code.de>

* types.h: Remove byte and ulong types.
* util.h (_gpgme_hextobyte): Change prototype to unsigned char
instead byte.
* conversion.c (_gpgme_hextobyte): Change argument to unsigned
char instead byte.
(_gpgme_decode_c_string): Likewise, and beautify.  Also support a
few more escaped characters.  Be more strict about buffer size.
(_gpgme_data_append_percentstring_for_xml): Change type of SRC,
BUF and DST to unsigned char instead byte.
* progress.c (_gpgme_progress_status_handler): Use unsigned char
instead byte.
* debug.c (trim_spaces): Likewise.

ChangeLog
acinclude.m4
configure.ac
gpgme/ChangeLog
gpgme/conversion.c
gpgme/debug.c
gpgme/progress.c
gpgme/types.h
gpgme/util.h

index cf0a230..4a46d07 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
+
+       * configure.ac: Remove all uses of GNUPG_CHECK_TYPEDEF, for byte,
+       ushort, ulong, u16 and u32.
+       * acinclude.m4 (GNUPG_CHECK_TYPEDEF): Remove macro.
+
 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
 
        * configure.ac: New conditional HAVE_LD_VERSION_SCRIPT.
index 6a06343..abdee4d 100644 (file)
@@ -26,24 +26,6 @@ AC_DEFUN(GNUPG_FIX_HDR_VERSION,
   ])
 
 
-dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
-dnl Check whether a typedef exists and create a #define $2 if it exists
-dnl
-AC_DEFUN(GNUPG_CHECK_TYPEDEF,
-  [ AC_MSG_CHECKING(for $1 typedef)
-    AC_CACHE_VAL(gnupg_cv_typedef_$1,
-    [AC_TRY_COMPILE([#include <stdlib.h>
-    #include <sys/types.h>], [
-    #undef $1
-    int a = sizeof($1);
-    ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
-    AC_MSG_RESULT($gnupg_cv_typedef_$1)
-    if test "$gnupg_cv_typedef_$1" = yes; then
-        AC_DEFINE($2, ,
-        [Define to 1 if $1 is defined in the <sys/types.h> header file.])
-    fi
-  ])
-
 dnl ##
 dnl ##  GNU Pth - The GNU Portable Threads
 dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
index fec653d..fa9c3eb 100644 (file)
@@ -145,16 +145,9 @@ dnl Checks for header files.
 dnl
 AC_CHECK_HEADERS(sys/select.h)
 
-
-
 dnl
-dnl Checks for typedefs and structures.
+dnl Type checks.
 dnl
-GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
-GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
-GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
-GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
-GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
 
 AC_CHECK_SIZEOF(unsigned int)
 
index fc31bc4..fef9872 100644 (file)
@@ -1,5 +1,18 @@
 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
 
+       * types.h: Remove byte and ulong types.
+       * util.h (_gpgme_hextobyte): Change prototype to unsigned char
+       instead byte.
+       * conversion.c (_gpgme_hextobyte): Change argument to unsigned
+       char instead byte.
+       (_gpgme_decode_c_string): Likewise, and beautify.  Also support a
+       few more escaped characters.  Be more strict about buffer size.
+       (_gpgme_data_append_percentstring_for_xml): Change type of SRC,
+       BUF and DST to unsigned char instead byte.
+       * progress.c (_gpgme_progress_status_handler): Use unsigned char
+       instead byte.
+       * debug.c (trim_spaces): Likewise.
+
        * util.h (mk_error): Remove macro.
        * conversion.c, data.c, data-compat.c, decrypt.c, delete.c,
        edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c,
index 143c8db..5b2cb67 100644 (file)
@@ -1,6 +1,6 @@
 /* conversion.c - String conversion helper functions.
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
  
    This file is part of GPGME.
 
 #include "gpgme.h"
 #include "util.h"
 
-
+\f
+/* Convert two hexadecimal digits from STR to the value they
+   represent.  Returns -1 if one of the characters is not a
+   hexadecimal digit.  */
 int
-_gpgme_hextobyte (const byte *str)
+_gpgme_hextobyte (const unsigned char *str)
 {
   int val = 0;
   int i;
@@ -68,12 +71,18 @@ _gpgme_decode_c_string (const char *src, char **destp, int len)
 {
   char *dest;
 
+  /* Set up the destination buffer.  */
   if (len)
-    dest = *destp;
+    {
+      if (len < strlen (src) + 1)
+       return GPGME_General_Error;
+
+      dest = *destp;
+    }
   else
     {
-      /* We can malloc a buffer of the same length, because the converted
-        string will never be larger.  */
+      /* The converted string will never be larger than the original
+        string.  */
       dest = malloc (strlen (src) + 1);
       if (!dest)
        return GPGME_Out_Of_Core;
@@ -81,71 +90,70 @@ _gpgme_decode_c_string (const char *src, char **destp, int len)
       *destp = dest;
     }
 
+  /* Convert the string.  */
   while (*src)
     {
       if (*src != '\\')
-       *(dest++) = *(src++);
-      else if (src[1] == '\\')
-       {
-         src++;
-         *(dest++) = *(src++); 
-        }
-      else if (src[1] == 'n')
-       {
-         src += 2;
-         *(dest++) = '\n'; 
-        }
-      else if (src[1] == 'r')
-       {
-         src += 2;
-         *(dest++) = '\r'; 
-        }
-      else if (src[1] == 'v')
-       {
-         src += 2;
-         *(dest++) = '\v'; 
-        }
-      else if (src[1] == 'b')
        {
-         src += 2;
-         *(dest++) = '\b'; 
-        }
-      else if (src[1] == '0')
-       {
-         /* Hmmm: no way to express this */
-         src += 2;
-         *(dest++) = '\\';
-         *(dest++) = '\0'; 
-        }
-      else if (src[1] == 'x' && isxdigit (src[2]) && isxdigit (src[3]))
-       {
-         int val = _gpgme_hextobyte (&src[2]);
-         if (val == -1)
-           {
-             /* Should not happen.  */
-             *(dest++) = *(src++);
-             *(dest++) = *(src++);
-             *(dest++) = *(src++);
-             *(dest++) = *(src++);
-           }
-         else
-           {
-             if (!val)
-               {
-                 *(dest++) = '\\';
-                 *(dest++) = '\0'; 
-               }
-             else 
-               *(byte*)dest++ = val;
-             src += 4;
-           }
-        }
-      else
-       {
-         /* should not happen */
-         src++;
-         *(dest++) = '\\'; 
          *(dest++) = *(src++);
+         continue;
+       }
+
+      switch (src[1])
+       {
+#define DECODE_ONE(match,result)       \
+       case match:                     \
+         src += 2;                     \
+         *(dest++) = result;           \
+         break;
+
+         DECODE_ONE ('\'', '\'');
+         DECODE_ONE ('\"', '\"');
+         DECODE_ONE ('\?', '\?');
+         DECODE_ONE ('\\', '\\');
+         DECODE_ONE ('a', '\a');
+         DECODE_ONE ('b', '\b');
+         DECODE_ONE ('f', '\f');
+         DECODE_ONE ('n', '\n');
+         DECODE_ONE ('r', '\r');
+         DECODE_ONE ('t', '\t');
+         DECODE_ONE ('v', '\v');
+
+       case 'x':
+         {
+           int val = _gpgme_hextobyte (&src[2]);
+
+           if (val == -1)
+             {
+               /* Should not happen.  */
+               *(dest++) = *(src++);
+               *(dest++) = *(src++);
+               if (*src)
+                 *(dest++) = *(src++);
+               if (*src)
+                 *(dest++) = *(src++);
+             }
+           else
+             {
+               if (!val)
+                 {
+                   /* A binary zero is not representable in a C
+                      string.  */
+                   *(dest++) = '\\';
+                   *(dest++) = '0'; 
+                 }
+               else 
+                 *((unsigned char *) dest++) = val;
+               src += 4;
+             }
+         }
+
+       default:
+         {
+           /* Should not happen.  */
+           *(dest++) = *(src++);
+           *(dest++) = *(src++);
+         }
         } 
     }
   *(dest++) = 0;
@@ -244,8 +252,8 @@ _gpgme_data_append_string_for_xml (GpgmeData dh, const char *str)
 GpgmeError
 _gpgme_data_append_percentstring_for_xml (GpgmeData dh, const char *str)
 {
-  const byte *src;
-  byte *buf, *dst;
+  const unsigned char *src;
+  unsigned char *buf, *dst;
   int val;
   GpgmeError err;
 
index 8cb7030..8fe32e6 100644 (file)
@@ -1,24 +1,26 @@
 /* debug.c - helpful output in desperate situations
- *      Copyright (C) 2001, 2002 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
+   Copyright (C) 2000 Werner Koch (dd9jn)
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
+   This file is part of GPGME.
+
+   GPGME 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.
+   GPGME 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 GPGME; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#if HAVE_CONFIG_H
 #include <config.h>
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -56,11 +58,11 @@ trim_spaces (char *str)
 
   string = str;
   /* Find first non space character.  */
-  for (p = string; *p && isspace (*(byte *) p); p++)
+  for (p = string; *p && isspace (*(unsigned char *) p); p++)
     ;
   /* Move characters.  */
   for (mark = NULL; (*string = *p); string++, p++)
-    if (isspace (*(byte *) p))
+    if (isspace (*(unsigned char *) p))
       {
        if (!mark)
          mark = string;
index f5daca5..a939fcd 100644 (file)
@@ -1,6 +1,6 @@
 /* progress.c -  status handler for progress status
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
  
    This file is part of GPGME.
  
@@ -50,7 +50,7 @@ _gpgme_progress_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
       *p++ = 0;
       if (*p)
        {
-         type = *(byte *)p;
+         type = *(unsigned char *)p;
          p = strchr (p+1, ' ');
          if (p)
            {
index 90feecf..30ed724 100644 (file)
@@ -1,6 +1,6 @@
-/* types.h -  Some type definitions
+/* types.h - Type definitions.
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
  
    This file is part of GPGME.
  
 #ifndef TYPES_H
 #define TYPES_H
 
-#include "gpgme.h"  /* external objects and prototypes */
+#include "gpgme.h"
 
-#ifndef HAVE_BYTE_TYPEDEF
-typedef unsigned char byte;
-#endif
-#ifndef HAVE_ULONG_TYPEDEF
-typedef unsigned long ulong;
-#endif
-
-
-/*
- * Declaration of internal objects
- */
+/* Declaration of internal objects.  */
 
 typedef GpgmeError (*GpgmeStatusHandler) (GpgmeCtx, GpgmeStatusCode code,
                                          char *args);
@@ -94,5 +84,4 @@ typedef struct keylist_result_s *KeylistResult;
 struct edit_result_s;
 typedef struct edit_result_s *EditResult;
 
-
 #endif /* TYPES_H */
index 8bc6253..c862235 100644 (file)
@@ -82,6 +82,11 @@ FILE *fopencookie (void *cookie, const char *opentype,
 
 
 /*-- conversion.c --*/
+/* Convert two hexadecimal digits from STR to the value they
+   represent.  Returns -1 if one of the characters is not a
+   hexadecimal digit.  */
+int _gpgme_hextobyte (const unsigned char *str);
+
 /* Decode the C formatted string SRC and store the result in the
    buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
    large enough buffer is allocated with malloc and *DESTP is set to
@@ -89,6 +94,6 @@ FILE *fopencookie (void *cookie, const char *opentype,
    is desired or not, the caller is expected to make sure that *DESTP
    is large enough if LEN is not zero.  */
 GpgmeError _gpgme_decode_c_string (const char *src, char **destp, int len);
-int _gpgme_hextobyte (const byte *str);
+
 
 #endif /* UTIL_H */