~ubuntu-branches/ubuntu/vivid/parted/vivid

« back to all changes in this revision

Viewing changes to m4/mkstemp.m4

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2014-07-21 10:23:16 UTC
  • mfrom: (7.2.32 sid)
  • Revision ID: package-import@ubuntu.com-20140721102316-jsyv3yzmbo8vlde5
Tags: 3.1-3
Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#serial 18
 
1
#serial 22
2
2
 
3
 
# Copyright (C) 2001, 2003-2007, 2009-2010 Free Software Foundation, Inc.
 
3
# Copyright (C) 2001, 2003-2007, 2009-2012 Free Software Foundation, Inc.
4
4
# This file is free software; the Free Software Foundation
5
5
# gives unlimited permission to copy and/or distribute it,
6
6
# with or without modifications, as long as this notice is preserved.
10
10
# Other systems lack mkstemp altogether.
11
11
# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create
12
12
# only 32 files per process.
 
13
# On some hosts, mkstemp creates files with mode 0666, which is a security
 
14
# problem and a violation of POSIX 2008.
13
15
# On systems like the above, arrange to use the replacement function.
14
16
AC_DEFUN([gl_FUNC_MKSTEMP],
15
17
[
16
18
  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
17
 
  AC_REQUIRE([AC_SYS_LARGEFILE])
18
19
 
19
20
  AC_CHECK_FUNCS_ONCE([mkstemp])
20
21
  if test $ac_cv_func_mkstemp = yes; then
25
26
        AC_RUN_IFELSE(
26
27
          [AC_LANG_PROGRAM(
27
28
            [AC_INCLUDES_DEFAULT],
28
 
            [[int i;
 
29
            [[int result = 0;
 
30
              int i;
29
31
              off_t large = (off_t) 4294967295u;
30
32
              if (large < 0)
31
33
                large = 2147483647;
 
34
              umask (0);
32
35
              for (i = 0; i < 70; i++)
33
36
                {
34
37
                  char templ[] = "conftest.mkstemp/coXXXXXX";
35
38
                  int (*mkstemp_function) (char *) = mkstemp;
36
39
                  int fd = mkstemp_function (templ);
37
 
                  if (fd < 0 || lseek (fd, large, SEEK_SET) != large)
38
 
                    return 1;
39
 
                  close (fd);
 
40
                  if (fd < 0)
 
41
                    result |= 1;
 
42
                  else
 
43
                    {
 
44
                      struct stat st;
 
45
                      if (lseek (fd, large, SEEK_SET) != large)
 
46
                        result |= 2;
 
47
                      if (fstat (fd, &st) < 0)
 
48
                        result |= 4;
 
49
                      else if (st.st_mode & 0077)
 
50
                        result |= 8;
 
51
                      if (close (fd))
 
52
                        result |= 16;
 
53
                    }
40
54
                }
41
 
              return 0;]])],
 
55
              return result;]])],
42
56
          [gl_cv_func_working_mkstemp=yes],
43
57
          [gl_cv_func_working_mkstemp=no],
44
 
          [gl_cv_func_working_mkstemp=no])
 
58
          [gl_cv_func_working_mkstemp="guessing no"])
45
59
        rm -rf conftest.mkstemp
46
60
      ])
47
 
    if test $gl_cv_func_working_mkstemp != yes; then
 
61
    if test "$gl_cv_func_working_mkstemp" != yes; then
48
62
      REPLACE_MKSTEMP=1
49
 
      AC_LIBOBJ([mkstemp])
50
 
      gl_PREREQ_MKSTEMP
51
63
    fi
52
64
  else
53
65
    HAVE_MKSTEMP=0
54
 
    AC_LIBOBJ([mkstemp])
55
 
    gl_PREREQ_MKSTEMP
56
66
  fi
57
67
])
58
68