(root)/
gcc-13.2.0/
libiberty/
rename.c
       1  /* rename -- rename a file
       2     This function is in the public domain. */
       3  
       4  /*
       5  
       6  @deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
       7  
       8  Renames a file from @var{old} to @var{new}.  If @var{new} already
       9  exists, it is removed.
      10  
      11  @end deftypefn
      12  
      13  */
      14  
      15  #include "ansidecl.h"
      16  #ifdef HAVE_CONFIG_H
      17  #include "config.h"
      18  #endif
      19  #include <errno.h>
      20  #ifdef HAVE_UNISTD_H
      21  #include <unistd.h>
      22  #endif
      23  
      24  int
      25  rename (const char *zfrom, const char *zto)
      26  {
      27    if (link (zfrom, zto) < 0)
      28      {
      29        if (errno != EEXIST)
      30  	return -1;
      31        if (unlink (zto) < 0
      32  	  || link (zfrom, zto) < 0)
      33  	return -1;
      34      }
      35    return unlink (zfrom);
      36  }