(root)/
glibc-2.38/
libio/
oldtmpfile.c
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <shlib-compat.h>
      19  #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
      20  
      21  #define _IO_USE_OLD_IO_FILE
      22  #include <stdio.h>
      23  #include <unistd.h>
      24  #include <iolibio.h>
      25  
      26  /* This returns a new stream opened on a temporary file (generated
      27     by tmpnam).  The file is opened with mode "w+b" (binary read/write).
      28     If we couldn't generate a unique filename or the file couldn't
      29     be opened, NULL is returned.  */
      30  FILE *
      31  attribute_compat_text_section
      32  __old_tmpfile (void)
      33  {
      34    char buf[FILENAME_MAX];
      35    int fd;
      36    FILE *f;
      37  
      38    if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0))
      39      return NULL;
      40    fd = __gen_tempname (buf, 0, 0, __GT_FILE);
      41    if (fd < 0)
      42      return NULL;
      43  
      44    /* Note that this relies on the Unix semantics that
      45       a file is not really removed until it is closed.  */
      46    (void) __unlink (buf);
      47  
      48    if ((f = _IO_old_fdopen (fd, "w+b")) == NULL)
      49      __close (fd);
      50  
      51    return f;
      52  }
      53  
      54  compat_symbol (libc, __old_tmpfile, tmpfile, GLIBC_2_0);
      55  #endif