Import mkdtemp gnulib module, fix mingw build
authorSimon Marchi <simon.marchi@ericsson.com>
Thu, 1 Nov 2018 19:40:43 +0000 (15:40 -0400)
committerSimon Marchi <simon.marchi@ericsson.com>
Thu, 1 Nov 2018 19:41:43 +0000 (15:41 -0400)
Building with mingw currently fails:

  CXX    unittests/mkdir-recursive-selftests.o
/home/emaisin/src/binutils-gdb/gdb/unittests/mkdir-recursive-selftests.c: In function ‘void selftests::mkdir_recursive::test()’:
/home/emaisin/src/binutils-gdb/gdb/unittests/mkdir-recursive-selftests.c:49:20: error: ‘mkdtemp’ was not declared in this scope
   if (mkdtemp (base) == NULL)
                    ^
Commit

    e418a61a67a ("Move mkdir_recursive to common/filestuff.c")

moved this code, but also removed the HAVE_MKDTEMP guard which prevented
the mkdtemp call to be compiled on mingw.

We can either put back the HAVE_MKDTEMP ifdef, or import the gnulib
mkdtemp module, which provides the function for mingw.  Since the
mkdir_recursive is susceptible to be used on mingw at some point, I
think it would be nice to have it tested on mingw, so I did the latter.

Once built, I tested it on Windows (copied the resulting gdb.exe on a
Windows machine, ran it, and ran "maint selftest mkdir_recursive").  It
failed, because the temporary directory is hardcoded to "/tmp/...".  I
therefore added and used a new get_standard_temp_dir function, which
returns an appropriate temporary directory for the host platform.

gdb/ChangeLog:

* common/pathstuff.c (get_standard_temp_dir): New.
* common/pathstuff.h (get_standard_temp_dir): New.
* config.in: Re-generate.
* configure: Re-generate.
* configure.ac: Don't check for mkdtemp.
* gnulib/aclocal-m4-deps.mk: Re-generate.
* gnulib/aclocal.m4: Re-generate.
* gnulib/config.in: Re-generate.
* gnulib/configure: Re-generate.
* gnulib/import/Makefile.am: Re-generate.
* gnulib/import/Makefile.in: Re-generate.
* gnulib/import/m4/gnulib-cache.m4: Re-generate.
* gnulib/import/m4/gnulib-comp.m4: Re-generate.
* gnulib/import/m4/mkdtemp.m4: New file.
* gnulib/import/mkdtemp.c: New file.
* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES):
Add mkdtemp module.
* unittests/mkdir-recursive-selftests.c (test): Use
get_standard_temp_dir.
(_initialize_mkdir_recursive_selftests): Remove HAVE_MKDTEMP
ifdef.
* compile/compile.c (get_compile_file_tempdir): Likewise.

19 files changed:
gdb/ChangeLog
gdb/common/pathstuff.c
gdb/common/pathstuff.h
gdb/compile/compile.c
gdb/config.in
gdb/configure
gdb/configure.ac
gdb/gnulib/aclocal-m4-deps.mk
gdb/gnulib/aclocal.m4
gdb/gnulib/config.in
gdb/gnulib/configure
gdb/gnulib/import/Makefile.am
gdb/gnulib/import/Makefile.in
gdb/gnulib/import/m4/gnulib-cache.m4
gdb/gnulib/import/m4/gnulib-comp.m4
gdb/gnulib/import/m4/mkdtemp.m4 [new file with mode: 0644]
gdb/gnulib/import/mkdtemp.c [new file with mode: 0644]
gdb/gnulib/update-gnulib.sh
gdb/unittests/mkdir-recursive-selftests.c

