mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-15 07:24:46 +00:00
81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
/*
|
|
* Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1+
|
|
*/
|
|
|
|
#include <efi.h>
|
|
#include <efilib.h>
|
|
|
|
#include "fwup-cleanups.h"
|
|
#include "fwup-debug.h"
|
|
#include "fwup-efi.h"
|
|
|
|
static BOOLEAN debugging = FALSE;
|
|
|
|
BOOLEAN
|
|
fwup_debug_get_enabled(VOID)
|
|
{
|
|
return debugging;
|
|
}
|
|
|
|
VOID
|
|
fwup_debug_set_enabled(BOOLEAN val)
|
|
{
|
|
debugging = val;
|
|
}
|
|
|
|
static VOID
|
|
fwupd_debug_efivar_append(CHAR16 *out1)
|
|
{
|
|
CHAR16 *name = L"FWUPDATE_DEBUG_LOG";
|
|
UINT32 attrs = EFI_VARIABLE_NON_VOLATILE |
|
|
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
|
EFI_VARIABLE_RUNTIME_ACCESS;
|
|
static BOOLEAN once = TRUE;
|
|
if (once) {
|
|
once = FALSE;
|
|
fwup_delete_variable(name, &fwupdate_guid);
|
|
} else {
|
|
attrs |= EFI_VARIABLE_APPEND_WRITE;
|
|
}
|
|
fwup_set_variable(name, &fwupdate_guid, out1, StrSize(out1) - sizeof(CHAR16), attrs);
|
|
}
|
|
|
|
VOID
|
|
fwup_log(FwupLogLevel level, const char *func, const char *file, const int line, CHAR16 *fmt, ...)
|
|
{
|
|
va_list args;
|
|
_cleanup_free CHAR16 *tmp = NULL;
|
|
|
|
va_start(args, fmt);
|
|
tmp = VPoolPrint(fmt, args);
|
|
va_end(args);
|
|
if (tmp == NULL) {
|
|
Print(L"fwupdate: Allocation for debug log failed!\n");
|
|
return;
|
|
}
|
|
|
|
if (debugging) {
|
|
_cleanup_free CHAR16 *out1 = NULL;
|
|
out1 = PoolPrint(L"%a:%d:%a(): %s\n", file, line, func, tmp);
|
|
if (out1 == NULL) {
|
|
Print(L"fwupdate: Allocation for debug log failed!\n");
|
|
return;
|
|
}
|
|
Print(L"%s", out1);
|
|
fwupd_debug_efivar_append(out1);
|
|
} else {
|
|
switch (level) {
|
|
case FWUP_DEBUG_LEVEL_DEBUG:
|
|
break;
|
|
case FWUP_DEBUG_LEVEL_WARNING:
|
|
Print(L"WARNING: %s\n", tmp);
|
|
break;
|
|
default:
|
|
Print(L"%s\n", tmp);
|
|
break;
|
|
}
|
|
}
|
|
}
|