From 8a2177b3ba18f3fd3050afa37cb194bc803ea209 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 | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/test/litest.c b/test/litest.c index d34bd3c5..63745244 100644 --- a/test/litest.c +++ b/test/litest.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -1071,20 +1072,32 @@ 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 = strdup(dir), + *parent = dirname(path); + + if (streq(parent, "/")) { + int rc = mkdir(dir, 0755); + + if (rc == -1 && errno != EEXIST) { + litest_abort_msg("Failed to create directory %s (%s)\n", + dir, + strerror(errno)); + } + } else { + mkdir_p(path); + } + + 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);