summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-06-20 06:51:34 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-06-20 06:51:34 +0900
commit31a9be2372eeef7357dc8c2fd95b1e96305c107d (patch)
treec227240125771968cafe3be0bba231e212b49787
parentfe2e4b6961259012908df919b285c371bc0c557f (diff)
downloadsystemd-31a9be2372eeef7357dc8c2fd95b1e96305c107d.tar.gz
util: use extract_first_word() instead of strsep()
-rw-r--r--src/basic/cgroup-util.c32
-rw-r--r--src/basic/virt.c26
2 files changed, 36 insertions, 22 deletions
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index e6a8b0e0fb..156a360885 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -91,10 +91,9 @@ int cg_read_event(
const char *controller,
const char *path,
const char *event,
- char **val) {
+ char **ret) {
_cleanup_free_ char *events = NULL, *content = NULL;
- char *p, *line;
int r;
r = cg_get_path(controller, path, "cgroup.events", &events);
@@ -105,22 +104,33 @@ int cg_read_event(
if (r < 0)
return r;
- p = content;
- while ((line = strsep(&p, "\n"))) {
- char *key;
+ for (const char *p = content;;) {
+ _cleanup_free_ char *line = NULL, *key = NULL, *val = NULL;
+ const char *q;
- key = strsep(&line, " ");
- if (!key || !line)
+ r = extract_first_word(&p, &line, "\n", 0);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ return -ENOENT;
+
+ q = line;
+ r = extract_first_word(&q, &key, " ", 0);
+ if (r < 0)
+ return r;
+ if (r == 0)
return -EINVAL;
- if (strcmp(key, event))
+ if (!streq(key, event))
continue;
- *val = strdup(line);
+ val = strdup(q);
+ if (!val)
+ return -ENOMEM;
+
+ *ret = TAKE_PTR(val);
return 0;
}
-
- return -ENOENT;
}
bool cg_ns_supported(void) {
diff --git a/src/basic/virt.c b/src/basic/virt.c
index 84b2d64b25..7a7400773b 100644
--- a/src/basic/virt.c
+++ b/src/basic/virt.c
@@ -198,7 +198,6 @@ static int detect_vm_xen(void) {
/* Returns -errno, or 0 for domU, or 1 for dom0 */
static int detect_vm_xen_dom0(void) {
_cleanup_free_ char *domcap = NULL;
- char *cap, *i;
int r;
r = read_one_line_file(PATH_FEATURES, &domcap);
@@ -229,17 +228,22 @@ static int detect_vm_xen_dom0(void) {
if (r < 0)
return r;
- i = domcap;
- while ((cap = strsep(&i, ",")))
- if (streq(cap, "control_d"))
- break;
- if (!cap) {
- log_debug("Virtualization XEN DomU found (/proc/xen/capabilities)");
- return 0;
- }
+ for (const char *i = domcap;;) {
+ _cleanup_free_ char *cap = NULL;
- log_debug("Virtualization XEN Dom0 ignored (/proc/xen/capabilities)");
- return 1;
+ r = extract_first_word(&i, &cap, ",", 0);
+ if (r < 0)
+ return r;
+ if (r == 0) {
+ log_debug("Virtualization XEN DomU found (/proc/xen/capabilities)");
+ return 0;
+ }
+
+ if (streq(cap, "control_d")) {
+ log_debug("Virtualization XEN Dom0 ignored (/proc/xen/capabilities)");
+ return 1;
+ }
+ }
}
static int detect_vm_hypervisor(void) {