Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: c-utility/src/xlogging.c
- Revision:
- 0:f7f1f0d76dd6
diff -r 000000000000 -r f7f1f0d76dd6 c-utility/src/xlogging.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/c-utility/src/xlogging.c Thu Aug 23 06:52:14 2018 +0000
@@ -0,0 +1,137 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/consolelogger.h"
+
+#ifndef NO_LOGGING
+
+
+#ifdef WINCE
+#include <stdarg.h>
+
+void consolelogger_log(LOG_CATEGORY log_category, const char* file, const char* func, int line, unsigned int options, const char* format, ...)
+{
+ va_list args;
+ va_start(args, format);
+
+ time_t t = time(NULL);
+
+ switch (log_category)
+ {
+ case AZ_LOG_INFO:
+ (void)printf("Info: ");
+ break;
+ case AZ_LOG_ERROR:
+ (void)printf("Error: Time:%.24s File:%s Func:%s Line:%d ", ctime(&t), file, func, line);
+ break;
+ default:
+ break;
+ }
+
+ (void)vprintf(format, args);
+ va_end(args);
+
+ (void)log_category;
+ if (options & LOG_LINE)
+ {
+ (void)printf("\r\n");
+ }
+}
+#endif
+
+LOGGER_LOG global_log_function = consolelogger_log;
+
+void xlogging_set_log_function(LOGGER_LOG log_function)
+{
+ global_log_function = log_function;
+}
+
+LOGGER_LOG xlogging_get_log_function(void)
+{
+ return global_log_function;
+}
+
+#if (defined(_MSC_VER)) && (!(defined WINCE))
+
+LOGGER_LOG_GETLASTERROR global_log_function_GetLastError = consolelogger_log_with_GetLastError;
+
+void xlogging_set_log_function_GetLastError(LOGGER_LOG_GETLASTERROR log_function_GetLastError)
+{
+ global_log_function_GetLastError = log_function_GetLastError;
+}
+
+LOGGER_LOG_GETLASTERROR xlogging_get_log_function_GetLastError(void)
+{
+ return global_log_function_GetLastError;
+}
+#endif
+
+/* Print up to 16 bytes per line. */
+#define LINE_SIZE 16
+
+/* Return the printable char for the provided value. */
+#define PRINTABLE(c) ((c >= ' ') && (c <= '~')) ? (char)c : '.'
+
+/* Convert the lower nibble of the provided byte to a hexadecimal printable char. */
+#define HEX_STR(c) (((c) & 0xF) < 0xA) ? (char)(((c) & 0xF) + '0') : (char)(((c) & 0xF) - 0xA + 'A')
+
+void LogBinary(const char* comment, const void* data, size_t size)
+{
+ char charBuf[LINE_SIZE + 1];
+ char hexBuf[LINE_SIZE * 3 + 1];
+ size_t countbuf = 0;
+ size_t i = 0;
+ const unsigned char* bufAsChar = (const unsigned char*)data;
+ const unsigned char* startPos = bufAsChar;
+
+ LOG(AZ_LOG_TRACE, LOG_LINE, "%s %lu bytes", comment, size);
+
+ /* Print the whole buffer. */
+ for (i = 0; i < size; i++)
+ {
+ /* Store the printable value of the char in the charBuf to print. */
+ charBuf[countbuf] = PRINTABLE(*bufAsChar);
+
+ /* Convert the high nibble to a printable hexadecimal value. */
+ hexBuf[countbuf * 3] = HEX_STR(*bufAsChar >> 4);
+
+ /* Convert the low nibble to a printable hexadecimal value. */
+ hexBuf[countbuf * 3 + 1] = HEX_STR(*bufAsChar);
+
+ hexBuf[countbuf * 3 + 2] = ' ';
+
+ countbuf++;
+ bufAsChar++;
+ /* If the line is full, print it to start another one. */
+ if (countbuf == LINE_SIZE)
+ {
+ charBuf[countbuf] = '\0';
+ hexBuf[countbuf * 3] = '\0';
+ LOG(AZ_LOG_TRACE, LOG_LINE, "%p: %s %s", startPos, hexBuf, charBuf);
+ countbuf = 0;
+ startPos = bufAsChar;
+ }
+ }
+
+ /* If the last line does not fit the line size. */
+ if (countbuf > 0)
+ {
+ /* Close the charBuf string. */
+ charBuf[countbuf] = '\0';
+
+ /* Fill the hexBuf with spaces to keep the charBuf alignment. */
+ while ((countbuf++) < LINE_SIZE - 1)
+ {
+ hexBuf[countbuf * 3] = ' ';
+ hexBuf[countbuf * 3 + 1] = ' ';
+ hexBuf[countbuf * 3 + 2] = ' ';
+ }
+ hexBuf[countbuf * 3] = '\0';
+
+ /* Print the last line. */
+ LOG(AZ_LOG_TRACE, LOG_LINE, "%p: %s %s", startPos, hexBuf, charBuf);
+ }
+}
+
+#endif