sd-device: allow to read sysattr which contains embedded NUL

This effectively reverts the commit 2a394d0bf2.

But drop trailing '\r' of the read value, as sd_device_set_sysattr_value() drops it.

Fixes #20025.
This commit is contained in:
Yu Watanabe
2021-06-26 10:48:28 +09:00
parent 2e9ee9cf15
commit 70160c6eee
+7 -3
View File
@@ -2022,13 +2022,17 @@ _public_ int sd_device_get_sysattr_value(sd_device *device, const char *sysattr,
/* skip non-readable files */
return -EPERM;
else {
/* read attribute value */
r = read_full_virtual_file(path, &value, NULL);
size_t size;
/* Read attribute value, Some attributes contain embedded '\0'. So, it is necessary to
* also get the size of the result. See issue #20025. */
r = read_full_virtual_file(path, &value, &size);
if (r < 0)
return r;
/* drop trailing newlines */
delete_trailing_chars(value, "\n");
while (size > 0 && strchr(NEWLINE, value[--size]))
value[size] = '\0';
}
/* Unfortunately, we need to return 'const char*' instead of 'char*'. Hence, failure in caching