index e33fe9df06b95c2de1a0ad39789033cb1e050610..fb655954a2656dd09e371ba3b141f385721d2fa1 100644 (file)
@@ -1,3 +1,28 @@
+2018-11-01  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * common/pathstuff.c (get_standard_temp_dir): New.
+       * common/pathstuff.h (get_standard_temp_dir): New.
+       * config.in: Re-generate.
+       * configure: Re-generate.
+       * configure.ac: Don't check for mkdtemp.
+       * gnulib/aclocal-m4-deps.mk: Re-generate.
+       * gnulib/aclocal.m4: Re-generate.
+       * gnulib/config.in: Re-generate.
+       * gnulib/configure: Re-generate.
+       * gnulib/import/Makefile.am: Re-generate.
+       * gnulib/import/Makefile.in: Re-generate.
+       * gnulib/import/m4/gnulib-cache.m4: Re-generate.
+       * gnulib/import/m4/gnulib-comp.m4: Re-generate.
+       * gnulib/import/m4/mkdtemp.m4: New file.
+       * gnulib/import/mkdtemp.c: New file.
+       * gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES):
+       Add mkdtemp module.
+       * unittests/mkdir-recursive-selftests.c (test): Use
+       get_standard_temp_dir.
+       (_initialize_mkdir_recursive_selftests): Remove HAVE_MKDTEMP
+       ifdef.
+       * compile/compile.c (get_compile_file_tempdir): Likewise.
+
 2018-11-01  Sangamesh Mallayya <sangamesh.swamy@in.ibm.com>
 
        * rs6000-aix-tdep.c: Include "trad-frame.h" and "frame-unwind.h".
index 48ff861edaed82f81b99e8248d41352a86fb4260..839197583bfaea22e7e0f9ec9cce063eb032d92e 100644 (file)
@@ -193,6 +193,31 @@ get_standard_cache_dir ()
 
 /* See common/pathstuff.h.  */
 
+std::string
+get_standard_temp_dir ()
+{
+#ifdef WIN32
+  const char *tmp = getenv ("TMP");
+  if (tmp != nullptr)
+    return tmp;
+
+  tmp = getenv ("TEMP");
+  if (tmp != nullptr)
+    return tmp;
+
+  error (_("Couldn't find temp dir path, both TMP and TEMP are unset."));
+
+#else
+  const char *tmp = getenv ("TMPDIR");
+  if (tmp != nullptr)
+    return tmp;
+
+  return "/tmp";
+#endif
+}
+
+/* See common/pathstuff.h.  */
+
 const char *
 get_shell ()
 {
index d57aafff0794d4e764022bfcd829fee8a3775477..f29349e8b28ff90b41e5afe26f1b8904e4794240 100644 (file)
@@ -66,6 +66,16 @@ extern bool contains_dir_separator (const char *path);
 
 extern std::string get_standard_cache_dir ();
 
+/* Get the usual temporary directory for the current platform.
+
+   On Windows, this is the TMP or TEMP environment variable.
+
+   On the rest, this is the TMPDIR environment variable, if defined, else /tmp.
+
+   Throw an exception on error.  */
+
+extern std::string get_standard_temp_dir ();
+
 /* Return the file name of the user's shell.  Normally this comes from
    the SHELL environment variable.  */
 
index ec644a7b5a8cca1619c073a7a7ed683042986dab..f6f49e0833f99eb5651a3f7694c4905b2a45008e 100644 (file)
@@ -395,11 +395,7 @@ get_compile_file_tempdir (void)
 
   strcpy (tname, TEMPLATE);
 #undef TEMPLATE
-#ifdef HAVE_MKDTEMP
   tempdir_name = mkdtemp (tname);
-#else
-  error (_("Command not supported on this host."));
-#endif
   if (tempdir_name == NULL)
     perror_with_name (_("Could not make temporary directory"));
 
index f0d14143520218de008d1b39d4fa83b9d4ea95c2..deb9d4a996e74fe59cd405d8ce06c8725f6a33fa 100644 (file)
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
-/* Define to 1 if you have the `mkdtemp' function. */
-#undef HAVE_MKDTEMP
-
 /* Define to 1 if you have a working `mmap' system call. */
 #undef HAVE_MMAP
 
index 3652455322f5bfe5f9caf967ddc6f785372eb976..0f3ec4520aa9b9423af6b52739933d684b6dc65c 100755 (executable)
@@ -13320,7 +13320,7 @@ for ac_func in getauxval getrusage getuid getgid \
                sigaction sigprocmask sigsetmask socketpair \
                ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
                setrlimit getrlimit posix_madvise waitpid \
-               ptrace64 sigaltstack mkdtemp setns
+               ptrace64 sigaltstack setns
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
index b2343a90e5fa6d2810465caff9441ce042f51282..e1ea60660b966de3e9104fe7df7002498e35a05d 100644 (file)
@@ -1359,7 +1359,7 @@ AC_CHECK_FUNCS([getauxval getrusage getuid getgid \
                sigaction sigprocmask sigsetmask socketpair \
                ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
                setrlimit getrlimit posix_madvise waitpid \
-               ptrace64 sigaltstack mkdtemp setns])
+               ptrace64 sigaltstack setns])
 AM_LANGINFO_CODESET
 GDB_AC_COMMON
 
