diff --git a/src/gallium/auxiliary/driver_ddebug/dd_draw.c b/src/gallium/auxiliary/driver_ddebug/dd_draw.c index 7386e3777a7..0044bceac27 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_draw.c +++ b/src/gallium/auxiliary/driver_ddebug/dd_draw.c @@ -27,6 +27,7 @@ #include "dd_pipe.h" +#include "util/os_file.h" #include "util/u_dump.h" #include "util/format/u_format.h" #include "util/u_framebuffer.h" @@ -54,7 +55,7 @@ dd_get_debug_filename_and_mkdir(char *buf, size_t buflen, bool verbose) snprintf(dir, sizeof(dir), "%s/"DD_DIR, debug_get_option("HOME", ".")); - if (mkdir(dir, 0774) && errno != EEXIST) + if (os_mkdir(dir, 0774) && errno != EEXIST) fprintf(stderr, "dd: can't create a directory (%i)\n", errno); snprintf(buf, buflen, "%s/%s_%u_%08u", dir, proc_name, (unsigned int)getpid(), diff --git a/src/gallium/auxiliary/driver_ddebug/dd_util.h b/src/gallium/auxiliary/driver_ddebug/dd_util.h index ae90825e391..d7b98cbf442 100644 --- a/src/gallium/auxiliary/driver_ddebug/dd_util.h +++ b/src/gallium/auxiliary/driver_ddebug/dd_util.h @@ -29,22 +29,6 @@ #define DD_UTIL_H #include -#include - -#include "c99_alloca.h" -#include "util/u_atomic.h" -#include "util/u_debug.h" -#include "util/u_string.h" - -#include "util/detect.h" -#if DETECT_OS_POSIX -#include -#include -#elif DETECT_OS_WINDOWS -#include -#include -#define mkdir(dir, mode) _mkdir(dir) -#endif struct pipe_screen; diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp index a2582fa8ba7..e5a7242fa78 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp @@ -46,8 +46,8 @@ #include "util/detect_os.h" #include "util/u_math.h" #include "util/u_debug.h" +#include "util/os_file.h" -#include "driver_ddebug/dd_util.h" #include "lp_bld_debug.h" #include "lp_bld_intr.h" @@ -377,7 +377,7 @@ lp_function_add_debug_info(gallivm_state *gallivm, LLVMValueRef func, LLVMTypeRe if (!gallivm->file) { uint32_t shader_index = p_atomic_add_return(&global_shader_index, 1); - mkdir(LP_NIR_SHADER_DUMP_DIR, 0755); + os_mkdir(LP_NIR_SHADER_DUMP_DIR, 0755); asprintf(&gallivm->file_name, "%s/%u.nir", LP_NIR_SHADER_DUMP_DIR, shader_index); diff --git a/src/util/os_file.c b/src/util/os_file.c index 425c8378c05..bb7135c62b0 100644 --- a/src/util/os_file.c +++ b/src/util/os_file.c @@ -5,6 +5,7 @@ #include "os_file.h" #include "detect_os.h" +#include "util/detect.h" #include #include @@ -12,6 +13,7 @@ #include #if DETECT_OS_WINDOWS +#include #include #define open _open #define fdopen _fdopen @@ -21,6 +23,7 @@ #define O_CREAT _O_CREAT #define O_EXCL _O_EXCL #define O_WRONLY _O_WRONLY +#define mkdir(dir, mode) _mkdir(dir) #else #include #ifndef F_DUPFD_CLOEXEC @@ -268,3 +271,14 @@ os_same_file_description(int fd1, int fd2) return -1; #endif } + + +int +os_mkdir(const char *pathname, int mode) +{ +#if DETECT_OS_WINDOWS + return _mkdir(pathname); +#else + return mkdir(pathname, mode); +#endif +} diff --git a/src/util/os_file.h b/src/util/os_file.h index 85065c2da36..df7aeb09c66 100644 --- a/src/util/os_file.h +++ b/src/util/os_file.h @@ -52,6 +52,15 @@ os_read_file(const char *filename, size_t *size); int os_same_file_description(int fd1, int fd2); +/* + * Make a directory. The file permissions bitmask 'mode' may be ignored + * (such as on Windows). + * Return 0 for success, -1 on failure (setting errno). +*/ +int +os_mkdir(const char *pathname, int mode); + + #ifdef __cplusplus } #endif