summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrbuj <[email protected]>2019-09-19 21:26:01 +0200
committerVictor Kareh <[email protected]>2019-10-01 22:06:07 -0400
commit610d0a08d8cb2dea6d380a5bffe6179fdd423589 (patch)
treec7c15154b9f2a19900123177a21e3d5667edf50d
parentf70a69eb07d5b240f1ca7b53bf42077702cded01 (diff)
downloadengrampa-610d0a08d8cb2dea6d380a5bffe6179fdd423589.tar.bz2
engrampa-610d0a08d8cb2dea6d380a5bffe6179fdd423589.tar.xz
Remove internal mkdtemp and define feature test macro
mkdtemp(): /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* Glibc 2.19 and earlier: */ _BSD_SOURCE || /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200809L _POSIX_C_SOURCE 200809L is enabled by _XOPEN_SOURCE >= 700. Ref: http://man7.org/linux/man-pages/man7/feature_test_macros.7.html
-rw-r--r--configure.ac9
-rw-r--r--po/POTFILES.in2
-rw-r--r--src/Makefile.am7
-rw-r--r--src/file-utils.c6
-rw-r--r--src/fr-command-tar.c2
-rw-r--r--src/mkdtemp.c201
-rw-r--r--src/mkdtemp.h40
7 files changed, 3 insertions, 264 deletions
diff --git a/configure.ac b/configure.ac
index 6600379..c221bc4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -113,14 +113,6 @@ AM_CONDITIONAL(ENABLE_JSON_GLIB, test x"$enable_json_glib" != x"no")
dnl ******************************
-dnl Checks for mkdtemp function
-
-mkdtemp_missing=false
-AC_CHECK_FUNC(mkdtemp,
- [AC_DEFINE([HAVE_MKDTEMP], 1, [Have GlibC function to make temp dirs])],
- mkdtemp_missing=true)
-AM_CONDITIONAL(MKDTEMP_MISSING, test x$mkdtemp_missing = xtrue)
-
AC_CHECK_LIB(m, floor)
dnl ==========================================================================
@@ -206,7 +198,6 @@ Configuration:
Source code location: ${srcdir}
Compiler: ${CC}
- Internal mkdtemp: ${mkdtemp_missing}
Caja support: ${enable_caja_actions}
PackageKit support: ${enable_packagekit}
Run in place ${enable_run_in_place}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 129f289..3c6427f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -113,8 +113,6 @@ src/gtk-utils.h
src/java-utils.c
src/java-utils.h
src/main.c
-src/mkdtemp.c
-src/mkdtemp.h
src/open-file.c
src/open-file.h
src/preferences.c
diff --git a/src/Makefile.am b/src/Makefile.am
index f0cd3e7..1f125f8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -6,12 +6,6 @@ bin_PROGRAMS = engrampa
libexec_PROGRAMS = engrampa-server
noinst_PROGRAMS = test-server
-if MKDTEMP_MISSING
-MKDTEMP_FILES=mkdtemp.c mkdtemp.h
-else
-MKDTEMP_FILES=
-endif
-
if RUN_IN_PLACE
privdatadir = $(top_srcdir)/data/
privexecdir = $(abs_top_builddir)/src/commands/
@@ -157,7 +151,6 @@ COMMON_SOURCES = \
rar-utils.h \
typedefs.h \
ui.h \
- $(MKDTEMP_FILES) \
$(BUILT_SOURCES)
if ENABLE_JSON_GLIB
diff --git a/src/file-utils.c b/src/file-utils.c
index c8b1823..55d6bf4 100644
--- a/src/file-utils.c
+++ b/src/file-utils.c
@@ -20,6 +20,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#define _XOPEN_SOURCE 700
+
#include <config.h>
#include <pwd.h>
#include <stdio.h>
@@ -41,10 +43,6 @@
#include "fr-init.h"
-#ifndef HAVE_MKDTEMP
-#include "mkdtemp.h"
-#endif
-
#define BUF_SIZE 4096
#define FILE_PREFIX "file://"
#define FILE_PREFIX_L 7
diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c
index 61800ce..3c47399 100644
--- a/src/fr-command-tar.c
+++ b/src/fr-command-tar.c
@@ -20,7 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#define _XOPEN_SOURCE /* strptime */
+#define _XOPEN_SOURCE 700
#include <config.h>
diff --git a/src/mkdtemp.c b/src/mkdtemp.c
deleted file mode 100644
index 27c49cc..0000000
--- a/src/mkdtemp.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright (C) 1999, 2001-2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* Extracted from misc/mkdtemp.c and sysdeps/posix/tempname.c. */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Specification. */
-#include "mkdtemp.h"
-
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <stdio.h>
-#ifndef TMP_MAX
-# define TMP_MAX 238328
-#endif
-
-#if HAVE_STDINT_H_WITH_UINTMAX || _LIBC
-# include <stdint.h>
-#endif
-
-#if HAVE_INTTYPES_H_WITH_UINTMAX || _LIBC
-# include <inttypes.h>
-#endif
-
-#if HAVE_UNISTD_H || _LIBC
-# include <unistd.h>
-#endif
-
-#if HAVE_GETTIMEOFDAY || _LIBC
-# if HAVE_SYS_TIME_H || _LIBC
-# include <sys/time.h>
-# endif
-#else
-# if HAVE_TIME_H || _LIBC
-# include <time.h>
-# endif
-#endif
-
-#include <sys/stat.h>
-#if STAT_MACROS_BROKEN
-# undef S_ISDIR
-#endif
-#if !defined S_ISDIR && defined S_IFDIR
-# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-#if !S_IRUSR && S_IREAD
-# define S_IRUSR S_IREAD
-#endif
-#if !S_IRUSR
-# define S_IRUSR 00400
-#endif
-#if !S_IWUSR && S_IWRITE
-# define S_IWUSR S_IWRITE
-#endif
-#if !S_IWUSR
-# define S_IWUSR 00200
-#endif
-#if !S_IXUSR && S_IEXEC
-# define S_IXUSR S_IEXEC
-#endif
-#if !S_IXUSR
-# define S_IXUSR 00100
-#endif
-
-#if !_LIBC
-# define __getpid getpid
-# define __gettimeofday gettimeofday
-# define __mkdir mkdir
-#endif
-
-/* Use the widest available unsigned type if uint64_t is not
- available. The algorithm below extracts a number less than 62**6
- (approximately 2**35.725) from uint64_t, so ancient hosts where
- uintmax_t is only 32 bits lose about 3.725 bits of randomness,
- which is better than not having mkstemp at all. */
-#if !defined UINT64_MAX && !defined uint64_t
-# define uint64_t uintmax_t
-#endif
-
-/* These are the characters used in temporary filenames. */
-static const char letters[] =
-"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-/* Generate a temporary file name based on TMPL. TMPL must match the
- rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed
- does not exist at the time of the call to __gen_tempname. TMPL is
- overwritten with the result.
-
- KIND is:
- __GT_DIR: create a directory, which will be mode 0700.
-
- We use a clever algorithm to get hard-to-predict names. */
-static int
-gen_tempname (tmpl)
- char *tmpl;
-{
- int len;
- char *XXXXXX;
- static uint64_t value;
- uint64_t random_time_bits;
- int count, fd = -1;
- int save_errno = errno;
-
- len = strlen (tmpl);
- if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- /* This is where the Xs start. */
- XXXXXX = &tmpl[len - 6];
-
- /* Get some more or less random data. */
-#ifdef RANDOM_BITS
- RANDOM_BITS (random_time_bits);
-#else
-# if HAVE_GETTIMEOFDAY || _LIBC
- {
- struct timeval tv;
- __gettimeofday (&tv, NULL);
- random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
- }
-# else
- random_time_bits = time (NULL);
-# endif
-#endif
- value += random_time_bits ^ __getpid ();
-
- for (count = 0; count < TMP_MAX; value += 7777, ++count)
- {
- uint64_t v = value;
-
- /* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
- XXXXXX[5] = letters[v % 62];
-
- fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
-
- if (fd >= 0)
- {
- __set_errno (save_errno);
- return fd;
- }
- else if (errno != EEXIST)
- return -1;
- }
-
- /* We got out of the loop because we ran out of combinations to try. */
- __set_errno (EEXIST);
- return -1;
-}
-
-/* Generate a unique temporary directory from TEMPLATE.
- The last six characters of TEMPLATE 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 (template)
- char *template;
-{
- if (gen_tempname (template))
- return NULL;
- else
- return template;
-}
diff --git a/src/mkdtemp.h b/src/mkdtemp.h
deleted file mode 100644
index 542d177..0000000
--- a/src/mkdtemp.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Creating a private temporary directory.
- Copyright (C) 2001 Free Software Foundation, Inc.
-
- 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 2, 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, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef PARAMS
-# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
-# define PARAMS(Args) Args
-# else
-# define PARAMS(Args) ()
-# endif
-#endif
-
-#if HAVE_MKDTEMP
-
-/* Get mkdtemp() declaration. */
-#include <stdlib.h>
-
-#else
-
-/* Create a unique temporary directory from TEMPLATE.
- The last six characters of TEMPLATE must be "XXXXXX";
- they are replaced with a string that makes the directory name unique.
- Returns TEMPLATE, or a null pointer if it cannot get a unique name.
- The directory is created mode 700. */
-extern char * mkdtemp PARAMS ((char *template));
-
-#endif