index 5b2c6cc5ea38103922efac34558b5c466baf985f..ffa003d76138d997e0ff791c608fe2712a3ccf2c 100644 (file)
@@ -80,6 +80,7 @@ aclocal_m4_deps = \
        import/m4/mempcpy.m4 \
        import/m4/memrchr.m4 \
        import/m4/mkdir.m4 \
+       import/m4/mkdtemp.m4 \
        import/m4/mkostemp.m4 \
        import/m4/mmap-anon.m4 \
        import/m4/mode_t.m4 \
index 861caf6692c5122d5eff2cb93fc5c504b874bfbd..e480633394d08fdbe9dba6da12e644ebf910f126 100644 (file)
@@ -1353,6 +1353,7 @@ m4_include([import/m4/memmem.m4])
 m4_include([import/m4/mempcpy.m4])
 m4_include([import/m4/memrchr.m4])
 m4_include([import/m4/mkdir.m4])
+m4_include([import/m4/mkdtemp.m4])
 m4_include([import/m4/mkostemp.m4])
 m4_include([import/m4/mmap-anon.m4])
 m4_include([import/m4/mode_t.m4])
index d23d208cb28aade60d1f4608691f8865e300761b..2f1a540550678c038d706836cde0291e5674990b 100644 (file)
 /* Define to 1 when the gnulib module memrchr should be tested. */
 #undef GNULIB_TEST_MEMRCHR
 
+/* Define to 1 when the gnulib module mkdtemp should be tested. */
+#undef GNULIB_TEST_MKDTEMP
+
 /* Define to 1 when the gnulib module mkostemp should be tested. */
 #undef GNULIB_TEST_MKOSTEMP
 
    when it succeeds. */
 #undef HAVE_MINIMALLY_WORKING_GETCWD
 
+/* Define to 1 if you have the `mkdtemp' function. */
+#undef HAVE_MKDTEMP
+
 /* Define to 1 if you have the 'mkostemp' function. */
 #undef HAVE_MKOSTEMP
 
index 5d7f8aa004f7b4a90690269ec4be65aa579be856..340c622cb399829fe60529d1c9ec7e07d33b1168 100644 (file)
@@ -5841,6 +5841,7 @@ fi
   # Code from module mempcpy:
   # Code from module memrchr:
   # Code from module mkdir:
+  # Code from module mkdtemp:
   # Code from module mkostemp:
   # Code from module msvc-inval:
   # Code from module msvc-nothrow:
@@ -21891,6 +21892,52 @@ $as_echo "#define FUNC_MKDIR_DOT_BUG 1" >>confdefs.h
   fi
 
 
+  for ac_func in mkdtemp
+do :
+  ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp"
+if test "x$ac_cv_func_mkdtemp" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MKDTEMP 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_mkdtemp = no; then
+    HAVE_MKDTEMP=0
+  fi
+
+  if test $HAVE_MKDTEMP = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mkdtemp.$ac_objext"
+
+    :
+
+  fi
+
+
+
+
+
+          GNULIB_MKDTEMP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MKDTEMP 1" >>confdefs.h
+
+
+
+
+
 
 
 
index 608c2c725cf6817bcfe5ce9e1bbd4dda7740913e..9dca489ee10655e73d33fe40b5884162942a1022 100644 (file)
@@ -21,7 +21,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
 
 AUTOMAKE_OPTIONS = 1.9.6 gnits
 
@@ -1223,6 +1223,15 @@ EXTRA_libgnu_a_SOURCES += mkdir.c
 
 ## end   gnulib module mkdir
 
+## begin gnulib module mkdtemp
+
+
+EXTRA_DIST += mkdtemp.c
+
+EXTRA_libgnu_a_SOURCES += mkdtemp.c
+
+## end   gnulib module mkdtemp
+
 ## begin gnulib module mkostemp
 
 
index 8b0487ccc75d15eb6e32867e76661d5751efc74c..f433c36348594c5e26a4c8c0c0b6ab74b1cd3cd0 100644 (file)
@@ -35,7 +35,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
+# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
 
 
 
@@ -192,6 +192,7 @@ am__aclocal_m4_deps = $(top_srcdir)/import/m4/00gnulib.m4 \
        $(top_srcdir)/import/m4/mempcpy.m4 \
        $(top_srcdir)/import/m4/memrchr.m4 \
        $(top_srcdir)/import/m4/mkdir.m4 \
