mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Made base64 DATA and DEST pointers void*.
This commit is contained in:
parent
7bc4d2db21
commit
56897eceb5
@ -1,3 +1,10 @@
|
|||||||
|
2006-06-20 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
|
* utils.c (base64_encode): Made the DATA pointer void * so the
|
||||||
|
callers can pass it any kind of pointer (including both signed and
|
||||||
|
unsigned char pointers).
|
||||||
|
(base64_decode): Ditto for DEST.
|
||||||
|
|
||||||
2006-06-19 Hrvoje Niksic <hniksic@xemacs.org>
|
2006-06-19 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
* utils.c (base64_encode): Would read past end of STR.
|
* utils.c (base64_encode): Would read past end of STR.
|
||||||
|
35
src/utils.c
35
src/utils.c
@ -1889,20 +1889,20 @@ xsleep (double seconds)
|
|||||||
|
|
||||||
#endif /* not WINDOWS */
|
#endif /* not WINDOWS */
|
||||||
|
|
||||||
/* Encode the string STR of length LENGTH to base64 format and place it
|
/* Encode the octets in DATA of length LENGTH to base64 format,
|
||||||
to B64STORE. The output will be \0-terminated, and must point to a
|
storing the result to DEST. The output will be zero-terminated,
|
||||||
writable buffer of at least 1+BASE64_LENGTH(length) bytes. It
|
and must point to a writable buffer of at least
|
||||||
returns the length of the resulting base64 data, not counting the
|
1+BASE64_LENGTH(length) bytes. The function returns the length of
|
||||||
terminating zero.
|
the resulting base64 data, not counting the terminating zero.
|
||||||
|
|
||||||
This implementation will not emit newlines after 76 characters of
|
This implementation does not emit newlines after 76 characters of
|
||||||
base64 data. */
|
base64 data. */
|
||||||
|
|
||||||
int
|
int
|
||||||
base64_encode (const char *str, int length, char *b64store)
|
base64_encode (const void *data, int length, char *dest)
|
||||||
{
|
{
|
||||||
/* Conversion table. */
|
/* Conversion table. */
|
||||||
static char tbl[64] = {
|
static const char tbl[64] = {
|
||||||
'A','B','C','D','E','F','G','H',
|
'A','B','C','D','E','F','G','H',
|
||||||
'I','J','K','L','M','N','O','P',
|
'I','J','K','L','M','N','O','P',
|
||||||
'Q','R','S','T','U','V','W','X',
|
'Q','R','S','T','U','V','W','X',
|
||||||
@ -1912,9 +1912,10 @@ base64_encode (const char *str, int length, char *b64store)
|
|||||||
'w','x','y','z','0','1','2','3',
|
'w','x','y','z','0','1','2','3',
|
||||||
'4','5','6','7','8','9','+','/'
|
'4','5','6','7','8','9','+','/'
|
||||||
};
|
};
|
||||||
const unsigned char *s = (const unsigned char *) str;
|
const unsigned char *s = data;
|
||||||
const unsigned char *end = (const unsigned char *) str + length - 2;
|
/* Theoretical ANSI violation when length < 3. */
|
||||||
char *p = b64store;
|
const unsigned char *end = data + length - 2;
|
||||||
|
char *p = dest;
|
||||||
|
|
||||||
/* Transform the 3x8 bits to 4x6 bits, as required by base64. */
|
/* Transform the 3x8 bits to 4x6 bits, as required by base64. */
|
||||||
for (; s < end; s += 3)
|
for (; s < end; s += 3)
|
||||||
@ -1944,7 +1945,7 @@ base64_encode (const char *str, int length, char *b64store)
|
|||||||
/* ...and zero-terminate it. */
|
/* ...and zero-terminate it. */
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
return p - b64store;
|
return p - dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Store in C the next non-whitespace character from the string, or \0
|
/* Store in C the next non-whitespace character from the string, or \0
|
||||||
@ -1956,16 +1957,16 @@ base64_encode (const char *str, int length, char *b64store)
|
|||||||
#define IS_ASCII(c) (((c) & 0x80) == 0)
|
#define IS_ASCII(c) (((c) & 0x80) == 0)
|
||||||
|
|
||||||
/* Decode data from BASE64 (pointer to \0-terminated text) into memory
|
/* Decode data from BASE64 (pointer to \0-terminated text) into memory
|
||||||
pointed to by TO. TO should be large enough to accomodate the
|
pointed to by DEST. DEST should be large enough to accomodate the
|
||||||
decoded data, which is guaranteed to be less than strlen(base64).
|
decoded data, which is guaranteed to be less than strlen(base64).
|
||||||
|
|
||||||
Since TO is assumed to contain binary data, it is not
|
Since DEST is assumed to contain binary data, it is not
|
||||||
NUL-terminated. The function returns the length of the data
|
NUL-terminated. The function returns the length of the data
|
||||||
written to TO. -1 is returned in case of error caused by malformed
|
written to TO. -1 is returned in case of error caused by malformed
|
||||||
base64 input. */
|
base64 input. */
|
||||||
|
|
||||||
int
|
int
|
||||||
base64_decode (const char *base64, char *to)
|
base64_decode (const char *base64, void *dest)
|
||||||
{
|
{
|
||||||
/* Table of base64 values for first 128 characters. Note that this
|
/* Table of base64 values for first 128 characters. Note that this
|
||||||
assumes ASCII (but so does Wget in other places). */
|
assumes ASCII (but so does Wget in other places). */
|
||||||
@ -1989,7 +1990,7 @@ base64_decode (const char *base64, char *to)
|
|||||||
#define IS_BASE64(c) ((IS_ASCII (c) && BASE64_CHAR_TO_VALUE (c) >= 0) || c == '=')
|
#define IS_BASE64(c) ((IS_ASCII (c) && BASE64_CHAR_TO_VALUE (c) >= 0) || c == '=')
|
||||||
|
|
||||||
const char *p = base64;
|
const char *p = base64;
|
||||||
char *q = to;
|
char *q = dest;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@ -2048,7 +2049,7 @@ base64_decode (const char *base64, char *to)
|
|||||||
#undef IS_BASE64
|
#undef IS_BASE64
|
||||||
#undef BASE64_CHAR_TO_VALUE
|
#undef BASE64_CHAR_TO_VALUE
|
||||||
|
|
||||||
return q - to;
|
return q - (char *) dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef IS_ASCII
|
#undef IS_ASCII
|
||||||
|
@ -118,8 +118,8 @@ void xsleep (double);
|
|||||||
/* How many bytes it will take to store LEN bytes in base64. */
|
/* How many bytes it will take to store LEN bytes in base64. */
|
||||||
#define BASE64_LENGTH(len) (4 * (((len) + 2) / 3))
|
#define BASE64_LENGTH(len) (4 * (((len) + 2) / 3))
|
||||||
|
|
||||||
int base64_encode (const char *, int, char *);
|
int base64_encode (const void *, int, char *);
|
||||||
int base64_decode (const char *, char *);
|
int base64_decode (const char *, void *);
|
||||||
|
|
||||||
void stable_sort (void *, size_t, size_t, int (*) (const void *, const void *));
|
void stable_sort (void *, size_t, size_t, int (*) (const void *, const void *));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user