1 /*
2 FUNCTION
3 <<rename>>---rename a file
4
5 INDEX
6 rename
7 INDEX
8 _rename_r
9
10 ANSI_SYNOPSIS
11 #include <stdio.h>
12 int rename(const char *<[old]>, const char *<[new]>);
13
14 int _rename_r(void *<[reent]>,
15 const char *<[old]>, const char *<[new]>);
16
17 TRAD_SYNOPSIS
18 #include <stdio.h>
19 int rename(<[old]>, <[new]>)
20 char *<[old]>;
21 char *<[new]>;
22
23 int _rename_r(<[reent]>, <[old]>, <[new]>)
24 char *<[reent]>;
25 char *<[old]>;
26 char *<[new]>;
27
28 DESCRIPTION
29 Use <<rename>> to establish a new name (the string at <[new]>) for a
30 file now known by the string at <[old]>. After a successful
31 <<rename>>, the file is no longer accessible by the string at <[old]>.
32
33 If <<rename>> fails, the file named <<*<[old]>>> is unaffected. The
34 conditions for failure depend on the host operating system.
35
36 The alternate function <<_rename_r>> is a reentrant version. The
37 extra argument <[reent]> is a pointer to a reentrancy structure.
38
39 RETURNS
40 The result is either <<0>> (when successful) or <<-1>> (when the file
41 could not be renamed).
42
43 PORTABILITY
44 ANSI C requires <<rename>>, but only specifies that the result on
45 failure be nonzero. The effects of using the name of an existing file
46 as <<*<[new]>>> may vary from one implementation to another.
47
48 Supporting OS subroutines required: <<link>>, <<unlink>>, or <<rename>>.
49 */
50
51 #include <stdio.h>
52 #include <sys/unistd.h>
53 #include <reent.h>
54
55 int
_rename_r(ptr,old,new)56 _rename_r (ptr, old, new)
57 struct _reent *ptr;
58 _CONST char *old;
59 _CONST char *new;
60 {
61 #ifdef HAVE_RENAME
62 return _rename (old,new);
63 #else
64 if (_link_r (ptr, old, new) == -1)
65 return -1;
66
67 if (_unlink_r (ptr, old) == -1)
68 {
69 /* ??? Should we unlink new? (rhetorical question) */
70 return -1;
71 }
72 #endif
73 return 0;
74 }
75
76 #ifndef _REENT_ONLY
77
78 int
rename(old,new)79 rename (old, new)
80 _CONST char *old;
81 _CONST char *new;
82 {
83 return _rename_r (_REENT, old, new);
84 }
85
86 #endif
87