+       $(top_srcdir)/import/m4/mkdtemp.m4 \
        $(top_srcdir)/import/m4/mkostemp.m4 \
        $(top_srcdir)/import/m4/mmap-anon.m4 \
        $(top_srcdir)/import/m4/mode_t.m4 \
@@ -1515,9 +1516,9 @@ EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h arpa_inet.in.h \
        malloca.valgrind math.in.h mbrtowc.c mbsinit.c \
        mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c memchr.c \
        memchr.valgrind memmem.c str-two-way.h mempcpy.c memrchr.c \
-       mkdir.c mkostemp.c msvc-inval.c msvc-inval.h msvc-nothrow.c \
-       msvc-nothrow.h netinet_in.in.h open.c openat.c openat.h \
-       dirent-private.h opendir.c pathmax.h rawmemchr.c \
+       mkdir.c mkdtemp.c mkostemp.c msvc-inval.c msvc-inval.h \
+       msvc-nothrow.c msvc-nothrow.h netinet_in.in.h open.c openat.c \
+       openat.h dirent-private.h opendir.c pathmax.h rawmemchr.c \
        rawmemchr.valgrind dirent-private.h readdir.c readlink.c \
        realloc.c rename.c dirent-private.h rewinddir.c rmdir.c \
        same-inode.h save-cwd.h secure_getenv.c setenv.c signal.in.h \
@@ -1587,11 +1588,11 @@ EXTRA_libgnu_a_SOURCES = alloca.c openat-proc.c canonicalize-lgpl.c \
        gettimeofday.c glob.c inet_ntop.c isnan.c isnand.c isnan.c \
        isnanl.c lstat.c malloc.c mbrtowc.c mbsinit.c \
        mbsrtowcs-state.c mbsrtowcs.c memchr.c memmem.c mempcpy.c \
-       memrchr.c mkdir.c mkostemp.c msvc-inval.c msvc-nothrow.c \
-       open.c openat.c opendir.c rawmemchr.c readdir.c readlink.c \
-       realloc.c rename.c rewinddir.c rmdir.c secure_getenv.c \
-       setenv.c stat.c strchrnul.c strdup.c strerror.c \
-       strerror-override.c strstr.c strtok_r.c unsetenv.c
+       memrchr.c mkdir.c mkdtemp.c mkostemp.c msvc-inval.c \
+       msvc-nothrow.c open.c openat.c opendir.c rawmemchr.c readdir.c \
+       readlink.c realloc.c rename.c rewinddir.c rmdir.c \
+       secure_getenv.c setenv.c stat.c strchrnul.c strdup.c \
+       strerror.c strerror-override.c strstr.c strtok_r.c unsetenv.c
 
 # Use this preprocessor expression to decide whether #include_next works.
 # Do not rely on a 'configure'-time test for this, since the expression
@@ -1722,6 +1723,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memrchr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdtemp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkostemp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Po@am__quote@
index 8cefb67be7c3f1cf3bdab2a08abbdbb753ce4d31..4cbd1a76fa4eb2b6bcf46010f7784dfe32231bc1 100644 (file)
@@ -27,7 +27,7 @@
 
 
 # Specification in the form of a command-line invocation:
-#   gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
+#   gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strstr strtok_r sys_stat unistd unsetenv update-copyright wchar wctype-h
 
 # Specification in the form of a few gnulib-tool.m4 macro invocations:
 gl_LOCAL_DIR([])
