}
}
break;
+ case CERT_RDN_UNICODE_STRING:
+ {
+ DWORD chars = 0;
+ LPCWSTR p = (LPWSTR)pValue->pbData;
+
+ if (p)
+ while (chars < pValue->cbData / sizeof(WCHAR) && *(p + chars))
+ ++chars;
+ if (!psz || !csz)
+ ret = WideCharToMultiByte(CP_ACP, 0, p, chars, NULL, 0, NULL, NULL);
+ else if (csz - 1)
+ {
+ ret = WideCharToMultiByte(CP_ACP, 0, p, chars, psz, csz - 1, NULL,
+ NULL);
+ csz -= ret;
+ }
+ break;
+ }
case CERT_RDN_UTF8_STRING:
if (!psz || !csz)
ret = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)pValue->pbData,
}
}
break;
+ case CERT_RDN_UNICODE_STRING:
+ {
+ DWORD chars = 0;
+ LPCWSTR p = (LPWSTR)pValue->pbData;
+
+ if (p)
+ while (chars < pValue->cbData / sizeof(WCHAR) && *(p + chars))
+ ++chars;
+ if (!psz || !csz)
+ ret = chars;
+ else
+ {
+ chars = min(chars, csz - 1);
+ if (chars)
+ {
+ DWORD i;
+
+ for (i = 0; i < chars; i++)
+ psz[i] = p[i];
+ ret += chars;
+ csz -= chars;
+ }
+ }
+ break;
+ }
case CERT_RDN_UTF8_STRING:
if (!psz || !csz)
ret = pValue->cbData / sizeof(WCHAR);