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.

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.
This commit is contained in:
Marcus Brinkmann 2003-01-29 19:50:43 +00:00
parent 6912c46a77
commit 13e4d78a82
9 changed files with 130 additions and 132 deletions

View File

@ -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> 2002-12-24 Marcus Brinkmann <marcus@g10code.de>
* configure.ac: New conditional HAVE_LD_VERSION_SCRIPT. * configure.ac: New conditional HAVE_LD_VERSION_SCRIPT.

View 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 ##
dnl ## GNU Pth - The GNU Portable Threads dnl ## GNU Pth - The GNU Portable Threads
dnl ## Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com> dnl ## Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>

View File

@ -145,16 +145,9 @@ dnl Checks for header files.
dnl dnl
AC_CHECK_HEADERS(sys/select.h) AC_CHECK_HEADERS(sys/select.h)
dnl dnl
dnl Checks for typedefs and structures. dnl Type checks.
dnl 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) AC_CHECK_SIZEOF(unsigned int)

View File

@ -1,5 +1,18 @@
2003-01-29 Marcus Brinkmann <marcus@g10code.de> 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. * util.h (mk_error): Remove macro.
* conversion.c, data.c, data-compat.c, decrypt.c, delete.c, * conversion.c, data.c, data-compat.c, decrypt.c, delete.c,
edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c, edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c,

View File

@ -1,6 +1,6 @@
/* conversion.c - String conversion helper functions. /* conversion.c - String conversion helper functions.
Copyright (C) 2000 Werner Koch (dd9jn) 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. This file is part of GPGME.
@ -31,9 +31,12 @@
#include "gpgme.h" #include "gpgme.h"
#include "util.h" #include "util.h"
/* Convert two hexadecimal digits from STR to the value they
represent. Returns -1 if one of the characters is not a
hexadecimal digit. */
int int
_gpgme_hextobyte (const byte *str) _gpgme_hextobyte (const unsigned char *str)
{ {
int val = 0; int val = 0;
int i; int i;
@ -68,12 +71,18 @@ _gpgme_decode_c_string (const char *src, char **destp, int len)
{ {
char *dest; char *dest;
/* Set up the destination buffer. */
if (len) if (len)
dest = *destp; {
if (len < strlen (src) + 1)
return GPGME_General_Error;
dest = *destp;
}
else else
{ {
/* We can malloc a buffer of the same length, because the converted /* The converted string will never be larger than the original
string will never be larger. */ string. */
dest = malloc (strlen (src) + 1); dest = malloc (strlen (src) + 1);
if (!dest) if (!dest)
return GPGME_Out_Of_Core; return GPGME_Out_Of_Core;
@ -81,71 +90,70 @@ _gpgme_decode_c_string (const char *src, char **destp, int len)
*destp = dest; *destp = dest;
} }
/* Convert the string. */
while (*src) while (*src)
{ {
if (*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++); *(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; *(dest++) = 0;
@ -244,8 +252,8 @@ _gpgme_data_append_string_for_xml (GpgmeData dh, const char *str)
GpgmeError GpgmeError
_gpgme_data_append_percentstring_for_xml (GpgmeData dh, const char *str) _gpgme_data_append_percentstring_for_xml (GpgmeData dh, const char *str)
{ {
const byte *src; const unsigned char *src;
byte *buf, *dst; unsigned char *buf, *dst;
int val; int val;
GpgmeError err; GpgmeError err;

View File

@ -1,24 +1,26 @@
/* debug.c - helpful output in desperate situations /* debug.c - helpful output in desperate situations
* Copyright (C) 2001, 2002 g10 Code GmbH Copyright (C) 2000 Werner Koch (dd9jn)
* Copyright (C) 2001, 2002, 2003 g10 Code GmbH
* This file is part of GPGME.
* 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
*/
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> #include <config.h>
#endif
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -56,11 +58,11 @@ trim_spaces (char *str)
string = str; string = str;
/* Find first non space character. */ /* Find first non space character. */
for (p = string; *p && isspace (*(byte *) p); p++) for (p = string; *p && isspace (*(unsigned char *) p); p++)
; ;
/* Move characters. */ /* Move characters. */
for (mark = NULL; (*string = *p); string++, p++) for (mark = NULL; (*string = *p); string++, p++)
if (isspace (*(byte *) p)) if (isspace (*(unsigned char *) p))
{ {
if (!mark) if (!mark)
mark = string; mark = string;

View File

@ -1,6 +1,6 @@
/* progress.c - status handler for progress status /* progress.c - status handler for progress status
Copyright (C) 2000 Werner Koch (dd9jn) 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. This file is part of GPGME.
@ -50,7 +50,7 @@ _gpgme_progress_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
*p++ = 0; *p++ = 0;
if (*p) if (*p)
{ {
type = *(byte *)p; type = *(unsigned char *)p;
p = strchr (p+1, ' '); p = strchr (p+1, ' ');
if (p) if (p)
{ {

View File

@ -1,6 +1,6 @@
/* types.h - Some type definitions /* types.h - Type definitions.
Copyright (C) 2000 Werner Koch (dd9jn) 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. This file is part of GPGME.
@ -21,19 +21,9 @@
#ifndef TYPES_H #ifndef TYPES_H
#define TYPES_H #define TYPES_H
#include "gpgme.h" /* external objects and prototypes */ #include "gpgme.h"
#ifndef HAVE_BYTE_TYPEDEF /* Declaration of internal objects. */
typedef unsigned char byte;
#endif
#ifndef HAVE_ULONG_TYPEDEF
typedef unsigned long ulong;
#endif
/*
* Declaration of internal objects
*/
typedef GpgmeError (*GpgmeStatusHandler) (GpgmeCtx, GpgmeStatusCode code, typedef GpgmeError (*GpgmeStatusHandler) (GpgmeCtx, GpgmeStatusCode code,
char *args); char *args);
@ -94,5 +84,4 @@ typedef struct keylist_result_s *KeylistResult;
struct edit_result_s; struct edit_result_s;
typedef struct edit_result_s *EditResult; typedef struct edit_result_s *EditResult;
#endif /* TYPES_H */ #endif /* TYPES_H */

View File

@ -82,6 +82,11 @@ FILE *fopencookie (void *cookie, const char *opentype,
/*-- conversion.c --*/ /*-- 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 /* 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 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 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 desired or not, the caller is expected to make sure that *DESTP
is large enough if LEN is not zero. */ is large enough if LEN is not zero. */
GpgmeError _gpgme_decode_c_string (const char *src, char **destp, int len); GpgmeError _gpgme_decode_c_string (const char *src, char **destp, int len);
int _gpgme_hextobyte (const byte *str);
#endif /* UTIL_H */ #endif /* UTIL_H */