/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "dissect-image.h" #include "fd-util.h" #include "fdisk-util.h" #if HAVE_LIBFDISK int fdisk_new_context_fd( int fd, bool read_only, uint32_t sector_size, struct fdisk_context **ret) { _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL; int r; assert(ret); if (fd < 0) return -EBADF; c = fdisk_new_context(); if (!c) return -ENOMEM; if (sector_size == UINT32_MAX) { r = probe_sector_size_prefer_ioctl(fd, §or_size); if (r < 0) return r; } if (sector_size != 0) { r = fdisk_save_user_sector_size(c, /* phy= */ 0, sector_size); if (r < 0) return r; } r = fdisk_assign_device(c, FORMAT_PROC_FD_PATH(fd), read_only); if (r < 0) return r; *ret = TAKE_PTR(c); return 0; } int fdisk_partition_get_uuid_as_id128(struct fdisk_partition *p, sd_id128_t *ret) { const char *ids; assert(p); assert(ret); ids = fdisk_partition_get_uuid(p); if (!ids) return -ENXIO; return sd_id128_from_string(ids, ret); } int fdisk_partition_get_type_as_id128(struct fdisk_partition *p, sd_id128_t *ret) { struct fdisk_parttype *pt; const char *pts; assert(p); assert(ret); pt = fdisk_partition_get_type(p); if (!pt) return -ENXIO; pts = fdisk_parttype_get_string(pt); if (!pts) return -ENXIO; return sd_id128_from_string(pts, ret); } #endif