Module: wine Branch: master Commit: a9670e371e8d582147980a743c0073e95e5ac8ea URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a9670e371e8d582147980a74...
Author: James Hawkins truiken@gmail.com Date: Wed Aug 30 14:08:32 2006 -0700
crypt32: Simplify CRYPT_AsnDecodeNameValueInternal, getting rid of a warning.
---
dlls/crypt32/decode.c | 117 ++++++++++++++++++++++++------------------------- 1 files changed, 57 insertions(+), 60 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 04e2df2..d1e4006 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -1324,8 +1324,7 @@ static BOOL WINAPI CRYPT_AsnDecodeNameVa case ASN_UNIVERSALSTRING: FIXME("ASN_UNIVERSALSTRING: unimplemented\n"); SetLastError(CRYPT_E_ASN1_BADTAG); - ret = FALSE; - break; + return FALSE; case ASN_BMPSTRING: valueType = CERT_RDN_BMP_STRING; bytesNeeded += dataLen; @@ -1337,75 +1336,73 @@ static BOOL WINAPI CRYPT_AsnDecodeNameVa break; default: SetLastError(CRYPT_E_ASN1_BADTAG); + return FALSE; + } + + if (!value) + *pcbStructInfo = bytesNeeded; + else if (*pcbStructInfo < bytesNeeded) + { + *pcbStructInfo = bytesNeeded; + SetLastError(ERROR_MORE_DATA); ret = FALSE; } - if (ret) + else { - if (!value) - *pcbStructInfo = bytesNeeded; - else if (*pcbStructInfo < bytesNeeded) - { - *pcbStructInfo = bytesNeeded; - SetLastError(ERROR_MORE_DATA); - ret = FALSE; - } - else + *pcbStructInfo = bytesNeeded; + value->dwValueType = valueType; + if (dataLen) { - *pcbStructInfo = bytesNeeded; - value->dwValueType = valueType; - if (dataLen) - { - DWORD i; + DWORD i;
- assert(value->Value.pbData); - switch (pbEncoded[0]) - { - case ASN_OCTETSTRING: - case ASN_NUMERICSTRING: - case ASN_PRINTABLESTRING: - case ASN_IA5STRING: - case ASN_T61STRING: - case ASN_VIDEOTEXSTRING: - case ASN_GRAPHICSTRING: - case ASN_VISIBLESTRING: - case ASN_GENERALSTRING: - value->Value.cbData = dataLen; - if (dataLen) - { - if (!(dwFlags & CRYPT_DECODE_NOCOPY_FLAG)) - memcpy(value->Value.pbData, - pbEncoded + 1 + lenBytes, dataLen); - else - value->Value.pbData = (LPBYTE)pbEncoded + 1 + - lenBytes; - } - break; - case ASN_BMPSTRING: + assert(value->Value.pbData); + switch (pbEncoded[0]) + { + case ASN_OCTETSTRING: + case ASN_NUMERICSTRING: + case ASN_PRINTABLESTRING: + case ASN_IA5STRING: + case ASN_T61STRING: + case ASN_VIDEOTEXSTRING: + case ASN_GRAPHICSTRING: + case ASN_VISIBLESTRING: + case ASN_GENERALSTRING: + value->Value.cbData = dataLen; + if (dataLen) { - LPWSTR str = (LPWSTR)value->Value.pbData; - - value->Value.cbData = dataLen; - for (i = 0; i < dataLen / 2; i++) - str[i] = (pbEncoded[1 + lenBytes + 2 * i] << 8) | - pbEncoded[1 + lenBytes + 2 * i + 1]; - break; + if (!(dwFlags & CRYPT_DECODE_NOCOPY_FLAG)) + memcpy(value->Value.pbData, + pbEncoded + 1 + lenBytes, dataLen); + else + value->Value.pbData = (LPBYTE)pbEncoded + 1 + + lenBytes; } - case ASN_UTF8STRING: - { - LPWSTR str = (LPWSTR)value->Value.pbData; + break; + case ASN_BMPSTRING: + { + LPWSTR str = (LPWSTR)value->Value.pbData;
- value->Value.cbData = MultiByteToWideChar(CP_UTF8, 0, - (LPSTR)pbEncoded + 1 + lenBytes, dataLen, - str, bytesNeeded - sizeof(CERT_NAME_VALUE)) * 2; - break; - } - } + value->Value.cbData = dataLen; + for (i = 0; i < dataLen / 2; i++) + str[i] = (pbEncoded[1 + lenBytes + 2 * i] << 8) | + pbEncoded[1 + lenBytes + 2 * i + 1]; + break; } - else + case ASN_UTF8STRING: { - value->Value.cbData = 0; - value->Value.pbData = NULL; + LPWSTR str = (LPWSTR)value->Value.pbData; + + value->Value.cbData = MultiByteToWideChar(CP_UTF8, 0, + (LPSTR)pbEncoded + 1 + lenBytes, dataLen, + str, bytesNeeded - sizeof(CERT_NAME_VALUE)) * 2; + break; } + } + } + else + { + value->Value.cbData = 0; + value->Value.pbData = NULL; } } }