@@ -48,6 +48,7 @@ gl_MODULES([
   memchr
   memmem
   mkdir
+  mkdtemp
   mkostemp
   pathmax
   rawmemchr
index 2c55958eb7e0cd546ec8771ea64c9f99c622f11d..1700bdd3cf04a29eb1c589e82150de97865c603f 100644 (file)
@@ -121,6 +121,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module mempcpy:
   # Code from module memrchr:
   # Code from module mkdir:
+  # Code from module mkdtemp:
   # Code from module mkostemp:
   # Code from module msvc-inval:
   # Code from module msvc-nothrow:
@@ -444,6 +445,12 @@ AC_DEFUN([gl_INIT],
   if test $REPLACE_MKDIR = 1; then
     AC_LIBOBJ([mkdir])
   fi
+  gl_FUNC_MKDTEMP
+  if test $HAVE_MKDTEMP = 0; then
+    AC_LIBOBJ([mkdtemp])
+    gl_PREREQ_MKDTEMP
+  fi
+  gl_STDLIB_MODULE_INDICATOR([mkdtemp])
   gl_FUNC_MKOSTEMP
   if test $HAVE_MKOSTEMP = 0; then
     AC_LIBOBJ([mkostemp])
@@ -845,6 +852,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/mempcpy.c
   lib/memrchr.c
   lib/mkdir.c
+  lib/mkdtemp.c
   lib/mkostemp.c
   lib/msvc-inval.c
   lib/msvc-inval.h
@@ -992,6 +1000,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/mempcpy.m4
   m4/memrchr.m4
   m4/mkdir.m4
+  m4/mkdtemp.m4
   m4/mkostemp.m4
   m4/mmap-anon.m4
   m4/mode_t.m4
diff --git a/gdb/gnulib/import/m4/mkdtemp.m4 b/gdb/gnulib/import/m4/mkdtemp.m4
new file mode 100644 (file)
index 0000000..a2edd39
--- /dev/null
@@ -0,0 +1,20 @@
+# mkdtemp.m4 serial 8
+dnl Copyright (C) 2001-2003, 2006-2007, 2009-2016 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MKDTEMP],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_CHECK_FUNCS([mkdtemp])
+  if test $ac_cv_func_mkdtemp = no; then
+    HAVE_MKDTEMP=0
+  fi
+])
+
+# Prerequisites of lib/mkdtemp.c
+AC_DEFUN([gl_PREREQ_MKDTEMP],
+[:
+])
diff --git a/gdb/gnulib/import/mkdtemp.c b/gdb/gnulib/import/mkdtemp.c
new file mode 100644 (file)
index 0000000..c1b05fd
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2016 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Extracted from misc/mkdtemp.c.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include "tempname.h"
+
+/* Generate a unique temporary directory from XTEMPLATE.
+   The last six characters of XTEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the filename unique.
+   The directory is created, mode 700, and its name is returned.
+   (This function comes from OpenBSD.) */
+char *
+mkdtemp (char *xtemplate)
+{
+  if (gen_tempname (xtemplate, 0, 0, GT_DIR))
+    return NULL;
+  else
+    return xtemplate;
+}
index 5129450577dcd0c1bd66c0c993f47cd6c9909383..e67565a0e728d78987d25008d430247a8dbb1ff4 100755 (executable)
@@ -46,6 +46,7 @@ IMPORTED_GNULIB_MODULES="\
     memchr \
     memmem \
     mkdir \
+    mkdtemp \
     mkostemp \
     pathmax \
     rawmemchr \
index d501f8e0817c1483888daadc9dc4ba2b61fb2dad..5a5c453ad6a1edb765c03fcd5be16fbf702c0a6a 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "common/filestuff.h"
 #include "selftest.h"
+#include "common/byte-vector.h"
+#include "common/pathstuff.h"
 
 namespace selftests {
 namespace mkdir_recursive {
@@ -44,9 +46,10 @@ create_dir_and_check (const char *dir)
 static void
 test ()
 {
-  char base[] = "/tmp/gdb-selftests-XXXXXX";
+  std::string tmp = get_standard_temp_dir () + "/gdb-selftests";
+  gdb::char_vector base = make_temp_filename (tmp);
 
-  if (mkdtemp (base) == NULL)
+  if (mkdtemp (base.data ()) == NULL)
     perror_with_name (("mkdtemp"));
 
   /* Try not to leave leftover directories.  */
@@ -66,12 +69,12 @@ test ()
 
   private:
     const char *m_base;
-  } cleanup_dirs (base);
+  } cleanup_dirs (base.data ());
 
-  std::string dir = string_printf ("%s/a/b", base);
+  std::string dir = string_printf ("%s/a/b", base.data ());
   SELF_CHECK (create_dir_and_check (dir.c_str ()));
 
-  dir = string_printf ("%s/a/b/c//d/e/", base);
+  dir = string_printf ("%s/a/b/c//d/e/", base.data ());
   SELF_CHECK (create_dir_and_check (dir.c_str ()));
 }
 
@@ -81,9 +84,7 @@ test ()
 void
 _initialize_mkdir_recursive_selftests ()
 {
-#if defined (HAVE_MKDTEMP)
   selftests::register_test ("mkdir_recursive",
                            selftests::mkdir_recursive::test);
-#endif
 }