From: Eugene Syromiatnikov Date: Wed, 13 Dec 2017 12:52:59 +0000 (+0100) Subject: pathtrace.c: use xgrowarray X-Git-Tag: v4.21~261 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfbfdf5e37eed3bdd95bb2e7cc715519c3023e52;p=strace pathtrace.c: use xgrowarray * defs.h : Change type of num_selected field to size_t. Add size field. * pathtrace.c (storepath): Rewrite to utilise xgrowarray. --- diff --git a/defs.h b/defs.h index 867f1f68..afb2cb0b 100644 --- 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; diff --git a/pathtrace.c b/pathtrace.c index 52582380..3e4f5f8e 100644 --- a/pathtrace.c +++ b/pathtrace.c @@ -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; } /*