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/utils.c |  1 +
 utils.c       |  6 ++++++
 4 files changed, 50 insertions(+)

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/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

Reply via email to