1169695Skan/* rename -- rename a file
2169695Skan   This function is in the public domain. */
3169695Skan
4169695Skan/*
5169695Skan
6169695Skan@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
7169695Skan
8169695SkanRenames a file from @var{old} to @var{new}.  If @var{new} already
9169695Skanexists, it is removed.
10169695Skan
11169695Skan@end deftypefn
12169695Skan
13169695Skan*/
14169695Skan
15169695Skan#include "ansidecl.h"
16169695Skan#ifdef HAVE_CONFIG_H
17169695Skan#include "config.h"
18169695Skan#endif
19169695Skan#include <errno.h>
20169695Skan#ifdef HAVE_UNISTD_H
21169695Skan#include <unistd.h>
22169695Skan#endif
23169695Skan
24169695Skanint
25169695Skanrename (const char *zfrom, const char *zto)
26169695Skan{
27169695Skan  if (link (zfrom, zto) < 0)
28169695Skan    {
29169695Skan      if (errno != EEXIST)
30169695Skan	return -1;
31169695Skan      if (unlink (zto) < 0
32169695Skan	  || link (zfrom, zto) < 0)
33169695Skan	return -1;
34169695Skan    }
35169695Skan  return unlink (zfrom);
36169695Skan}
37