aboutsummaryrefslogtreecommitdiff
path: root/Src/nu/trace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nu/trace.cpp')
-rw-r--r--Src/nu/trace.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/Src/nu/trace.cpp b/Src/nu/trace.cpp
new file mode 100644
index 00000000..77faf092
--- /dev/null
+++ b/Src/nu/trace.cpp
@@ -0,0 +1,86 @@
+#include "./trace.h"
+#include <strsafe.h>
+
+#ifdef _DEBUG
+
+#ifdef __cplusplus
+extern "C" {
+#endif /*__cplusplus*/
+
+void DebugPrintfW(LPCWSTR format, ...)
+{
+ va_list argList;
+ wchar_t *pstr(NULL);
+ void *buffer;
+ size_t allocated(0), remaining(0);
+ int attempt(0);
+
+ va_start(argList, format);
+
+ do
+ {
+ attempt++;
+ if(attempt)
+ {
+ allocated += (512 * attempt);
+ buffer = realloc(pstr, allocated * sizeof(wchar_t));
+ if (NULL == buffer)
+ break;
+
+ pstr = (wchar_t*)buffer;
+ }
+
+ }
+ while (STRSAFE_E_INSUFFICIENT_BUFFER == StringCchVPrintfExW(pstr, allocated, NULL, &remaining,
+ STRSAFE_NULL_ON_FAILURE, format, argList));
+
+ OutputDebugStringW(pstr);
+
+ if (NULL != pstr)
+ free(pstr);
+
+ va_end(argList);
+
+}
+
+void DebugPrintfA(LPCSTR format, ...)
+{
+ va_list argList;
+ char *pstr(NULL);
+ void *buffer;
+ size_t allocated(0), remaining(0);
+ int attempt(0);
+
+ va_start(argList, format);
+
+ do
+ {
+ attempt++;
+ if(attempt)
+ {
+ allocated += (512 * attempt);
+ buffer = realloc(pstr, allocated * sizeof(char));
+ if (NULL == buffer)
+ break;
+
+ pstr = (char*)buffer;
+ }
+
+ }
+ while (STRSAFE_E_INSUFFICIENT_BUFFER == StringCchVPrintfExA(pstr, allocated, NULL, &remaining,
+ STRSAFE_NULL_ON_FAILURE, format, argList));
+
+ OutputDebugStringA(pstr);
+
+ if (NULL != pstr)
+ free(pstr);
+
+ va_end(argList);
+}
+
+
+#ifdef __cplusplus
+}
+#endif /*__cplusplus*/
+
+#endif /*_DEBUG*/ \ No newline at end of file