From f95a4a932476be2ba99e2fd081e8d2bc6ea12813 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 15 Dec 2017 09:38:53 -0500 Subject: Import newlib and create makefile --- newlib/libc/stdio/rename.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 newlib/libc/stdio/rename.c (limited to 'newlib/libc/stdio/rename.c') diff --git a/newlib/libc/stdio/rename.c b/newlib/libc/stdio/rename.c new file mode 100644 index 0000000..19a6afd --- /dev/null +++ b/newlib/libc/stdio/rename.c @@ -0,0 +1,86 @@ +/* +FUNCTION +<>---rename a file + +INDEX + rename +INDEX + _rename_r + +ANSI_SYNOPSIS + #include + int rename(const char *<[old]>, const char *<[new]>); + + int _rename_r(void *<[reent]>, + const char *<[old]>, const char *<[new]>); + +TRAD_SYNOPSIS + #include + int rename(<[old]>, <[new]>) + char *<[old]>; + char *<[new]>; + + int _rename_r(<[reent]>, <[old]>, <[new]>) + char *<[reent]>; + char *<[old]>; + char *<[new]>; + +DESCRIPTION +Use <> to establish a new name (the string at <[new]>) for a +file now known by the string at <[old]>. After a successful +<>, the file is no longer accessible by the string at <[old]>. + +If <> fails, the file named <<*<[old]>>> is unaffected. The +conditions for failure depend on the host operating system. + +The alternate function <<_rename_r>> is a reentrant version. The +extra argument <[reent]> is a pointer to a reentrancy structure. + +RETURNS +The result is either <<0>> (when successful) or <<-1>> (when the file +could not be renamed). + +PORTABILITY +ANSI C requires <>, but only specifies that the result on +failure be nonzero. The effects of using the name of an existing file +as <<*<[new]>>> may vary from one implementation to another. + +Supporting OS subroutines required: <>, <>, or <>. +*/ + +#include +#include +#include + +int +_rename_r (ptr, old, new) + struct _reent *ptr; + _CONST char *old; + _CONST char *new; +{ +#ifdef HAVE_RENAME + return _rename (old,new); +#else + if (_link_r (ptr, old, new) == -1) + return -1; + + if (_unlink_r (ptr, old) == -1) + { + /* ??? Should we unlink new? (rhetorical question) */ + return -1; + } +#endif + return 0; +} + +#ifndef _REENT_ONLY + +int +rename (old, new) + _CONST char *old; + _CONST char *new; +{ + return _rename_r (_REENT, old, new); +} + +#endif -- cgit v1.2.3