| |
| |
| |
| |
| |
| |
| #include <psxtypes/psxtypes.h> |
| #include <ntapi/nt_status.h> |
| |
| static void __tt_uintptr_to_mirrored_dec_utf8( |
| uintptr_t key, |
| unsigned char * buf, |
| ssize_t * arrlen) |
| { |
| unsigned i; |
| |
| buf[0] = '0' + (key % 10); |
| key /= 10; |
| |
| for (i=1; key; i++) { |
| buf[i] = '0' + (key % 10); |
| key /= 10; |
| } |
| |
| *arrlen = i; |
| } |
| |
| static int32_t __tt_uintptr_to_dec_utf16( |
| uintptr_t key, |
| wchar16_t * wstrbuf, |
| size_t buflen, |
| ssize_t * arrlen) |
| { |
| ssize_t i; |
| ssize_t slen; |
| unsigned char buf[24]; |
| |
| __tt_uintptr_to_mirrored_dec_utf8( |
| key,buf,arrlen); |
| |
| if ((i = *arrlen) > (slen = buflen)) |
| return NT_STATUS_BUFFER_TOO_SMALL; |
| |
| for (--i; i>=0; i--) |
| *wstrbuf++ = buf[i]; |
| |
| return NT_STATUS_SUCCESS; |
| } |
| |
| static int32_t __tt_uintptr_to_dec_utf8( |
| uintptr_t key, |
| unsigned char * strbuf, |
| size_t buflen, |
| ssize_t * arrlen) |
| { |
| ssize_t i; |
| ssize_t slen; |
| unsigned char buf[24]; |
| |
| __tt_uintptr_to_mirrored_dec_utf8( |
| key,buf,arrlen); |
| |
| if ((i = *arrlen) > (slen = buflen)) |
| return NT_STATUS_BUFFER_TOO_SMALL; |
| |
| for (--i; i>=0; i--) |
| *strbuf++ = buf[i]; |
| |
| return NT_STATUS_SUCCESS; |
| } |
| |
| int32_t __stdcall __ntapi_tt_uintptr_to_dec_utf16( |
| __in uintptr_t key, |
| __out wchar16_t * wstrbuf, |
| __in size_t buflen, |
| __out ssize_t * length) |
| { |
| int32_t status; |
| ssize_t arrlen; |
| |
| buflen /= sizeof(wchar16_t); |
| |
| status = __tt_uintptr_to_dec_utf16( |
| key,wstrbuf, |
| buflen,&arrlen); |
| |
| *length = arrlen * sizeof(wchar16_t); |
| |
| return status; |
| } |
| |
| int32_t __stdcall __ntapi_tt_uintptr_to_dec_utf8( |
| __in uintptr_t key, |
| __out unsigned char * strbuf, |
| __in size_t buflen, |
| __out ssize_t * length) |
| { |
| return __tt_uintptr_to_dec_utf8( |
| key,strbuf, |
| buflen,length); |
| } |
| |
| |
| int32_t __stdcall __ntapi_tt_uintptr_to_dec_null_utf16( |
| __in uintptr_t key, |
| __out wchar16_t * wstrbuf, |
| __in size_t buflen, |
| __out ssize_t * length) |
| { |
| int32_t status; |
| ssize_t arrlen; |
| |
| buflen -= sizeof(wchar16_t); |
| buflen /= sizeof(wchar16_t); |
| |
| status = __tt_uintptr_to_dec_utf16( |
| key,wstrbuf, |
| buflen,&arrlen); |
| |
| if (status == NT_STATUS_SUCCESS) |
| wstrbuf[arrlen] = 0; |
| |
| *length = ++arrlen * sizeof(wchar16_t); |
| |
| return status; |
| } |
| |
| |
| int32_t __stdcall __ntapi_tt_uintptr_to_dec_null_utf8( |
| __in uintptr_t key, |
| __out unsigned char * strbuf, |
| __in size_t buflen, |
| __out ssize_t * length) |
| { |
| int32_t status; |
| ssize_t arrlen; |
| |
| status = __tt_uintptr_to_dec_utf8( |
| key,strbuf, |
| --buflen,&arrlen); |
| |
| if (status == NT_STATUS_SUCCESS) |
| strbuf[arrlen] = 0; |
| |
| *length = ++arrlen; |
| |
| return status; |
| } |