fwupd/plugins/redfish/fu-redfish-common.c

60 lines
1.3 KiB
C

/*
* Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#include "config.h"
#include "fwupd-error.h"
#include "fu-redfish-common.h"
GBytes *
fu_redfish_common_get_evivar_raw (efi_guid_t guid, const gchar *name, GError **error)
{
gsize sz = 0;
guint32 attribs = 0;
guint8 *data = NULL;
if (efi_get_variable (guid, name, &data, &sz, &attribs) < 0) {
g_autofree gchar *guid_str = NULL;
efi_guid_to_str (&guid, &guid_str);
g_set_error (error,
FWUPD_ERROR,
FWUPD_ERROR_INVALID_FILE,
"failed to get efivar for %s %s",
guid_str, name);
return NULL;
}
return g_bytes_new_take (data, sz);
}
gchar *
fu_redfish_common_buffer_to_ipv4 (const guint8 *buffer)
{
GString *str = g_string_new (NULL);
for (guint i = 0; i < 4; i++) {
g_string_append_printf (str, "%u", buffer[i]);
if (i != 3)
g_string_append (str, ".");
}
return g_string_free (str, FALSE);
}
gchar *
fu_redfish_common_buffer_to_ipv6 (const guint8 *buffer)
{
GString *str = g_string_new (NULL);
for (guint i = 0; i < 16; i += 4) {
g_string_append_printf (str, "%02x%02x%02x%02x",
buffer[i+0], buffer[i+1],
buffer[i+2], buffer[i+3]);
if (i != 12)
g_string_append (str, ":");
}
return g_string_free (str, FALSE);
}
/* vim: set noexpandtab: */