1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright (C) 2018 IBM Corp.
3 #define _GNU_SOURCE
4 #include <stdarg.h>
5 #include <stdbool.h>
6 #include <stdio.h>
7 #include <stdint.h>
8 #include <string.h>
9 #include <sys/types.h>
10 #include <syslog.h>
11 #include <time.h>
12
13 #include "common.h"
14
15 void (*mbox_vlog)(int p, const char *fmt, va_list args);
16
17 enum verbose verbosity;
18
mbox_log_console(int p,const char * fmt,va_list args)19 void mbox_log_console(int p, const char *fmt, va_list args)
20 {
21 struct timespec time;
22 FILE *s = (p < LOG_WARNING) ? stdout : stderr;
23
24 clock_gettime(CLOCK_REALTIME, &time);
25
26 fprintf(s, "[%s %ld.%.9ld] ", PREFIX, time.tv_sec, time.tv_nsec);
27
28 vfprintf(s, fmt, args);
29 }
30
31 __attribute__((format(printf, 2, 3)))
mbox_log(int p,const char * fmt,...)32 void mbox_log(int p, const char *fmt, ...)
33 {
34 static bool warned = false;
35 va_list args;
36
37 if (!mbox_vlog) {
38 if (!warned) {
39 fprintf(stderr, "Logging backend not configured, "
40 "log output disabled\n");
41 warned = true;
42 }
43
44 return;
45 }
46
47 va_start(args, fmt);
48 mbox_vlog(p, fmt, args);
49 va_end(args);
50 }
51
get_u16(uint8_t * ptr)52 uint16_t get_u16(uint8_t *ptr)
53 {
54 return le16toh(*(uint16_t *)ptr);
55 }
56
put_u16(uint8_t * ptr,uint16_t val)57 void put_u16(uint8_t *ptr, uint16_t val)
58 {
59 val = htole16(val);
60 memcpy(ptr, &val, sizeof(val));
61 }
62
get_u32(uint8_t * ptr)63 uint32_t get_u32(uint8_t *ptr)
64 {
65 return le32toh(*(uint32_t *)ptr);
66 }
67
put_u32(uint8_t * ptr,uint32_t val)68 void put_u32(uint8_t *ptr, uint32_t val)
69 {
70 val = htole32(val);
71 memcpy(ptr, &val, sizeof(val));
72 }
73
74