registry: skip over invalid ISO639 or ISO3166 entries
[platform/upstream/libxkbcommon.git] / test / context.c
index 8cb0a47..f91be54 100644 (file)
  * Author: Daniel Stone <daniel@fooishbar.org>
  */
 
+#include "config.h"
+
 #include "test.h"
 #include "context.h"
 
-#include <unistd.h>
 #include <sys/stat.h>
-#include <dirent.h>
+#include <sys/types.h>
+#ifdef _MSC_VER
+# include <io.h>
+# include <direct.h>
+# ifndef S_ISDIR
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# endif
+#else
+# include <unistd.h>
+#endif
 
 /* keeps a cache of all makedir/maketmpdir directories so we can free and
  * rmdir them in one go, see unmakedirs() */
@@ -75,8 +85,8 @@ static const char *makedir(const char *parent, const char *path)
     char *dirname;
     int err;
 
-    err = asprintf(&dirname, "%s/%s", parent, path);
-    assert(err >= 0);
+    dirname = asprintf_safe("%s/%s", parent, path);
+    assert(dirname);
     err = mkdir(dirname, 0777);
     assert(err == 0);
 
@@ -148,15 +158,16 @@ test_config_root_include_path_fallback(void)
     const char *xkbdir = DFLT_XKB_CONFIG_ROOT;
     const char *context_path;
     int nincludes;
-    DIR *dir;
 
     /* quick and dirty check that the default directory exists.
      * It may not on a vanilla test box if we just run the test
      * suite, so where it's not there just skip this test. */
-    dir = opendir(xkbdir);
-    if (!dir)
+    struct stat stat_buf;
+    int err = stat(xkbdir, &stat_buf);
+    if (err != 0)
+        return;
+    if (!S_ISDIR(stat_buf.st_mode))
         return;
-    closedir(dir);
 
     buffer_env("XKB_CONFIG_ROOT");
     buffer_env("HOME");