binutils-gdb/gdb/gnulib/import/mkostemp.c
Tom Tromey b3279b601e Use mkostemp, not mkstemp
I noticed that gdb could leak file descriptors coming from mkstemp.
This patch fixes the problem by importing the gnulib mkostemp instead,
and then changing gdb to pass O_CLOEXEC.

A small gnulib patch was needed.  This has already been accepted
upstream.

gdb/ChangeLog
2018-10-27  Tom Tromey  <tom@tromey.com>

	* unittests/scoped_mmap-selftests.c (test_normal): Use
	gdb_mkostemp_cloexec.
	* unittests/scoped_fd-selftests.c (test_destroy, test_release):
	Use gdb_mkostemp_cloexec.
	* gnulib/aclocal-m4-deps.mk, gnulib/aclocal.m4,
	gnulib/config.in, gnulib/configure,
	gnulib/import/Makefile.am, gnulib/import/Makefile.in,
	gnulib/import/m4/gnulib-cache.m4,
	gnulib/import/m4/gnulib-comp.m4: Update.
	* gnulib/import/m4/mkostemp.m4: New file.
	* gnulib/import/m4/mkstemp.m4: Remove.
	* gnulib/import/mkostemp.c: New file.
	* gnulib/import/mkstemp.m4: Remove.
	* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES): Remove
	mkstemp, add mkostemp.  Apply new patch.
	* gnulib/import/stdlib.in.h: Apply patch.
	* gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch:
	New file.
	* dwarf-index-write.c (write_psymtabs_to_index): Use
	gdb_mkostemp_cloexec.
	* common/filestuff.h (gdb_mkostemp_cloexec): New function.
2018-10-27 11:58:41 -06:00

46 lines
1.4 KiB
C

/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2016 Free Software
Foundation, Inc.
This file is derived from the one in 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/>. */
#if !_LIBC
# include <config.h>
#endif
#include <stdlib.h>
#if !_LIBC
# include "tempname.h"
# define __gen_tempname gen_tempname
# ifndef __GTFILE
# define __GT_FILE GT_FILE
# endif
#endif
#include <stdio.h>
#ifndef __GT_FILE
# define __GT_FILE 0
#endif
/* Generate a unique temporary file name from XTEMPLATE.
The last six characters of XTEMPLATE must be "XXXXXX";
they are replaced with a string that makes the file name unique.
Then open the file and return a fd. */
int
mkostemp (char *xtemplate, int flags)
{
return __gen_tempname (xtemplate, 0, flags, __GT_FILE);
}