Statistics
| Branch: | Tag: | Revision:

root / config / mkstemp.m4 @ 08253798

History | View | Annotate | Download (2.2 kB)

1 5d69a524 jcorgan
#serial 4
2 5d69a524 jcorgan
3 5d69a524 jcorgan
# On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a
4 5d69a524 jcorgan
# silly limit that it can create no more than 26 files from a given template.
5 5d69a524 jcorgan
# Other systems lack mkstemp altogether.
6 5d69a524 jcorgan
# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create
7 5d69a524 jcorgan
# only 32 files per process.
8 5d69a524 jcorgan
# On systems like the above, arrange to use the replacement function.
9 5d69a524 jcorgan
AC_DEFUN([UTILS_FUNC_MKSTEMP],
10 5d69a524 jcorgan
[dnl
11 5d69a524 jcorgan
  AC_REPLACE_FUNCS(mkstemp)
12 5d69a524 jcorgan
  if test $ac_cv_func_mkstemp = no; then
13 5d69a524 jcorgan
    utils_cv_func_mkstemp_limitations=yes
14 5d69a524 jcorgan
  else
15 5d69a524 jcorgan
    AC_CACHE_CHECK([for mkstemp limitations],
16 5d69a524 jcorgan
      utils_cv_func_mkstemp_limitations,
17 5d69a524 jcorgan
      [
18 5d69a524 jcorgan
	AC_TRY_RUN([
19 5d69a524 jcorgan
#         include <stdlib.h>
20 5d69a524 jcorgan
	  int main ()
21 5d69a524 jcorgan
	  {
22 5d69a524 jcorgan
	    int i;
23 5d69a524 jcorgan
	    for (i = 0; i < 70; i++)
24 5d69a524 jcorgan
	      {
25 5d69a524 jcorgan
		char template[] = "conftestXXXXXX";
26 5d69a524 jcorgan
		int fd = mkstemp (template);
27 5d69a524 jcorgan
		if (fd == -1)
28 5d69a524 jcorgan
		  exit (1);
29 5d69a524 jcorgan
		close (fd);
30 5d69a524 jcorgan
	      }
31 5d69a524 jcorgan
	    exit (0);
32 5d69a524 jcorgan
	  }
33 5d69a524 jcorgan
	  ],
34 5d69a524 jcorgan
	utils_cv_func_mkstemp_limitations=no,
35 5d69a524 jcorgan
	utils_cv_func_mkstemp_limitations=yes,
36 5d69a524 jcorgan
	utils_cv_func_mkstemp_limitations=yes
37 5d69a524 jcorgan
	)
38 5d69a524 jcorgan
      ]
39 5d69a524 jcorgan
    )
40 5d69a524 jcorgan
  fi
41 5d69a524 jcorgan
42 5d69a524 jcorgan
  if test $utils_cv_func_mkstemp_limitations = yes; then
43 5d69a524 jcorgan
    AC_LIBOBJ(mkstemp)
44 5d69a524 jcorgan
    AC_LIBOBJ(tempname)
45 5d69a524 jcorgan
    AC_DEFINE(mkstemp, rpl_mkstemp,
46 5d69a524 jcorgan
      [Define to rpl_mkstemp if the replacement function should be used.])
47 5d69a524 jcorgan
    gl_PREREQ_MKSTEMP
48 5d69a524 jcorgan
    jm_PREREQ_TEMPNAME
49 5d69a524 jcorgan
  fi
50 5d69a524 jcorgan
])
51 5d69a524 jcorgan
52 5d69a524 jcorgan
# Prerequisites of lib/mkstemp.c.
53 5d69a524 jcorgan
AC_DEFUN([gl_PREREQ_MKSTEMP],
54 5d69a524 jcorgan
[
55 5d69a524 jcorgan
  AH_BOTTOM(
56 5d69a524 jcorgan
  [
57 5d69a524 jcorgan
  #ifndef HAVE_MKSTEMP
58 5d69a524 jcorgan
  #ifdef  __cplusplus
59 5d69a524 jcorgan
  extern "C" {
60 5d69a524 jcorgan
  #endif
61 5d69a524 jcorgan
  int rpl_mkstemp (char *templ);
62 5d69a524 jcorgan
  #ifdef  __cplusplus
63 5d69a524 jcorgan
  }
64 5d69a524 jcorgan
  #endif
65 5d69a524 jcorgan
  #endif
66 5d69a524 jcorgan
  ])
67 5d69a524 jcorgan
])
68 5d69a524 jcorgan
69 5d69a524 jcorgan
# Prerequisites of lib/tempname.c.
70 5d69a524 jcorgan
AC_DEFUN([jm_PREREQ_TEMPNAME],
71 5d69a524 jcorgan
[
72 5d69a524 jcorgan
  AC_REQUIRE([AC_HEADER_STAT])
73 5d69a524 jcorgan
  AC_CHECK_HEADERS_ONCE(fcntl.h sys/time.h unistd.h)
74 5d69a524 jcorgan
  AC_CHECK_HEADERS(stdint.h)
75 5d69a524 jcorgan
  AC_CHECK_FUNCS(__secure_getenv gettimeofday lstat)
76 5d69a524 jcorgan
  AC_CHECK_DECLS_ONCE(getenv)
77 5d69a524 jcorgan
  # AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
78 5d69a524 jcorgan
79 5d69a524 jcorgan
  dnl Under Win32, mkdir prototype in io.h has only one arg
80 5d69a524 jcorgan
  AC_MSG_CHECKING(whether mkdir accepts only one arg)
81 5d69a524 jcorgan
  AC_TRY_COMPILE([#include <sys/types.h>
82 5d69a524 jcorgan
       #include <sys/stat.h>
83 5d69a524 jcorgan
       #include <fcntl.h>], [
84 5d69a524 jcorgan
       mkdir("")
85 5d69a524 jcorgan
  ], [ AC_MSG_RESULT(yes)
86 5d69a524 jcorgan
     AC_DEFINE(MKDIR_TAKES_ONE_ARG,[],[Define if mkdir accepts only one arg]) ],
87 5d69a524 jcorgan
   [ AC_MSG_RESULT(no)
88 5d69a524 jcorgan
     ])
89 5d69a524 jcorgan
])