summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/strfuncs.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/strfuncs.cc')
-rw-r--r--winsup/cygwin/strfuncs.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc
index c0029fb1f..91ed160c3 100644
--- a/winsup/cygwin/strfuncs.cc
+++ b/winsup/cygwin/strfuncs.cc
@@ -12,6 +12,7 @@ details. */
#include "winsup.h"
#include <winbase.h>
#include <winnls.h>
+#include <ntdll.h>
codepage_type current_codepage = ansi_cp;
@@ -41,3 +42,23 @@ sys_mbstowcs (WCHAR *tgt, const char *src, int len)
int res = MultiByteToWideChar (get_cp (), 0, src, -1, tgt, len);
return res;
}
+
+static WCHAR hex_wchars[] = L"0123456789abcdef";
+
+NTSTATUS NTAPI
+RtlInt64ToHexUnicodeString (ULONGLONG value, PUNICODE_STRING dest,
+ BOOLEAN append)
+{
+ USHORT len = append ? dest->Length : 0;
+ if (dest->MaximumLength - len < 16 * (int) sizeof (WCHAR))
+ return STATUS_BUFFER_OVERFLOW;
+ PWCHAR end = (PWCHAR) ((PBYTE) dest->Buffer + len);
+ register PWCHAR p = end + 16;
+ while (p-- > end)
+ {
+ *p = hex_wchars[value & 0xf];
+ value >>= 4;
+ }
+ dest->Length += 16 * sizeof (WCHAR);
+ return STATUS_SUCCESS;
+}