aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2021-07-12 18:39:06 +0000
committerRichard Henderson <richard.henderson@linaro.org>2021-07-26 07:06:49 -1000
commit53645dc4cb7b74db3507558c01612c3e5ea430ab (patch)
treeabbdb773a64edd890fc35bb3378bacda178cce48 /util
parent2521c775bdfc8150396c4cb173b54d51f44c207e (diff)
util/selfmap: Discard mapping on error
From clang-13: util/selfmap.c:26:21: error: variable 'errors' set but not used \ [-Werror,-Wunused-but-set-variable] Quite right of course, but there's no reason not to check errors. First, incrementing errors is incorrect, because qemu_strtoul returns an errno not a count -- just or them together so that we have a non-zero value at the end. Second, if we have an error, do not add the struct to the list, but free it instead. Cc: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'util')
-rw-r--r--util/selfmap.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/util/selfmap.c b/util/selfmap.c
index 2ec99dfdda..2c14f019ce 100644
--- a/util/selfmap.c
+++ b/util/selfmap.c
@@ -23,29 +23,34 @@ GSList *read_self_maps(void)
gchar **fields = g_strsplit(lines[i], " ", 6);
if (g_strv_length(fields) > 4) {
MapInfo *e = g_new0(MapInfo, 1);
- int errors;
+ int errors = 0;
const char *end;
- errors = qemu_strtoul(fields[0], &end, 16, &e->start);
- errors += qemu_strtoul(end + 1, NULL, 16, &e->end);
+ errors |= qemu_strtoul(fields[0], &end, 16, &e->start);
+ errors |= qemu_strtoul(end + 1, NULL, 16, &e->end);
e->is_read = fields[1][0] == 'r';
e->is_write = fields[1][1] == 'w';
e->is_exec = fields[1][2] == 'x';
e->is_priv = fields[1][3] == 'p';
- errors += qemu_strtoul(fields[2], NULL, 16, &e->offset);
+ errors |= qemu_strtoul(fields[2], NULL, 16, &e->offset);
e->dev = g_strdup(fields[3]);
- errors += qemu_strtou64(fields[4], NULL, 10, &e->inode);
+ errors |= qemu_strtou64(fields[4], NULL, 10, &e->inode);
- /*
- * The last field may have leading spaces which we
- * need to strip.
- */
- if (g_strv_length(fields) == 6) {
- e->path = g_strdup(g_strchug(fields[5]));
+ if (!errors) {
+ /*
+ * The last field may have leading spaces which we
+ * need to strip.
+ */
+ if (g_strv_length(fields) == 6) {
+ e->path = g_strdup(g_strchug(fields[5]));
+ }
+ map_info = g_slist_prepend(map_info, e);
+ } else {
+ g_free(e->dev);
+ g_free(e);
}
- map_info = g_slist_prepend(map_info, e);
}
g_strfreev(fields);