Home | History | Annotate | Download | only in libiberty
      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 }
     37