blob: 6ebc1a3813cec57b6394fab307d7444869bbaffd [file] [log] [blame]
Richard Hughes02c90d82018-08-09 12:13:03 +01001/*
Richard Hughes943d2c92017-06-21 09:04:39 +01002 * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
3 *
Mario Limonciello51308e62018-05-28 20:05:46 -05004 * SPDX-License-Identifier: LGPL-2.1+
Richard Hughes943d2c92017-06-21 09:04:39 +01005 */
6
Richard Hughesbfd946e2019-02-09 08:21:40 +00007#pragma once
Richard Hughes943d2c92017-06-21 09:04:39 +01008
Richard Hughesadc9dad2017-09-04 13:19:27 +01009#include <gio/gio.h>
Richard Hughes943d2c92017-06-21 09:04:39 +010010
Mario Limonciello39602652019-04-29 21:08:58 -050011/**
12 * FuAppFlags:
13 * @FU_APP_FLAGS_NONE: No flags set
14 * @FU_APP_FLAGS_NO_IDLE_SOURCES: Disallow idle sources
Mario Limonciello39602652019-04-29 21:08:58 -050015 *
16 * The flags to use when loading an application.
17 **/
Richard Hughes5b5f6552018-05-18 10:22:39 +010018typedef enum {
19 FU_APP_FLAGS_NONE = 0,
20 FU_APP_FLAGS_NO_IDLE_SOURCES = 1 << 0,
Mario Limonciello39602652019-04-29 21:08:58 -050021 /*< private >*/
Richard Hughes5b5f6552018-05-18 10:22:39 +010022 FU_APP_FLAGS_LAST
23} FuAppFlags;
24
Mario Limonciello39602652019-04-29 21:08:58 -050025/**
26 * FuDumpFlags:
27 * @FU_DUMP_FLAGS_NONE: No flags set
28 * @FU_DUMP_FLAGS_SHOW_ASCII: Show ASCII in debugging dumps
29 * @FU_DUMP_FLAGS_SHOW_ADDRESSES: Show addresses in debugging dumps
30 *
31 * The flags to use when configuring debugging
32 **/
Richard Hughes4be17d12018-05-30 20:36:29 +010033typedef enum {
Richard Hughes35481862019-01-06 12:01:58 +000034 FU_DUMP_FLAGS_NONE = 0,
35 FU_DUMP_FLAGS_SHOW_ASCII = 1 << 0,
36 FU_DUMP_FLAGS_SHOW_ADDRESSES = 1 << 1,
Mario Limonciello39602652019-04-29 21:08:58 -050037 /*< private >*/
Richard Hughes35481862019-01-06 12:01:58 +000038 FU_DUMP_FLAGS_LAST
39} FuDumpFlags;
40
Richard Hughes37c6a7b2019-08-14 21:57:43 +010041typedef guint FuEndianType;
42
Mario Limonciello39602652019-04-29 21:08:58 -050043/**
44 * FuPathKind:
45 * @FU_PATH_KIND_CACHEDIR_PKG: The cache directory (IE /var/cache/fwupd)
46 * @FU_PATH_KIND_DATADIR_PKG: The non-volatile data store (IE /usr/share/fwupd)
47 * @FU_PATH_KIND_EFIAPPDIR: The location to store EFI apps before install (IE /usr/libexec/fwupd/efi)
48 * @FU_PATH_KIND_LOCALSTATEDIR: The local state directory (IE /var)
49 * @FU_PATH_KIND_LOCALSTATEDIR_PKG: The local state directory for the package (IE /var/lib/fwupd)
50 * @FU_PATH_KIND_PLUGINDIR_PKG: The location to look for plugins for package (IE /usr/lib/[triplet]/fwupd-plugins-3)
51 * @FU_PATH_KIND_SYSCONFDIR: The configuration location (IE /etc)
52 * @FU_PATH_KIND_SYSCONFDIR_PKG: The package configuration location (IE /etc/fwupd)
53 * @FU_PATH_KIND_SYSFSDIR_FW: The sysfs firmware location (IE /sys/firmware)
54 * @FU_PATH_KIND_SYSFSDIR_DRIVERS: The platform sysfs directory (IE /sys/bus/platform/drivers)
55 * @FU_PATH_KIND_SYSFSDIR_TPM: The TPM sysfs directory (IE /sys/class/tpm)
Mario Limonciellod8af5de2019-11-04 09:33:34 -060056 * @FU_PATH_KIND_POLKIT_ACTIONS: The directory for policy kit actions (IE /usr/share/polkit-1/actions/)
Richard Hughesafdba372019-11-23 12:57:35 +000057 * @FU_PATH_KIND_OFFLINE_TRIGGER: The file for the offline trigger (IE /system-update)
Mario Limonciello9dce1f72020-02-04 09:12:52 -060058 * @FU_PATH_KIND_SYSFSDIR_SECURITY: The sysfs security location (IE /sys/kernel/security)
Mario Limonciello39602652019-04-29 21:08:58 -050059 *
60 * Path types to use when dynamically determining a path at runtime
61 **/
Richard Hughes35481862019-01-06 12:01:58 +000062typedef enum {
Richard Hughes4be17d12018-05-30 20:36:29 +010063 FU_PATH_KIND_CACHEDIR_PKG,
64 FU_PATH_KIND_DATADIR_PKG,
Mario Limoncielloe6e2bf92018-07-10 12:11:25 -050065 FU_PATH_KIND_EFIAPPDIR,
Richard Hughes4be17d12018-05-30 20:36:29 +010066 FU_PATH_KIND_LOCALSTATEDIR,
67 FU_PATH_KIND_LOCALSTATEDIR_PKG,
68 FU_PATH_KIND_PLUGINDIR_PKG,
69 FU_PATH_KIND_SYSCONFDIR,
70 FU_PATH_KIND_SYSCONFDIR_PKG,
Richard Hughes282b10d2018-06-22 14:48:00 +010071 FU_PATH_KIND_SYSFSDIR_FW,
Richard Hughes83390f62018-06-22 20:36:46 +010072 FU_PATH_KIND_SYSFSDIR_DRIVERS,
Richard Hughesb56015e2018-12-12 09:25:32 +000073 FU_PATH_KIND_SYSFSDIR_TPM,
Mario Limonciello057c67a2019-05-23 10:44:19 -050074 FU_PATH_KIND_POLKIT_ACTIONS,
Richard Hughesafdba372019-11-23 12:57:35 +000075 FU_PATH_KIND_OFFLINE_TRIGGER,
Mario Limonciello9dce1f72020-02-04 09:12:52 -060076 FU_PATH_KIND_SYSFSDIR_SECURITY,
Mario Limonciello39602652019-04-29 21:08:58 -050077 /*< private >*/
Richard Hughes4be17d12018-05-30 20:36:29 +010078 FU_PATH_KIND_LAST
79} FuPathKind;
80
Richard Hughes049ccc82017-08-09 15:26:56 +010081typedef void (*FuOutputHandler) (const gchar *line,
82 gpointer user_data);
83
84gboolean fu_common_spawn_sync (const gchar * const *argv,
Richard Hughes4eada342017-10-03 21:20:32 +010085 FuOutputHandler handler_cb,
Richard Hughes049ccc82017-08-09 15:26:56 +010086 gpointer handler_user_data,
Richard Hughesb768e4d2019-02-26 13:55:18 +000087 guint timeout_ms,
Richard Hughes049ccc82017-08-09 15:26:56 +010088 GCancellable *cancellable,
89 GError **error);
90
Richard Hughes4be17d12018-05-30 20:36:29 +010091gchar *fu_common_get_path (FuPathKind path_kind);
Richard Hughes484ee292019-03-22 16:10:50 +000092gchar *fu_common_realpath (const gchar *filename,
93 GError **error);
Richard Hughes5c508de2019-11-22 09:57:34 +000094gboolean fu_common_fnmatch (const gchar *pattern,
95 const gchar *str);
Richard Hughes954dd9f2017-08-08 13:36:25 +010096gboolean fu_common_rmtree (const gchar *directory,
97 GError **error);
Richard Hughes89e968b2018-03-07 10:01:08 +000098GPtrArray *fu_common_get_files_recursive (const gchar *path,
99 GError **error);
Richard Hughes7ee42fe2017-08-15 14:06:21 +0100100gboolean fu_common_mkdir_parent (const gchar *filename,
101 GError **error);
Richard Hughes943d2c92017-06-21 09:04:39 +0100102gboolean fu_common_set_contents_bytes (const gchar *filename,
Richard Hughes4eada342017-10-03 21:20:32 +0100103 GBytes *bytes,
Richard Hughes943d2c92017-06-21 09:04:39 +0100104 GError **error);
Richard Hughesd0d2ae62017-08-08 12:22:30 +0100105GBytes *fu_common_get_contents_bytes (const gchar *filename,
106 GError **error);
Richard Hughes943d2c92017-06-21 09:04:39 +0100107GBytes *fu_common_get_contents_fd (gint fd,
108 gsize count,
109 GError **error);
Richard Hughes94f939a2017-08-08 12:21:39 +0100110gboolean fu_common_extract_archive (GBytes *blob,
111 const gchar *dir,
112 GError **error);
Richard Hughes41cbe2a2017-08-08 14:13:35 +0100113GBytes *fu_common_firmware_builder (GBytes *bytes,
114 const gchar *script_fn,
115 const gchar *output_fn,
116 GError **error);
Richard Hughese82eef32018-05-20 10:41:26 +0100117GError *fu_common_error_array_get_best (GPtrArray *errors);
Richard Hughes73bf2332018-08-28 09:38:09 +0100118guint64 fu_common_strtoull (const gchar *str);
Richard Hughes22367e72018-08-30 10:24:04 +0100119gchar *fu_common_find_program_in_path (const gchar *basename,
120 GError **error);
Richard Hughesa574a752018-08-31 13:31:03 +0100121gchar *fu_common_strstrip (const gchar *str);
Richard Hughese59cb9a2018-12-05 14:37:40 +0000122void fu_common_dump_raw (const gchar *log_domain,
123 const gchar *title,
124 const guint8 *data,
125 gsize len);
Richard Hughes35481862019-01-06 12:01:58 +0000126void fu_common_dump_full (const gchar *log_domain,
127 const gchar *title,
128 const guint8 *data,
129 gsize len,
130 guint columns,
131 FuDumpFlags flags);
Richard Hughese59cb9a2018-12-05 14:37:40 +0000132void fu_common_dump_bytes (const gchar *log_domain,
133 const gchar *title,
134 GBytes *bytes);
Richard Hughesfc90f392019-01-15 21:21:16 +0000135GBytes *fu_common_bytes_align (GBytes *bytes,
136 gsize blksz,
137 gchar padval);
Richard Hughes36999462019-03-19 20:23:29 +0000138gboolean fu_common_bytes_is_empty (GBytes *bytes);
Richard Hughes2aad1042019-03-21 09:03:32 +0000139gboolean fu_common_bytes_compare (GBytes *bytes1,
140 GBytes *bytes2,
141 GError **error);
Richard Hughes38245ff2019-09-18 14:46:09 +0100142gboolean fu_common_bytes_compare_raw (const guint8 *buf1,
143 gsize bufsz1,
144 const guint8 *buf2,
145 gsize bufsz2,
146 GError **error);
Richard Hughes7afd7cb2019-08-07 11:42:42 +0100147GBytes *fu_common_bytes_pad (GBytes *bytes,
148 gsize sz);
Richard Hughesae96a1f2019-09-23 11:16:36 +0100149gsize fu_common_strwidth (const gchar *text);
Richard Hughes5308ea42019-08-09 12:25:13 +0100150gboolean fu_memcpy_safe (guint8 *dst,
151 gsize dst_sz,
152 gsize dst_offset,
153 const guint8 *src,
154 gsize src_sz,
155 gsize src_offset,
156 gsize n,
157 GError **error);
Richard Hughesc21a0b92019-10-24 12:24:37 +0100158gboolean fu_common_read_uint8_safe (const guint8 *buf,
159 gsize bufsz,
160 gsize offset,
161 guint8 *value,
162 GError **error);
Richard Hughes80768f52019-10-22 07:19:14 +0100163gboolean fu_common_read_uint16_safe (const guint8 *buf,
164 gsize bufsz,
165 gsize offset,
166 guint16 *value,
167 FuEndianType endian,
168 GError **error);
169gboolean fu_common_read_uint32_safe (const guint8 *buf,
170 gsize bufsz,
171 gsize offset,
172 guint32 *value,
173 FuEndianType endian,
174 GError **error);
Richard Hughes943d2c92017-06-21 09:04:39 +0100175
Richard Hughes37c6a7b2019-08-14 21:57:43 +0100176void fu_byte_array_append_uint8 (GByteArray *array,
177 guint8 data);
178void fu_byte_array_append_uint16 (GByteArray *array,
179 guint16 data,
180 FuEndianType endian);
181void fu_byte_array_append_uint32 (GByteArray *array,
182 guint32 data,
183 FuEndianType endian);
Richard Hughesae252cd2017-12-08 10:48:15 +0000184
185void fu_common_write_uint16 (guint8 *buf,
186 guint16 val_native,
187 FuEndianType endian);
188void fu_common_write_uint32 (guint8 *buf,
189 guint32 val_native,
190 FuEndianType endian);
191guint16 fu_common_read_uint16 (const guint8 *buf,
192 FuEndianType endian);
193guint32 fu_common_read_uint32 (const guint8 *buf,
194 FuEndianType endian);
195
Richard Hughes83e56c12018-10-10 20:24:41 +0100196guint fu_common_string_replace (GString *string,
197 const gchar *search,
198 const gchar *replace);
Richard Hughescea28de2019-08-09 11:16:40 +0100199void fu_common_string_append_kv (GString *str,
Richard Hughes6e3e62b2019-08-14 10:43:08 +0100200 guint idt,
Richard Hughescea28de2019-08-09 11:16:40 +0100201 const gchar *key,
202 const gchar *value);
Richard Hughes6e3e62b2019-08-14 10:43:08 +0100203void fu_common_string_append_ku (GString *str,
204 guint idt,
205 const gchar *key,
206 guint64 value);
207void fu_common_string_append_kx (GString *str,
208 guint idt,
209 const gchar *key,
210 guint64 value);
211void fu_common_string_append_kb (GString *str,
212 guint idt,
213 const gchar *key,
214 gboolean value);
Richard Hughes7afd7cb2019-08-07 11:42:42 +0100215gchar **fu_common_strnsplit (const gchar *str,
216 gsize sz,
217 const gchar *delimiter,
218 gint max_tokens);
Mario Limonciello9dce1f72020-02-04 09:12:52 -0600219gboolean fu_common_kernel_locked_down (void);