use wind to convert strings
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24474 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -197,7 +197,7 @@ int
|
|||||||
_hx509_Name_to_string(const Name *n, char **str)
|
_hx509_Name_to_string(const Name *n, char **str)
|
||||||
{
|
{
|
||||||
size_t total_len = 0;
|
size_t total_len = 0;
|
||||||
int i, j;
|
int i, j, ret;
|
||||||
|
|
||||||
*str = strdup("");
|
*str = strdup("");
|
||||||
if (*str == NULL)
|
if (*str == NULL)
|
||||||
@@ -224,15 +224,20 @@ _hx509_Name_to_string(const Name *n, char **str)
|
|||||||
ss = ds->u.utf8String;
|
ss = ds->u.utf8String;
|
||||||
break;
|
break;
|
||||||
case choice_DirectoryString_bmpString: {
|
case choice_DirectoryString_bmpString: {
|
||||||
uint16_t *bmp = ds->u.bmpString.data;
|
const uint16_t *bmp = ds->u.bmpString.data;
|
||||||
size_t bmplen = ds->u.bmpString.length;
|
size_t bmplen = ds->u.bmpString.length;
|
||||||
size_t k;
|
size_t k;
|
||||||
|
|
||||||
ss = malloc(bmplen + 1);
|
ret = wind_ucs2utf8_length(bmp, bmplen, &k);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ss = malloc(k + 1);
|
||||||
if (ss == NULL)
|
if (ss == NULL)
|
||||||
_hx509_abort("allocation failure"); /* XXX */
|
_hx509_abort("allocation failure"); /* XXX */
|
||||||
for (k = 0; k < bmplen; k++)
|
ret = wind_ucs2utf8(bmp, bmplen, ss, k + 1);
|
||||||
ss[k] = bmp[k] & 0xff; /* XXX */
|
if (ret)
|
||||||
|
return ret;
|
||||||
ss[k] = '\0';
|
ss[k] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -244,15 +249,20 @@ _hx509_Name_to_string(const Name *n, char **str)
|
|||||||
ss[ds->u.teletexString.length] = '\0';
|
ss[ds->u.teletexString.length] = '\0';
|
||||||
break;
|
break;
|
||||||
case choice_DirectoryString_universalString: {
|
case choice_DirectoryString_universalString: {
|
||||||
uint32_t *uni = ds->u.universalString.data;
|
const uint32_t *uni = ds->u.universalString.data;
|
||||||
size_t unilen = ds->u.universalString.length;
|
size_t unilen = ds->u.universalString.length;
|
||||||
size_t k;
|
size_t k;
|
||||||
|
|
||||||
ss = malloc(unilen + 1);
|
ret = wind_ucs4utf8_length(uni, unilen, &k);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ss = malloc(k + 1);
|
||||||
if (ss == NULL)
|
if (ss == NULL)
|
||||||
_hx509_abort("allocation failure"); /* XXX */
|
_hx509_abort("allocation failure"); /* XXX */
|
||||||
for (k = 0; k < unilen; k++)
|
ret = wind_ucs4utf8(uni, unilen, ss, k + 1);
|
||||||
ss[k] = uni[k] & 0xff; /* XXX */
|
if (ret)
|
||||||
|
return ret;
|
||||||
ss[k] = '\0';
|
ss[k] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user