]> git.proxmox.com Git - efi-boot-shim.git/blob - errlog.c
Prepare Debian release 15+1533136590.3beb971-3
[efi-boot-shim.git] / errlog.c
1 /*
2 * errlog.c
3 * Copyright 2017 Peter Jones <pjones@redhat.com>
4 *
5 * Distributed under terms of the GPLv3 license.
6 */
7
8 #include "shim.h"
9
10 static CHAR16 **errs = NULL;
11 static UINTN nerrs = 0;
12
13 EFI_STATUS
14 VLogError(const char *file, int line, const char *func, CHAR16 *fmt, va_list args)
15 {
16 va_list args2;
17 UINTN size = 0, size2;
18 CHAR16 **newerrs;
19
20 size = SPrint(NULL, 0, L"%a:%d %a() ", file, line, func);
21 va_copy(args2, args);
22 size2 = VSPrint(NULL, 0, fmt, args2);
23 va_end(args2);
24
25 newerrs = ReallocatePool(errs, (nerrs + 1) * sizeof(*errs),
26 (nerrs + 3) * sizeof(*errs));
27 if (!newerrs)
28 return EFI_OUT_OF_RESOURCES;
29
30 newerrs[nerrs] = AllocatePool(size*2+2);
31 if (!newerrs[nerrs])
32 return EFI_OUT_OF_RESOURCES;
33 newerrs[nerrs+1] = AllocatePool(size2*2+2);
34 if (!newerrs[nerrs+1])
35 return EFI_OUT_OF_RESOURCES;
36
37 SPrint(newerrs[nerrs], size*2+2, L"%a:%d %a() ", file, line, func);
38 va_copy(args2, args);
39 VSPrint(newerrs[nerrs+1], size2*2+2, fmt, args2);
40 va_end(args2);
41
42 nerrs += 2;
43 newerrs[nerrs] = NULL;
44 errs = newerrs;
45
46 return EFI_SUCCESS;
47 }
48
49 EFI_STATUS
50 LogError_(const char *file, int line, const char *func, CHAR16 *fmt, ...)
51 {
52 va_list args;
53 EFI_STATUS efi_status;
54
55 va_start(args, fmt);
56 efi_status = VLogError(file, line, func, fmt, args);
57 va_end(args);
58
59 return efi_status;
60 }
61
62 VOID
63 PrintErrors(VOID)
64 {
65 UINTN i;
66
67 if (!verbose)
68 return;
69
70 for (i = 0; i < nerrs; i++)
71 console_print(L"%s", errs[i]);
72 }
73
74 VOID
75 ClearErrors(VOID)
76 {
77 UINTN i;
78
79 for (i = 0; i < nerrs; i++)
80 FreePool(errs[i]);
81 FreePool(errs);
82 nerrs = 0;
83 errs = NULL;
84 }
85
86 // vim:fenc=utf-8:tw=75