mirror of
https://git.proxmox.com/git/fwupd
synced 2025-12-24 22:41:14 +00:00
There are two reasons for this. First is that GKeyFile is quite inefficient,
using a large amount of heap memory when loading. Given we don't actually use
the merge and replace functionality of GKeyFile and we only need line-by-line
access we can parse this ourselves and reduce the peak RSS considerably.
This also accidentally fixes another bug. Moving from multiple quirk files to
a single builtin.quirk meant that multiple subsystem plugins were deduped --
which isn't really what we wanted. For example, this now works:
[MEI]
Plugin = one
[MEI]
Plugin = two
|
||
|---|---|---|
| .. | ||
| tests | ||
| fu-archive-firmware.c | ||
| fu-archive-firmware.h | ||
| fu-archive.c | ||
| fu-archive.h | ||
| fu-backend-private.h | ||
| fu-backend.c | ||
| fu-backend.h | ||
| fu-bios-settings-private.h | ||
| fu-bios-settings.c | ||
| fu-bios-settings.h | ||
| fu-bluez-device.c | ||
| fu-bluez-device.h | ||
| fu-byte-array.c | ||
| fu-byte-array.h | ||
| fu-bytes.c | ||
| fu-bytes.h | ||
| fu-cabinet.c | ||
| fu-cabinet.h | ||
| fu-cfi-device.c | ||
| fu-cfi-device.h | ||
| fu-cfu-common.c | ||
| fu-cfu-common.h | ||
| fu-cfu-offer.c | ||
| fu-cfu-offer.h | ||
| fu-cfu-payload.c | ||
| fu-cfu-payload.h | ||
| fu-chunk-private.h | ||
| fu-chunk.c | ||
| fu-chunk.h | ||
| fu-common-darwin.c | ||
| fu-common-freebsd.c | ||
| fu-common-guid.c | ||
| fu-common-guid.h | ||
| fu-common-linux.c | ||
| fu-common-private.h | ||
| fu-common-windows.c | ||
| fu-common.c | ||
| fu-common.h | ||
| fu-context-private.h | ||
| fu-context.c | ||
| fu-context.h | ||
| fu-coswid-common.c | ||
| fu-coswid-common.h | ||
| fu-coswid-firmware.c | ||
| fu-coswid-firmware.h | ||
| fu-crc.c | ||
| fu-crc.h | ||
| fu-deprecated.h | ||
| fu-device-locker.c | ||
| fu-device-locker.h | ||
| fu-device-metadata.h | ||
| fu-device-private.h | ||
| fu-device.c | ||
| fu-device.h | ||
| fu-dfu-firmware-private.h | ||
| fu-dfu-firmware.c | ||
| fu-dfu-firmware.h | ||
| fu-dfuse-firmware.c | ||
| fu-dfuse-firmware.h | ||
| fu-dump.c | ||
| fu-dump.h | ||
| fu-efi-common.c | ||
| fu-efi-common.h | ||
| fu-efi-firmware-common.c | ||
| fu-efi-firmware-common.h | ||
| fu-efi-firmware-file.c | ||
| fu-efi-firmware-file.h | ||
| fu-efi-firmware-filesystem.c | ||
| fu-efi-firmware-filesystem.h | ||
| fu-efi-firmware-section.c | ||
| fu-efi-firmware-section.h | ||
| fu-efi-firmware-volume.c | ||
| fu-efi-firmware-volume.h | ||
| fu-efi-signature-list.c | ||
| fu-efi-signature-list.h | ||
| fu-efi-signature-private.h | ||
| fu-efi-signature.c | ||
| fu-efi-signature.h | ||
| fu-efivar-darwin.c | ||
| fu-efivar-freebsd.c | ||
| fu-efivar-impl.h | ||
| fu-efivar-linux.c | ||
| fu-efivar-windows.c | ||
| fu-efivar.c | ||
| fu-efivar.h | ||
| fu-fdt-firmware.c | ||
| fu-fdt-firmware.h | ||
| fu-fdt-image.c | ||
| fu-fdt-image.h | ||
| fu-firmware-common.c | ||
| fu-firmware-common.h | ||
| fu-firmware.c | ||
| fu-firmware.h | ||
| fu-fit-firmware.c | ||
| fu-fit-firmware.h | ||
| fu-fmap-firmware.c | ||
| fu-fmap-firmware.h | ||
| fu-fuzzer-firmware.c.in | ||
| fu-fuzzer-main.c | ||
| fu-hid-device.c | ||
| fu-hid-device.h | ||
| fu-hwids.c | ||
| fu-hwids.h | ||
| fu-i2c-device.c | ||
| fu-i2c-device.h | ||
| fu-ifd-bios.c | ||
| fu-ifd-bios.h | ||
| fu-ifd-common.c | ||
| fu-ifd-common.h | ||
| fu-ifd-firmware.c | ||
| fu-ifd-firmware.h | ||
| fu-ifd-image.c | ||
| fu-ifd-image.h | ||
| fu-ifwi-cpd-firmware.c | ||
| fu-ifwi-cpd-firmware.h | ||
| fu-ifwi-fpt-firmware.c | ||
| fu-ifwi-fpt-firmware.h | ||
| fu-ihex-firmware.c | ||
| fu-ihex-firmware.h | ||
| fu-intel-thunderbolt-firmware.c | ||
| fu-intel-thunderbolt-firmware.h | ||
| fu-intel-thunderbolt-nvm.c | ||
| fu-intel-thunderbolt-nvm.h | ||
| fu-io-channel.c | ||
| fu-io-channel.h | ||
| fu-kenv.c | ||
| fu-kenv.h | ||
| fu-kernel.c | ||
| fu-kernel.h | ||
| fu-linear-firmware.c | ||
| fu-linear-firmware.h | ||
| fu-mei-device.c | ||
| fu-mei-device.h | ||
| fu-mem.c | ||
| fu-mem.h | ||
| fu-mutex.h | ||
| fu-oprom-firmware.c | ||
| fu-oprom-firmware.h | ||
| fu-path-private.h | ||
| fu-path.c | ||
| fu-path.h | ||
| fu-plugin-private.h | ||
| fu-plugin-vfuncs.h | ||
| fu-plugin.c | ||
| fu-plugin.h | ||
| fu-progress.c | ||
| fu-progress.h | ||
| fu-quirks.c | ||
| fu-quirks.h | ||
| fu-security-attr.c | ||
| fu-security-attr.h | ||
| fu-security-attrs-private.h | ||
| fu-security-attrs.c | ||
| fu-security-attrs.h | ||
| fu-self-test.c | ||
| fu-smbios-private.h | ||
| fu-smbios.c | ||
| fu-smbios.h | ||
| fu-srec-firmware.c | ||
| fu-srec-firmware.h | ||
| fu-string.c | ||
| fu-string.h | ||
| fu-sum.c | ||
| fu-sum.h | ||
| fu-udev-device-private.h | ||
| fu-udev-device.c | ||
| fu-udev-device.h | ||
| fu-usb-device-ds20.c | ||
| fu-usb-device-ds20.h | ||
| fu-usb-device-fw-ds20.c | ||
| fu-usb-device-fw-ds20.h | ||
| fu-usb-device-ms-ds20.c | ||
| fu-usb-device-ms-ds20.h | ||
| fu-usb-device-private.h | ||
| fu-usb-device.c | ||
| fu-usb-device.h | ||
| fu-uswid-firmware.c | ||
| fu-uswid-firmware.h | ||
| fu-version-common.c | ||
| fu-version-common.h | ||
| fu-version.c | ||
| fu-version.h.in | ||
| fu-volume-private.h | ||
| fu-volume.c | ||
| fu-volume.h | ||
| fwupdplugin.h | ||
| fwupdplugin.map | ||
| meson.build | ||
| README.md | ||
libfwupdplugin
This library is only partially API and ABI stable. Keeping unused, unsafe and deprecated functions around forever is a maintenance burden and so symbols are removed when branching for new minor versions.
Use ./contrib/migrate.py to migrate up out-of-tree plugins to the new API.
Remember: Plugins should be upstream!
1.5.5
fu_common_is_cpu_intel(): Usefu_common_get_cpu_vendor()instead.fu_firmware_strparse_uintXX(): Usefu_firmware_strparse_uintXX_safe()instead.fu_plugin_get_usb_context(): Remove, as no longer required.fu_plugin_set_usb_context(): Remove, as no longer required.fu_plugin_runner_usb_device_added(): Usefu_plugin_runner_backend_device_added()instead.fu_plugin_runner_udev_device_added(): Usefu_plugin_runner_backend_device_added()instead.fu_plugin_runner_udev_device_changed(): Usefu_plugin_runner_backend_device_added()instead.FuHidDevice->open(): Use theFuDevicesuperclass instead.FuHidDevice->close(): Use theFuDevicesuperclass instead.FuUsbDevice->probe(): Use theFuDevicesuperclass instead.FuUsbDevice->open(): Use theFuDevicesuperclass instead.FuUsbDevice->close(): Use theFuDevicesuperclass instead.FuUdevDevice->to_string(): Use theFuDevicesuperclass instead.FuUdevDevice->probe(): Use theFuDevicesuperclass instead.FuUdevDevice->open(): Use theFuDevicesuperclass instead.FuUdevDevice->close(): Use theFuDevicesuperclass instead.
1.5.6
fu_device_get_protocol(): Usefu_device_get_protocols()instead.fu_device_set_protocol(): Usefu_device_add_protocol()instead.
1.6.2
fu_device_has_custom_flag(): Usefu_device_has_private_flag()instead.
1.6.3
fu_device_sleep_with_progress(): Usefu_progress_sleep()instead -- but be aware the unit of time has changed from seconds to milliseconds.fu_device_get_status(): Usefu_progress_get_status()instead.fu_device_set_status(): Usefu_progress_set_status()instead.fu_device_get_progress(): Usefu_progress_get_percentage()instead.fu_device_set_progress_full(): Usefu_progress_set_percentage_full()instead.fu_device_set_progress(): Usefu_progress_set_steps(),fu_progress_add_step()andfu_progress_done()-- see theFuProgressdocs for more details!
1.8.2
fu_udev_device_pread_full(): Usefu_udev_device_pread()instead -- as the latter now specifies the buffer length.fu_udev_device_pread_full(): Usefu_udev_device_pwrite()instead -- as the latter now specifies the buffer length.fu_udev_device_ioctl_full(): Usefu_udev_device_ioctl()instead -- as the latter now always specifies the timeout.fu_udev_device_new_full(): Usefu_udev_device_new()instead -- as the latter always specifies the context.fu_usb_device_new_full(): Usefu_usb_device_new()instead -- as the latter always specifies the context.fu_device_new_with_context(): Usefu_device_new()instead -- as the latter always specifies the context.fu_plugin_has_custom_flag(): Usefu_plugin_has_private_flag()instead.fu_efivar_secure_boot_enabled_full(): Usefu_efivar_secure_boot_enabled()instead -- as the latter always specifies the error.fu_progress_add_step(): Add a 4th parameter to the function to specify the nice name for the step, or NULL.fu_backend_setup(): Now requires aFuProgress, although it can be ignored.fu_backend_coldplug: Now requires aFuProgress, although it can be ignored.FuPluginVfuncs->setup: Now requires aFuProgress, although it can be ignored.FuPluginVfuncs->coldplug: Now requires aFuProgress, although it can be ignored.fu_common_crc*: Usefu_crcprefix, i.e. remove the_commonfu_common_sum*: Usefu_sumprefix, i.e. remove the_commonfu_byte_array_set_size_full(): Usefu_byte_array_set_sizeinstead -- as the latter now always specifies the fill char.fu_common_string*: Usefu_stringprefix, i.e. remove the_commonfu_common_bytes*: Usefu_bytesprefix, i.e. remove the_commonfu_common_set_contents_bytes(): Usefu_bytes_set_contents()insteadfu_common_get_contents_bytes(): Usefu_bytes_get_contents()insteadfu_common_read*: Usefu_memreadprefix, i.e. replace the_commonwith_memfu_common_write*: Usefu_memwriteprefix, i.e. replace the_commonwith_memfu_common_bytes_compare_raw(): Usefu_memcmp_safe()insteadfu_common_spawn_sync(): Useg_spawn_sync()instead, or ideally not at all!fu_common_extract_archive(): UseFuArchiveFirmware()instead.fu_common_instance_id_strsafe(): Usefu_device_add_instance_strsafe()instead.fu_common_kernel_locked_down(): Usefu_kernel_locked_downinstead.fu_common_check_kernel_version(): Usefu_kernel_check_versioninstead.fu_common_get_firmware_search_path(): Usefu_kernel_get_firmware_search_pathinstead.fu_common_set_firmware_search_path(): Usefu_kernel_set_firmware_search_pathinstead.fu_common_reset_firmware_search_path(): Usefu_kernel_reset_firmware_search_pathinstead.fu_common_firmware_builder(): You should not be using this.fu_common_realpath(): You should not be using this.fu_common_uri_get_scheme(): You should not be using this.fu_common_dump*: Usefu_dumpprefix, i.e. remove the_commonfu_common_error_array_get_best(): You should not be using this.fu_common_cpuid(): Usefu_cpuidinstead.fu_common_get_cpu_vendor(): Usefu_cpu_get_vendorinstead.fu_common_vercmp_full(): Usefu_version_compare()instead.fu_common_version_ensure_semver(): Usefu_version_ensure_semver()instead.fu_common_version_from_uint*(): Usefu_version_from_uint*()instead.fu_common_strtoull(): Usefu_strtoull()instead -- as the latter always specifies the error.fu_smbios_to_string(): Usefu_firmware_to_string()instead -- asFuSmbiosis aFuFirmwaresuperclass.fu_common_cab_build_silo(): You should not be using this.fu_i2c_device_read_full(): Usefu_i2c_device_readinstead.fu_i2c_device_write_full(): Usefu_i2c_device_writeinstead.fu_firmware_parse_full(): Remove theaddr_endparameter, and ensure thatoffsetis agsize.
1.8.5
fu_volume_new_esp_default(): Usefu_context_get_esp_volumes()instead.fu_plugin_set_secure_config_value(): SetFWUPD_PLUGIN_FLAG_SECURE_CONFIGand usefu_plugin_set_config_value()
1.8.7
fu_mei_device_connect(): Drop the explicit GUID parameter and match in the quirk file instead.