From d332a64df8d6d91328012ebd4ae2dc664b087c23 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 1 Nov 2017 14:12:01 +1000 Subject: [PATCH] test: mkdir -p the udev rules and hwdb directories Especially /run/udev/rules.d may not exist, causing a test suite failure. https://bugs.freedesktop.org/show_bug.cgi?id=103527 Signed-off-by: Peter Hutterer --- test/litest.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/test/litest.c b/test/litest.c index 41b0927e..0cd540e1 100644 --- a/test/litest.c +++ b/test/litest.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1071,20 +1072,35 @@ litest_install_model_quirks(struct list *created_files_list) list_insert(created_files_list, &file->link); } +static inline void +mkdir_p(const char *dir) +{ + char *path, *parent; + int rc; + + if (streq(dir, "/")) + return; + + path = strdup(dir); + parent = dirname(path); + + mkdir_p(parent); + rc = mkdir(dir, 0755); + + if (rc == -1 && errno != EEXIST) { + litest_abort_msg("Failed to create directory %s (%s)\n", + dir, + strerror(errno)); + } + + free(path); +} + static void litest_init_udev_rules(struct list *created_files) { - int rc; - - rc = mkdir(UDEV_RULES_D, 0755); - if (rc == -1 && errno != EEXIST) - litest_abort_msg("Failed to create udev rules directory (%s)\n", - strerror(errno)); - - rc = mkdir(UDEV_HWDB_D, 0755); - if (rc == -1 && errno != EEXIST) - litest_abort_msg("Failed to create udev hwdb directory (%s)\n", - strerror(errno)); + mkdir_p(UDEV_RULES_D); + mkdir_p(UDEV_HWDB_D); litest_install_model_quirks(created_files); litest_init_all_device_udev_rules(created_files);