bug 236425: fix IDN support on 64bit platforms (r=darin, sr=bz, a=chofmann)

This commit is contained in:
jshin%mailaps.org 2005-06-03 02:21:47 +00:00
Родитель b54132568a
Коммит e2d009106c
5 изменённых файлов: 57 добавлений и 53 удалений

Просмотреть файл

@ -64,9 +64,9 @@
#include "nameprep_template.c"
#undef VERSION
typedef const char *(*nameprep_mapproc)(unsigned long v);
typedef int (*nameprep_checkproc)(unsigned long v);
typedef idn_biditype_t (*nameprep_biditypeproc)(unsigned long v);
typedef const char *(*nameprep_mapproc)(PRUint32 v);
typedef int (*nameprep_checkproc)(PRUint32 v);
typedef idn_biditype_t (*nameprep_biditypeproc)(PRUint32 v);
static struct idn_nameprep {
char *version;
@ -86,8 +86,8 @@ static struct idn_nameprep {
};
static idn_result_t idn_nameprep_check(nameprep_checkproc proc,
const unsigned long *str,
const unsigned long **found);
const PRUint32 *str,
const PRUint32 **found);
idn_result_t
idn_nameprep_create(const char *version, idn_nameprep_t *handlep) {
@ -125,15 +125,15 @@ idn_nameprep_destroy(idn_nameprep_t handle) {
}
idn_result_t
idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
unsigned long *to, size_t tolen) {
idn_nameprep_map(idn_nameprep_t handle, const PRUint32 *from,
PRUint32 *to, size_t tolen) {
assert(handle != NULL && from != NULL && to != NULL);
TRACE(("idn_nameprep_map(ctx=%s, from=\"%s\")\n",
handle->version, idn__debug_ucs4xstring(from, 50)));
while (*from != '\0') {
unsigned long v = *from;
PRUint32 v = *from;
const char *mapped;
if (v > UCS_MAX) {
@ -189,8 +189,8 @@ idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
}
idn_result_t
idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found) {
idn_nameprep_isprohibited(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found) {
assert(handle != NULL && str != NULL && found != NULL);
TRACE(("idn_nameprep_isprohibited(ctx=%s, str=\"%s\")\n",
@ -200,8 +200,8 @@ idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
}
idn_result_t
idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found) {
idn_nameprep_isunassigned(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found) {
assert(handle != NULL && str != NULL && found != NULL);
TRACE(("idn_nameprep_isunassigned(handle->version, str=\"%s\")\n",
@ -211,9 +211,9 @@ idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
}
static idn_result_t
idn_nameprep_check(nameprep_checkproc proc, const unsigned long *str,
const unsigned long **found) {
unsigned long v;
idn_nameprep_check(nameprep_checkproc proc, const PRUint32 *str,
const PRUint32 **found) {
PRUint32 v;
while (*str != '\0') {
v = *str;
@ -236,9 +236,9 @@ idn_nameprep_check(nameprep_checkproc proc, const unsigned long *str,
}
idn_result_t
idn_nameprep_isvalidbidi(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found) {
unsigned long v;
idn_nameprep_isvalidbidi(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found) {
PRUint32 v;
idn_biditype_t first_char;
idn_biditype_t last_char;
int found_r_al;
@ -323,25 +323,25 @@ idn_nameprep_destroyproc(void *handle) {
}
idn_result_t
idn_nameprep_mapproc(void *handle, const unsigned long *from,
unsigned long *to, size_t tolen) {
idn_nameprep_mapproc(void *handle, const PRUint32 *from,
PRUint32 *to, size_t tolen) {
return idn_nameprep_map((idn_nameprep_t)handle, from, to, tolen);
}
idn_result_t
idn_nameprep_prohibitproc(void *handle, const unsigned long *str,
const unsigned long **found) {
idn_nameprep_prohibitproc(void *handle, const PRUint32 *str,
const PRUint32 **found) {
return idn_nameprep_isprohibited((idn_nameprep_t)handle, str, found);
}
idn_result_t
idn_nameprep_unassignedproc(void *handle, const unsigned long *str,
const unsigned long **found) {
idn_nameprep_unassignedproc(void *handle, const PRUint32 *str,
const PRUint32 **found) {
return idn_nameprep_isunassigned((idn_nameprep_t)handle, str, found);
}
idn_result_t
idn_nameprep_bidiproc(void *handle, const unsigned long *str,
const unsigned long **found) {
idn_nameprep_bidiproc(void *handle, const PRUint32 *str,
const PRUint32 **found) {
return idn_nameprep_isvalidbidi((idn_nameprep_t)handle, str, found);
}

Просмотреть файл

@ -48,6 +48,8 @@
#ifndef NAMEPREP_TEMPLATE_INIT
#define NAMEPREP_TEMPLATE_INIT
#include "prtypes.h"
/* Symbol composition. */
#define compose_sym2(a, b) compose_sym2X(a, b)
#define compose_sym2X(a, b) a ## b
@ -73,7 +75,7 @@
#endif /* NAMEPREP_TEMPLATE_INIT */
static const char *
compose_sym2(nameprep_map_, VERSION) (unsigned long v) {
compose_sym2(nameprep_map_, VERSION) (PRUint32 v) {
int idx0 = IDX0(MAP, v);
int idx1 = IDX1(MAP, v);
int idx2 = IDX2(MAP, v);
@ -92,7 +94,7 @@ compose_sym2(nameprep_map_, VERSION) (unsigned long v) {
}
static int
compose_sym2(nameprep_prohibited_, VERSION) (unsigned long v) {
compose_sym2(nameprep_prohibited_, VERSION) (PRUint32 v) {
int idx0 = IDX0(PROH, v);
int idx1 = IDX1(PROH, v);
int idx2 = IDX2(PROH, v);
@ -107,7 +109,7 @@ compose_sym2(nameprep_prohibited_, VERSION) (unsigned long v) {
}
static int
compose_sym2(nameprep_unassigned_, VERSION) (unsigned long v) {
compose_sym2(nameprep_unassigned_, VERSION) (PRUint32 v) {
int idx0 = IDX0(UNAS, v);
int idx1 = IDX1(UNAS, v);
int idx2 = IDX2(UNAS, v);
@ -122,7 +124,7 @@ compose_sym2(nameprep_unassigned_, VERSION) (unsigned long v) {
}
static idn_biditype_t
compose_sym2(nameprep_biditype_, VERSION) (unsigned long v) {
compose_sym2(nameprep_biditype_, VERSION) (PRUint32 v) {
int idx0 = IDX0(BIDI, v);
int idx1 = IDX1(BIDI, v);
int idx2 = IDX2(BIDI, v);

Просмотреть файл

@ -47,6 +47,8 @@
extern "C" {
#endif /* __cplusplus */
#include "prtypes.h"
/*
* libidnkit result code.
*/
@ -96,12 +98,12 @@ typedef struct idn_nameprep *idn_nameprep_t;
/* race.c */
idn_result_t race_decode_decompress(const char *from,
unsigned short *buf,
PRUint16 *buf,
size_t buflen);
idn_result_t race_compress_encode(const unsigned short *p,
idn_result_t race_compress_encode(const PRUint16 *p,
int compress_mode,
char *to, size_t tolen);
int get_compress_mode(unsigned short *p);
int get_compress_mode(PRUint16 *p);
/* nameprep.c */
@ -136,8 +138,8 @@ idn_nameprep_destroy(idn_nameprep_t handle);
* idn_buffer_overflow -- result buffer is too small.
*/
idn_result_t
idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
unsigned long *to, size_t tolen);
idn_nameprep_map(idn_nameprep_t handle, const PRUint32 *from,
PRUint32 *to, size_t tolen);
/*
* Check if an UCS4 string 'str' contains any prohibited characters specified
@ -151,8 +153,8 @@ idn_nameprep_map(idn_nameprep_t handle, const unsigned long *from,
* result.)
*/
idn_result_t
idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found);
idn_nameprep_isprohibited(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found);
/*
* Check if an UCS4 string 'str' contains any unassigned characters specified
@ -166,8 +168,8 @@ idn_nameprep_isprohibited(idn_nameprep_t handle, const unsigned long *str,
* result.)
*/
idn_result_t
idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found);
idn_nameprep_isunassigned(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found);
/*
* Check if an UCS4 string 'str' is valid string specified by ``bidi check''
@ -180,8 +182,8 @@ idn_nameprep_isunassigned(idn_nameprep_t handle, const unsigned long *str,
* Check '*found' to see the result.)
*/
idn_result_t
idn_nameprep_isvalidbidi(idn_nameprep_t handle, const unsigned long *str,
const unsigned long **found);
idn_nameprep_isvalidbidi(idn_nameprep_t handle, const PRUint32 *str,
const PRUint32 **found);

Просмотреть файл

@ -397,8 +397,8 @@ nsresult nsIDNService::stringPrep(const nsAString& in, nsAString& out)
idn_result_t idn_err;
PRUint32 namePrepBuf[kMaxDNSNodeLen * 3]; // map up to three characters
idn_err = idn_nameprep_map(mNamePrepHandle, (const unsigned long*) ucs4Buf,
(unsigned long*) namePrepBuf, kMaxDNSNodeLen * 3);
idn_err = idn_nameprep_map(mNamePrepHandle, (const PRUint32 *) ucs4Buf,
(PRUint32 *) namePrepBuf, kMaxDNSNodeLen * 3);
NS_ENSURE_TRUE(idn_err == idn_success, NS_ERROR_FAILURE);
nsAutoString namePrepStr;
@ -413,15 +413,15 @@ nsresult nsIDNService::stringPrep(const nsAString& in, nsAString& out)
return NS_ERROR_FAILURE;
// prohibit
const unsigned long *found = nsnull;
const PRUint32 *found = nsnull;
idn_err = idn_nameprep_isprohibited(mNamePrepHandle,
(const unsigned long*) ucs4Buf, &found);
(const PRUint32 *) ucs4Buf, &found);
if (idn_err != idn_success || found)
return NS_ERROR_FAILURE;
// check bidi
idn_err = idn_nameprep_isvalidbidi(mNamePrepHandle,
(const unsigned long*) ucs4Buf, &found);
(const PRUint32 *) ucs4Buf, &found);
if (idn_err != idn_success || found)
return NS_ERROR_FAILURE;

Просмотреть файл

@ -64,9 +64,9 @@ enum {
idn_result_t
race_decode_decompress(const char *from, unsigned short *buf, size_t buflen)
race_decode_decompress(const char *from, PRUint16 *buf, size_t buflen)
{
unsigned short *p = buf;
PRUint16 *p = buf;
unsigned int bitbuf = 0;
int bitlen = 0;
unsigned int i, j;
@ -108,7 +108,7 @@ race_decode_decompress(const char *from, unsigned short *buf, size_t buflen)
buf[j] = (buf[i] << 8) + buf[i + 1];
len = j;
} else {
unsigned short c = buf[0] << 8; /* higher octet */
PRUint16 c = buf[0] << 8; /* higher octet */
for (i = 1, j = 0; i < len; j++) {
if (buf[i] == RACE_ESCAPE) {
@ -138,10 +138,10 @@ race_decode_decompress(const char *from, unsigned short *buf, size_t buflen)
}
idn_result_t
race_compress_encode(const unsigned short *p, int compress_mode,
race_compress_encode(const PRUint16 *p, int compress_mode,
char *to, size_t tolen)
{
unsigned long bitbuf = *p++; /* bit stream buffer */
PRUint32 bitbuf = *p++; /* bit stream buffer */
int bitlen = 8; /* # of bits in 'bitbuf' */
while (*p != '\0' || bitlen > 0) {
@ -208,10 +208,10 @@ race_compress_encode(const unsigned short *p, int compress_mode,
}
int
get_compress_mode(unsigned short *p) {
get_compress_mode(PRUint16 *p) {
int zero = 0;
unsigned int upper = 0;
unsigned short *modepos = p - 1;
PRUint16 *modepos = p - 1;
while (*p != '\0') {
unsigned int hi = *p++ & 0xff00;