1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-08 20:58:20 +03:00

sd-device: change type of properties nulstr from uint8_t* to char*

This commit is contained in:
Yu Watanabe 2022-06-24 13:00:34 +09:00
parent 9d9fd4ad0a
commit cff31876da
5 changed files with 21 additions and 24 deletions

View File

@ -55,7 +55,7 @@ struct sd_device {
dev_t devnum;
char **properties_strv; /* the properties hashmap as a strv */
uint8_t *properties_nulstr; /* the same as a nulstr */
char *properties_nulstr; /* the same as a nulstr */
size_t properties_nulstr_len;
char *syspath;

View File

@ -508,7 +508,7 @@ int device_monitor_receive_device(sd_device_monitor *m, sd_device **ret) {
"sd-device-monitor: Invalid message header");
}
r = device_new_from_nulstr(&device, (uint8_t*) &buf.raw[bufpos], buflen - bufpos);
r = device_new_from_nulstr(&device, &buf.raw[bufpos], buflen - bufpos);
if (r < 0)
return log_debug_errno(r, "sd-device-monitor: Failed to create device from received message: %m");
@ -574,7 +574,7 @@ int device_monitor_send_device(
assert(m);
assert(device);
r = device_get_properties_nulstr(device, (const uint8_t **) &buf, &blen);
r = device_get_properties_nulstr(device, &buf, &blen);
if (r < 0)
return log_device_debug_errno(device, r, "sd-device-monitor: Failed to get device properties: %m");
if (blen < 32)

View File

@ -467,7 +467,7 @@ int device_new_from_strv(sd_device **ret, char **strv) {
return 0;
}
int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
int device_new_from_nulstr(sd_device **ret, char *nulstr, size_t len) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
const char *major = NULL, *minor = NULL;
int r;
@ -484,7 +484,7 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
char *key;
const char *end;
key = (char*) &nulstr[i];
key = nulstr + i;
end = memchr(key, '\0', len - i);
if (!end)
return log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL),
@ -517,10 +517,9 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
}
static int device_update_properties_bufs(sd_device *device) {
_cleanup_free_ char **buf_strv = NULL, *buf_nulstr = NULL;
size_t nulstr_len = 0, num = 0;
const char *val, *prop;
_cleanup_free_ char **buf_strv = NULL;
_cleanup_free_ uint8_t *buf_nulstr = NULL;
size_t nulstr_len = 0, num = 0, i = 0;
assert(device);
@ -536,32 +535,31 @@ static int device_update_properties_bufs(sd_device *device) {
if (!buf_nulstr)
return -ENOMEM;
strscpyl((char *)buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL);
strscpyl(buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL);
nulstr_len += len + 1;
++num;
num++;
}
/* build buf_strv from buf_nulstr */
buf_strv = new0(char *, num + 1);
buf_strv = new0(char*, num + 1);
if (!buf_strv)
return -ENOMEM;
NULSTR_FOREACH(val, (char*) buf_nulstr) {
buf_strv[i] = (char *) val;
assert(i < num);
i++;
}
size_t i = 0;
char *p;
NULSTR_FOREACH(p, buf_nulstr)
buf_strv[i++] = p;
assert(i == num);
free_and_replace(device->properties_nulstr, buf_nulstr);
device->properties_nulstr_len = nulstr_len;
free_and_replace(device->properties_strv, buf_strv);
device->properties_buf_outdated = false;
return 0;
}
int device_get_properties_nulstr(sd_device *device, const uint8_t **nulstr, size_t *len) {
int device_get_properties_nulstr(sd_device *device, const char **nulstr, size_t *len) {
int r;
assert(device);

View File

@ -10,7 +10,7 @@
#include "macro.h"
int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len);
int device_new_from_nulstr(sd_device **ret, char *nulstr, size_t len);
int device_new_from_strv(sd_device **ret, char **strv);
int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd);
static inline int device_new_from_watch_handle(sd_device **ret, int wd) {
@ -48,7 +48,7 @@ uint64_t device_get_tags_generation(sd_device *device);
uint64_t device_get_devlinks_generation(sd_device *device);
int device_properties_prepare(sd_device *device);
int device_get_properties_nulstr(sd_device *device, const uint8_t **nulstr, size_t *len);
int device_get_properties_nulstr(sd_device *device, const char **nulstr, size_t *len);
int device_get_properties_strv(sd_device *device, char ***strv);
int device_rename(sd_device *device, const char *name);

View File

@ -320,9 +320,8 @@ TEST(sd_device_new_from_nulstr) {
"\0";
_cleanup_(sd_device_unrefp) sd_device *device = NULL, *from_nulstr = NULL;
_cleanup_free_ uint8_t *nulstr_copy = NULL;
const char *devlink;
const uint8_t *nulstr;
_cleanup_free_ char *nulstr_copy = NULL;
const char *devlink, *nulstr;
size_t len;
assert_se(sd_device_new_from_syspath(&device, "/sys/class/net/lo") >= 0);
@ -340,7 +339,7 @@ TEST(sd_device_new_from_nulstr) {
assert_se(device_add_property_internal(device, "ACTION", "change") >= 0);
assert_se(device_get_properties_nulstr(device, &nulstr, &len) >= 0);
assert_se(nulstr_copy = newdup(uint8_t, nulstr, len));
assert_se(nulstr_copy = newdup(char, nulstr, len));
assert_se(device_new_from_nulstr(&from_nulstr, nulstr_copy, len) >= 0);
NULSTR_FOREACH(devlink, devlinks) {