From 74235f6d085bd9a7bc5068287fb18dfa6dd39d49 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sep 22 2022 12:16:57 +0000 Subject: shared: Add specifier_id128() and specifier_uuid() --- diff --git a/src/shared/specifier.c b/src/shared/specifier.c index 0742fae..a49b16b 100644 --- a/src/shared/specifier.c +++ b/src/shared/specifier.c @@ -151,9 +151,32 @@ int specifier_real_directory(char specifier, const void *data, const char *root, return path_extract_directory(path, ret); } +int specifier_id128(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + const sd_id128_t *id = ASSERT_PTR(data); + char *n; + + n = new(char, SD_ID128_STRING_MAX); + if (!n) + return -ENOMEM; + + *ret = sd_id128_to_string(*id, n); + return 0; +} + +int specifier_uuid(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + const sd_id128_t *id = ASSERT_PTR(data); + char *n; + + n = new(char, SD_ID128_UUID_STRING_MAX); + if (!n) + return -ENOMEM; + + *ret = sd_id128_to_uuid_string(*id, n); + return 0; +} + int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { sd_id128_t id; - char *n; int r; assert(ret); @@ -172,17 +195,11 @@ int specifier_machine_id(char specifier, const void *data, const char *root, con if (r < 0) return r; - n = new(char, SD_ID128_STRING_MAX); - if (!n) - return -ENOMEM; - - *ret = sd_id128_to_string(id, n); - return 0; + return specifier_id128(specifier, &id, root, userdata, ret); } int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { sd_id128_t id; - char *n; int r; assert(ret); @@ -191,12 +208,7 @@ int specifier_boot_id(char specifier, const void *data, const char *root, const if (r < 0) return r; - n = new(char, SD_ID128_STRING_MAX); - if (!n) - return -ENOMEM; - - *ret = sd_id128_to_string(id, n); - return 0; + return specifier_id128(specifier, &id, root, userdata, ret); } int specifier_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) { diff --git a/src/shared/specifier.h b/src/shared/specifier.h index abde3d9..a245e54 100644 --- a/src/shared/specifier.h +++ b/src/shared/specifier.h @@ -16,6 +16,8 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_real_path(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_real_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_id128(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_uuid(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret);