patches/libgksu1.2-03-mkdtemp.diff
author Jon Tibble <meths@btinternet.com>
Sat, 06 Oct 2012 16:11:50 +0100
branchs11express-2010-11
changeset 22109 db10202d5f6d
parent 16206 5b6c20a76753
permissions -rw-r--r--
Added tag oi_151a_prestable7 for changeset 25dee50cecca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7853
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     1
diff -u -N libgksu1.2-1.3.1/libgksu.orig/gksu-run-helper.c libgksu1.2-1.3.1/libgksu/gksu-run-helper.c
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     2
--- libgksu1.2-1.3.1/libgksu.orig/gksu-run-helper.c	2006-08-01 13:54:43.132218000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     3
+++ libgksu1.2-1.3.1/libgksu/gksu-run-helper.c	2006-08-01 13:30:10.294209000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     4
@@ -27,6 +27,10 @@
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     5
 #include <sys/stat.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     6
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     7
 #include <glib.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     8
+#ifdef __sun
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
     9
+#include "mkdtemp.c"
16206
5b6c20a76753 2009-08-05 Lin Ma <[email protected]>
lin
parents: 7853
diff changeset
    10
+#include <strings.h>
7853
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    11
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    12
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    13
 #include "defines.h"
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    14
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    15
@@ -93,6 +97,9 @@
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    16
       return 1;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    17
     }
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    18
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    19
+  fflush(stdout);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    20
+  fflush(stderr);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    21
+  usleep(10000);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    22
   fprintf (stderr, "gksu: waiting\n");
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    23
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    24
   xauth_file = g_strdup_printf ("%s/.Xauthority",
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    25
@@ -129,7 +136,7 @@
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    26
     setenv ("XAUTHORITY", xauth_file, TRUE);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    27
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    28
     command =
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    29
-      g_strdup_printf ("/usr/X11R6/bin/xauth add %s . \"`cat %s.tmp`\""
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    30
+      g_strdup_printf ("/usr/bin/xauth add %s . \"`cat %s.tmp`\""
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    31
 		       " > /dev/null 2>&1", xauth_display, xauth_file);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    32
 
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    33
     system (command);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    34
diff -u -N libgksu1.2-1.3.1/libgksu.orig/mkdtemp.c libgksu1.2-1.3.1/libgksu/mkdtemp.c
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    35
--- libgksu1.2-1.3.1/libgksu.orig/mkdtemp.c	1970-01-01 08:00:00.000000000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    36
+++ libgksu1.2-1.3.1/libgksu/mkdtemp.c	2006-08-01 11:40:54.843621000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    37
@@ -0,0 +1,204 @@
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    38
+/* Copyright (C) 1999, 2001-2003 Free Software Foundation, Inc.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    39
+   This file is part of the GNU C Library.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    40
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    41
+   The GNU C Library is free software; you can redistribute it and/or
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    42
+   modify it under the terms of the GNU Library General Public License as
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    43
+   published by the Free Software Foundation; either version 2 of the
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    44
+   License, or (at your option) any later version.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    45
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    46
+   The GNU C Library is distributed in the hope that it will be useful,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    47
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    48
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    49
+   Library General Public License for more details.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    50
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    51
+   You should have received a copy of the GNU Library General Public
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    52
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    53
+   write to the Free Software Foundation, Inc., 51 Franklin Street,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    54
+   Fifth Floor, Boston, MA 02110-1301, USA.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    55
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    56
+/* Extracted from misc/mkdtemp.c and sysdeps/posix/tempname.c.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    57
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    58
+#ifdef HAVE_CONFIG_H
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    59
+# include "config.h"
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    60
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    61
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    62
+/* Specification.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    63
+#include "mkdtemp.h"
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    64
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    65
+#include <errno.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    66
+#ifndef __set_errno
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    67
+# define __set_errno(Val) errno = (Val)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    68
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    69
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    70
+#include <stddef.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    71
+#include <stdlib.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    72
+#include <string.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    73
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    74
+#include <stdio.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    75
+#ifndef TMP_MAX
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    76
+# define TMP_MAX 238328
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    77
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    78
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    79
+#if HAVE_STDINT_H || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    80
+# include <stdint.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    81
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    82
+#if HAVE_INTTYPES_H
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    83
+# include <inttypes.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    84
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    85
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    86
+#if HAVE_UNISTD_H || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    87
+# include <unistd.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    88
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    89
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    90
+#if HAVE_GETTIMEOFDAY || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    91
+# if HAVE_SYS_TIME_H || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    92
+#  include <sys/time.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    93
+# endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    94
+#else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    95
+# if HAVE_TIME_H || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    96
+#  include <time.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    97
+# endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    98
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
    99
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   100
+#include <sys/stat.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   101
+#if STAT_MACROS_BROKEN
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   102
+# undef S_ISDIR
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   103
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   104
+#if !defined S_ISDIR && defined S_IFDIR
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   105
+# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   106
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   107
+#if !S_IRUSR && S_IREAD
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   108
+# define S_IRUSR S_IREAD
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   109
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   110
+#if !S_IRUSR
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   111
+# define S_IRUSR 00400
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   112
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   113
+#if !S_IWUSR && S_IWRITE
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   114
+# define S_IWUSR S_IWRITE
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   115
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   116
+#if !S_IWUSR
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   117
+# define S_IWUSR 00200
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   118
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   119
+#if !S_IXUSR && S_IEXEC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   120
+# define S_IXUSR S_IEXEC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   121
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   122
+#if !S_IXUSR
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   123
+# define S_IXUSR 00100
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   124
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   125
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   126
+#ifdef __MINGW32__
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   127
+/* mingw's mkdir() function has 1 argument, but we pass 2 arguments.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   128
+   Therefore we have to disable the argument count checking.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   129
+# define mkdir ((int (*)()) mkdir)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   130
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   131
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   132
+#if !_LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   133
+# define __getpid getpid
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   134
+# define __gettimeofday gettimeofday
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   135
+# define __mkdir mkdir
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   136
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   137
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   138
+/* Use the widest available unsigned type if uint64_t is not
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   139
+   available.  The algorithm below extracts a number less than 62**6
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   140
+   (approximately 2**35.725) from uint64_t, so ancient hosts where
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   141
+   uintmax_t is only 32 bits lose about 3.725 bits of randomness,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   142
+   which is better than not having mkstemp at all.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   143
+#if !defined UINT64_MAX && !defined uint64_t
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   144
+# define uint64_t uintmax_t
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   145
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   146
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   147
+/* These are the characters used in temporary filenames.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   148
+static const char letters[] =
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   149
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   150
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   151
+/* Generate a temporary file name based on TMPL.  TMPL must match the
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   152
+   rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   153
+   does not exist at the time of the call to __gen_tempname.  TMPL is
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   154
+   overwritten with the result.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   155
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   156
+   KIND is:
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   157
+   __GT_DIR:		create a directory, which will be mode 0700.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   158
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   159
+   We use a clever algorithm to get hard-to-predict names. */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   160
+static int
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   161
+gen_tempname (char *tmpl)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   162
+{
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   163
+  int len;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   164
+  char *XXXXXX;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   165
+  static uint64_t value;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   166
+  uint64_t random_time_bits;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   167
+  int count, fd = -1;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   168
+  int save_errno = errno;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   169
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   170
+  len = strlen (tmpl);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   171
+  if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   172
+    {
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   173
+      __set_errno (EINVAL);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   174
+      return -1;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   175
+    }
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   176
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   177
+  /* This is where the Xs start.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   178
+  XXXXXX = &tmpl[len - 6];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   179
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   180
+  /* Get some more or less random data.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   181
+#ifdef RANDOM_BITS
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   182
+  RANDOM_BITS (random_time_bits);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   183
+#else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   184
+# if HAVE_GETTIMEOFDAY || _LIBC
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   185
+  {
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   186
+    struct timeval tv;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   187
+    __gettimeofday (&tv, NULL);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   188
+    random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   189
+  }
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   190
+# else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   191
+  random_time_bits = time (NULL);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   192
+# endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   193
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   194
+  value += random_time_bits ^ __getpid ();
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   195
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   196
+  for (count = 0; count < TMP_MAX; value += 7777, ++count)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   197
+    {
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   198
+      uint64_t v = value;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   199
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   200
+      /* Fill in the random bits.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   201
+      XXXXXX[0] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   202
+      v /= 62;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   203
+      XXXXXX[1] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   204
+      v /= 62;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   205
+      XXXXXX[2] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   206
+      v /= 62;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   207
+      XXXXXX[3] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   208
+      v /= 62;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   209
+      XXXXXX[4] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   210
+      v /= 62;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   211
+      XXXXXX[5] = letters[v % 62];
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   212
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   213
+      fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   214
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   215
+      if (fd >= 0)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   216
+	{
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   217
+	  __set_errno (save_errno);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   218
+	  return fd;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   219
+	}
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   220
+      else if (errno != EEXIST)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   221
+	return -1;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   222
+    }
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   223
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   224
+  /* We got out of the loop because we ran out of combinations to try.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   225
+  __set_errno (EEXIST);
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   226
+  return -1;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   227
+}
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   228
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   229
+/* Generate a unique temporary directory from TEMPLATE.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   230
+   The last six characters of TEMPLATE must be "XXXXXX";
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   231
+   they are replaced with a string that makes the filename unique.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   232
+   The directory is created, mode 700, and its name is returned.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   233
+   (This function comes from OpenBSD.) */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   234
+char *
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   235
+mkdtemp (char *template)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   236
+{
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   237
+  if (gen_tempname (template))
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   238
+    return NULL;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   239
+  else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   240
+    return template;
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   241
+}
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   242
diff -u -N libgksu1.2-1.3.1/libgksu.orig/mkdtemp.h libgksu1.2-1.3.1/libgksu/mkdtemp.h
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   243
--- libgksu1.2-1.3.1/libgksu.orig/mkdtemp.h	1970-01-01 08:00:00.000000000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   244
+++ libgksu1.2-1.3.1/libgksu/mkdtemp.h	2006-08-01 11:40:54.850134000 +0800
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   245
@@ -0,0 +1,40 @@
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   246
+/* Creating a private temporary directory.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   247
+   Copyright (C) 2001 Free Software Foundation, Inc.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   248
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   249
+   This program is free software; you can redistribute it and/or modify
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   250
+   it under the terms of the GNU General Public License as published by
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   251
+   the Free Software Foundation; either version 2, or (at your option)
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   252
+   any later version.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   253
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   254
+   This program is distributed in the hope that it will be useful,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   255
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   256
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   257
+   GNU General Public License for more details.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   258
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   259
+   You should have received a copy of the GNU General Public License
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   260
+   along with this program; if not, write to the Free Software Foundation,
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   261
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   262
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   263
+#ifndef PARAMS
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   264
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   265
+#  define PARAMS(Args) Args
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   266
+# else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   267
+#  define PARAMS(Args) ()
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   268
+# endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   269
+#endif
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   270
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   271
+#if HAVE_MKDTEMP
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   272
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   273
+/* Get mkdtemp() declaration.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   274
+#include <stdlib.h>
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   275
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   276
+#else
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   277
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   278
+/* Create a unique temporary directory from TEMPLATE.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   279
+   The last six characters of TEMPLATE must be "XXXXXX";
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   280
+   they are replaced with a string that makes the directory name unique.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   281
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   282
+   The directory is created mode 700.  */
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   283
+extern char * mkdtemp PARAMS ((char *template));
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   284
+
833e08919db2 * gksu.spec: Create new spec file for gksu
zl156116
parents:
diff changeset
   285
+#endif