]> granicus.if.org Git - strace/commitdiff
pathtrace.c: use xgrowarray
authorEugene Syromiatnikov <esyr@redhat.com>
Wed, 13 Dec 2017 12:52:59 +0000 (13:52 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 20 Dec 2017 22:58:42 +0000 (22:58 +0000)
* defs.h <struct path_set>: Change type of num_selected field to size_t.
Add size field.
* pathtrace.c (storepath): Rewrite to utilise xgrowarray.

defs.h
pathtrace.c

diff --git a/defs.h b/defs.h
index 867f1f680ba4c4ffe39199db08b5d7db4455dd91..afb2cb0b3e10c1c2b3d0bf76b22b6b156d58c871 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -364,7 +364,8 @@ extern unsigned int show_fd_path;
 /* are we filtering traces based on paths? */
 extern struct path_set {
        const char **paths_selected;
-       unsigned int num_selected;
+       size_t num_selected;
+       size_t size;
 } global_path_set;
 #define tracing_paths (global_path_set.num_selected != 0)
 extern unsigned xflag;
index 52582380bb0171da5d0a171f836d379a0bc669df..3e4f5f8e14a51118a86a36addff7774d624e4e3e 100644 (file)
@@ -82,16 +82,15 @@ fdmatch(struct tcb *tcp, int fd, struct path_set *set)
 static void
 storepath(const char *path, struct path_set *set)
 {
-       unsigned i;
-
        if (pathmatch(path, set))
                return; /* already in table */
 
-       i = set->num_selected++;
-       set->paths_selected = xreallocarray(set->paths_selected,
-                                           set->num_selected,
-                                           sizeof(set->paths_selected[0]));
-       set->paths_selected[i] = path;
+       if (set->num_selected >= set->size)
+               set->paths_selected =
+                       xgrowarray(set->paths_selected, &set->size,
+                                  sizeof(set->paths_selected[0]));
+
+       set->paths_selected[set->num_selected++] = path;
 }
 
 /*