On Thu, Dec 7, 2017 at 5:42 PM, Aníbal Limón <limon.ani...@gmail.com> wrote:
> From: Aníbal Limón <anibal.li...@linaro.org> > > In some ptest packages exists symlink in the ptest directory causing > to load/run twice the same ptest, > > For example in perl5: > > /usr/lib/perl -> /usr/lib/perl5 > > Signed-off-by: Aníbal Limón <anibal.li...@linaro.org> > --- > ptest_list.c | 40 ++++++++++++++++++++++++++++++++++++++++ > ptest_list.h | 3 +++ > tests/data/python3 | 1 + > tests/utils.c | 1 + > utils.c | 6 ++++++ > 5 files changed, 51 insertions(+) > create mode 120000 tests/data/python3 > > diff --git a/ptest_list.c b/ptest_list.c > index 2e1aa30..3e393d5 100644 > --- a/ptest_list.c > +++ b/ptest_list.c > @@ -110,6 +110,46 @@ ptest_list_search(struct ptest_list *head, char > *ptest) > return q; > } > > + > +struct ptest_list * > +ptest_list_search_by_file(struct ptest_list *head, char *run_ptest, > struct stat st_buf) > +{ > + struct ptest_list *q = NULL; > + struct ptest_list *p; > + struct stat st_buf_p; > + > + VALIDATE_PTR_RNULL(head); > + VALIDATE_PTR_RNULL(run_ptest); > + > + for (p = head; p != NULL; p = p->next) { > + if (p->ptest == NULL) > + continue; > + > + if (stat(p->run_ptest, &st_buf_p) == -1) > + continue; > + > + if (strcmp(p->run_ptest, run_ptest) == 0) { > + q = p; > + break; > + } > + > + /* * > + * In some ptest packages exists symlink in the ptest > directory > + * causing to load/run twice the same ptest, > + * > + * For example in perl5: > + * /usr/lib/perl -> /usr/lib/perl5 > + * */ > + if (st_buf.st_dev == st_buf_p.st_dev && > + st_buf.st_ino == st_buf_p.st_ino) { > + q = p; > + break; > + } > + } > + > + return q; > +} > + > struct ptest_list * > ptest_list_add(struct ptest_list *head, char *ptest, char *run_ptest) > { > diff --git a/ptest_list.h b/ptest_list.h > index 8b39485..03d7539 100644 > --- a/ptest_list.h > +++ b/ptest_list.h > @@ -28,6 +28,8 @@ > #define PTEST_LIST_ITERATE_START(head, p) for (p = head->next; p != NULL; > p = p->next) { > #define PTEST_LIST_ITERATE_END } > > +#include <sys/stat.h> > + > struct ptest_list { > char *ptest; > char *run_ptest; > @@ -42,6 +44,7 @@ extern int ptest_list_free_all(struct ptest_list *); > > extern int ptest_list_length(struct ptest_list *); > extern struct ptest_list *ptest_list_search(struct ptest_list *, char *); > +extern struct ptest_list *ptest_list_search_by_file(struct ptest_list *, > char *, struct stat); > extern struct ptest_list *ptest_list_add(struct ptest_list *, char *, > char *); > extern struct ptest_list *ptest_list_remove(struct ptest_list *, char *, > int); > > diff --git a/tests/data/python3 b/tests/data/python3 > new file mode 120000 > index 0000000..d8654aa > --- /dev/null > +++ b/tests/data/python3 > I forget to add symlink of python3 to python, used in testing. Cheers, Anibal > @@ -0,0 +1 @@ > +python > \ No newline at end of file > diff --git a/tests/utils.c b/tests/utils.c > index ecf3e8a..cf09379 100644 > --- a/tests/utils.c > +++ b/tests/utils.c > @@ -48,6 +48,7 @@ static int ptests_found_length = 6; > static char *ptests_not_found[] = { > "busybox", > "perl", > + "python3", > NULL, > }; > > diff --git a/utils.c b/utils.c > index 933eced..ed2eff7 100644 > --- a/utils.c > +++ b/utils.c > @@ -143,6 +143,12 @@ get_available_ptests(const char *dir) > continue; > } > > + if (ptest_list_search_by_file(head, run_ptest, > st_buf)) { > + free(run_ptest); > + free(d_name); > + continue; > + } > + > struct ptest_list *p = ptest_list_add(head, > d_name, run_ptest); > CHECK_ALLOCATION(p, sizeof(struct ptest_list *), > 0); > -- > 2.11.0 > >
-- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto