]>
Commit | Line | Data |
---|---|---|
031e5cce | 1 | // SPDX-License-Identifier: BSD-2-Clause-Patent |
b6f94dbe MTL |
2 | /* |
3 | * errlog.c | |
031e5cce | 4 | * Copyright Peter Jones <pjones@redhat.com> |
b6f94dbe MTL |
5 | */ |
6 | ||
7 | #include "shim.h" | |
8 | ||
b6f94dbe MTL |
9 | static CHAR16 **errs = NULL; |
10 | static UINTN nerrs = 0; | |
11 | ||
031e5cce SM |
12 | EFI_STATUS EFIAPI |
13 | vdprint_(const CHAR16 *fmt, const char *file, int line, const char *func, | |
14 | ms_va_list args) | |
b6f94dbe | 15 | { |
031e5cce SM |
16 | ms_va_list args2; |
17 | EFI_STATUS efi_status = EFI_SUCCESS; | |
18 | ||
19 | if (verbose) { | |
20 | ms_va_copy(args2, args); | |
21 | console_print(L"%a:%d:%a() ", file, line, func); | |
22 | efi_status = VPrint(fmt, args2); | |
23 | ms_va_end(args2); | |
24 | } | |
25 | return efi_status; | |
26 | } | |
b6f94dbe | 27 | |
031e5cce SM |
28 | EFI_STATUS EFIAPI |
29 | VLogError(const char *file, int line, const char *func, const CHAR16 *fmt, | |
30 | ms_va_list args) | |
31 | { | |
32 | ms_va_list args2; | |
33 | CHAR16 **newerrs; | |
b6f94dbe MTL |
34 | |
35 | newerrs = ReallocatePool(errs, (nerrs + 1) * sizeof(*errs), | |
36 | (nerrs + 3) * sizeof(*errs)); | |
37 | if (!newerrs) | |
38 | return EFI_OUT_OF_RESOURCES; | |
39 | ||
031e5cce | 40 | newerrs[nerrs] = PoolPrint(L"%a:%d %a() ", file, line, func); |
b6f94dbe MTL |
41 | if (!newerrs[nerrs]) |
42 | return EFI_OUT_OF_RESOURCES; | |
031e5cce SM |
43 | ms_va_copy(args2, args); |
44 | newerrs[nerrs+1] = VPoolPrint(fmt, args2); | |
b6f94dbe MTL |
45 | if (!newerrs[nerrs+1]) |
46 | return EFI_OUT_OF_RESOURCES; | |
031e5cce | 47 | ms_va_end(args2); |
b6f94dbe MTL |
48 | |
49 | nerrs += 2; | |
50 | newerrs[nerrs] = NULL; | |
51 | errs = newerrs; | |
52 | ||
53 | return EFI_SUCCESS; | |
54 | } | |
55 | ||
031e5cce SM |
56 | EFI_STATUS EFIAPI |
57 | LogError_(const char *file, int line, const char *func, const CHAR16 *fmt, ...) | |
b6f94dbe | 58 | { |
031e5cce | 59 | ms_va_list args; |
f892ac66 | 60 | EFI_STATUS efi_status; |
b6f94dbe | 61 | |
031e5cce | 62 | ms_va_start(args, fmt); |
f892ac66 | 63 | efi_status = VLogError(file, line, func, fmt, args); |
031e5cce | 64 | ms_va_end(args); |
b6f94dbe | 65 | |
f892ac66 | 66 | return efi_status; |
b6f94dbe MTL |
67 | } |
68 | ||
031e5cce SM |
69 | VOID |
70 | LogHexdump_(const char *file, int line, const char *func, const void *data, size_t sz) | |
71 | { | |
72 | hexdumpat(file, line, func, data, sz, 0); | |
73 | } | |
74 | ||
b6f94dbe MTL |
75 | VOID |
76 | PrintErrors(VOID) | |
77 | { | |
78 | UINTN i; | |
79 | ||
51d5bbcb MTL |
80 | if (!verbose) |
81 | return; | |
82 | ||
b6f94dbe | 83 | for (i = 0; i < nerrs; i++) |
f892ac66 | 84 | console_print(L"%s", errs[i]); |
b6f94dbe MTL |
85 | } |
86 | ||
87 | VOID | |
88 | ClearErrors(VOID) | |
89 | { | |
90 | UINTN i; | |
91 | ||
92 | for (i = 0; i < nerrs; i++) | |
93 | FreePool(errs[i]); | |
94 | FreePool(errs); | |
95 | nerrs = 0; | |
96 | errs = NULL; | |
97 | } | |
98 | ||
99 | // vim:fenc=utf-8:tw=75 |