mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-18 04:19:21 +08:00
2007-09-18 Jeff Johnston <jjohnstn@redhat.com>
* libc/reent/renamer.c: New file. * libc/reent/Makefile.am: Add new file. * libc/reent/Makefile.in: Regenerated. * libc/stdio/rename.c: Break out _rename_r code into reent/renamer.c and add check for rename syscall.
This commit is contained in:
parent
4090f565a8
commit
3908c98592
@ -1,3 +1,11 @@
|
||||
2007-09-18 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* libc/reent/renamer.c: New file.
|
||||
* libc/reent/Makefile.am: Add new file.
|
||||
* libc/reent/Makefile.in: Regenerated.
|
||||
* libc/stdio/rename.c: Break out _rename_r code into reent/renamer.c
|
||||
and add check for rename syscall.
|
||||
|
||||
2007-09-17 Eric Blake <ebb9@byu.net>
|
||||
|
||||
Obey POSIX on printf("%.s", (char*)NULL).
|
||||
|
@ -41,6 +41,7 @@ GENERAL_SOURCES = \
|
||||
lseekr.c \
|
||||
openr.c \
|
||||
readr.c \
|
||||
renamer.c \
|
||||
signalr.c \
|
||||
signgam.c \
|
||||
sbrkr.c \
|
||||
@ -75,6 +76,7 @@ CHEWOUT_FILES = \
|
||||
lseekr.def \
|
||||
openr.def \
|
||||
readr.def \
|
||||
renamer.def \
|
||||
signalr.def \
|
||||
sbrkr.def \
|
||||
statr.def \
|
||||
|
@ -60,10 +60,11 @@ am__objects_1 = lib_a-closer.$(OBJEXT) lib_a-reent.$(OBJEXT) \
|
||||
lib_a-fstatr.$(OBJEXT) lib_a-getreent.$(OBJEXT) \
|
||||
lib_a-gettimeofdayr.$(OBJEXT) lib_a-linkr.$(OBJEXT) \
|
||||
lib_a-lseekr.$(OBJEXT) lib_a-openr.$(OBJEXT) \
|
||||
lib_a-readr.$(OBJEXT) lib_a-signalr.$(OBJEXT) \
|
||||
lib_a-signgam.$(OBJEXT) lib_a-sbrkr.$(OBJEXT) \
|
||||
lib_a-statr.$(OBJEXT) lib_a-timesr.$(OBJEXT) \
|
||||
lib_a-unlinkr.$(OBJEXT) lib_a-writer.$(OBJEXT)
|
||||
lib_a-readr.$(OBJEXT) lib_a-renamer.$(OBJEXT) \
|
||||
lib_a-signalr.$(OBJEXT) lib_a-signgam.$(OBJEXT) \
|
||||
lib_a-sbrkr.$(OBJEXT) lib_a-statr.$(OBJEXT) \
|
||||
lib_a-timesr.$(OBJEXT) lib_a-unlinkr.$(OBJEXT) \
|
||||
lib_a-writer.$(OBJEXT)
|
||||
@HAVE_STDIO64_DIR_TRUE@am__objects_2 = lib_a-fstat64r.$(OBJEXT) \
|
||||
@HAVE_STDIO64_DIR_TRUE@ lib_a-lseek64r.$(OBJEXT) \
|
||||
@HAVE_STDIO64_DIR_TRUE@ lib_a-open64r.$(OBJEXT)
|
||||
@ -81,8 +82,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||
libreent_la_LIBADD =
|
||||
am__objects_6 = closer.lo reent.lo impure.lo fcntlr.lo fstatr.lo \
|
||||
getreent.lo gettimeofdayr.lo linkr.lo lseekr.lo openr.lo \
|
||||
readr.lo signalr.lo signgam.lo sbrkr.lo statr.lo timesr.lo \
|
||||
unlinkr.lo writer.lo
|
||||
readr.lo renamer.lo signalr.lo signgam.lo sbrkr.lo statr.lo \
|
||||
timesr.lo unlinkr.lo writer.lo
|
||||
@HAVE_STDIO64_DIR_TRUE@am__objects_7 = fstat64r.lo lseek64r.lo \
|
||||
@HAVE_STDIO64_DIR_TRUE@ open64r.lo
|
||||
am__objects_8 = $(am__objects_7)
|
||||
@ -298,6 +299,7 @@ GENERAL_SOURCES = \
|
||||
lseekr.c \
|
||||
openr.c \
|
||||
readr.c \
|
||||
renamer.c \
|
||||
signalr.c \
|
||||
signgam.c \
|
||||
sbrkr.c \
|
||||
@ -325,6 +327,7 @@ CHEWOUT_FILES = \
|
||||
lseekr.def \
|
||||
openr.def \
|
||||
readr.def \
|
||||
renamer.def \
|
||||
signalr.def \
|
||||
sbrkr.def \
|
||||
statr.def \
|
||||
@ -470,6 +473,12 @@ lib_a-readr.o: readr.c
|
||||
lib_a-readr.obj: readr.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-readr.obj `if test -f 'readr.c'; then $(CYGPATH_W) 'readr.c'; else $(CYGPATH_W) '$(srcdir)/readr.c'; fi`
|
||||
|
||||
lib_a-renamer.o: renamer.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-renamer.o `test -f 'renamer.c' || echo '$(srcdir)/'`renamer.c
|
||||
|
||||
lib_a-renamer.obj: renamer.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-renamer.obj `if test -f 'renamer.c'; then $(CYGPATH_W) 'renamer.c'; else $(CYGPATH_W) '$(srcdir)/renamer.c'; fi`
|
||||
|
||||
lib_a-signalr.o: signalr.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-signalr.o `test -f 'signalr.c' || echo '$(srcdir)/'`signalr.c
|
||||
|
||||
|
74
newlib/libc/reent/renamer.c
Normal file
74
newlib/libc/reent/renamer.c
Normal file
@ -0,0 +1,74 @@
|
||||
/* Reentrant version of rename system call. */
|
||||
|
||||
#include <reent.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <_syslist.h>
|
||||
|
||||
/* Some targets provides their own versions of these functions. Those
|
||||
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
|
||||
|
||||
#ifdef _REENT_ONLY
|
||||
#ifndef REENTRANT_SYSCALLS_PROVIDED
|
||||
#define REENTRANT_SYSCALLS_PROVIDED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef REENTRANT_SYSCALLS_PROVIDED
|
||||
|
||||
/* We use the errno variable used by the system dependent layer. */
|
||||
#undef errno
|
||||
extern int errno;
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
<<_rename_r>>---Reentrant version of rename
|
||||
|
||||
INDEX
|
||||
_rename_r
|
||||
|
||||
ANSI_SYNOPSIS
|
||||
#include <reent.h>
|
||||
int _rename_r(struct _reent *<[ptr]>,
|
||||
int <[fd]>, int <[cmd]>, <[arg]>);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <reent.h>
|
||||
int _rename_r(<[ptr]>, <[fd]>, <[cmd]>, <[arg]>)
|
||||
struct _reent *<[ptr]>;
|
||||
int <[fd]>;
|
||||
int <[cmd]>;
|
||||
int <[arg]>;
|
||||
|
||||
DESCRIPTION
|
||||
This is a reentrant version of <<rename>>. It
|
||||
takes a pointer to the global data block, which holds
|
||||
<<errno>>.
|
||||
*/
|
||||
|
||||
int
|
||||
_DEFUN (_rename_r, (ptr, old, new),
|
||||
struct _reent *ptr _AND
|
||||
_CONST char *old _AND
|
||||
_CONST char *new)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
#ifdef HAVE_RENAME
|
||||
errno = 0;
|
||||
if ((ret = _rename (old, new)) == -1 && errno != 0)
|
||||
ptr->_errno = errno;
|
||||
#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 ret;
|
||||
}
|
||||
|
||||
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
|
@ -21,27 +21,17 @@ FUNCTION
|
||||
|
||||
INDEX
|
||||
rename
|
||||
INDEX
|
||||
_rename_r
|
||||
|
||||
ANSI_SYNOPSIS
|
||||
#include <stdio.h>
|
||||
int rename(const char *<[old]>, const char *<[new]>);
|
||||
|
||||
int _rename_r(struct _reent *<[reent]>,
|
||||
const char *<[old]>, const char *<[new]>);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <stdio.h>
|
||||
int rename(<[old]>, <[new]>)
|
||||
char *<[old]>;
|
||||
char *<[new]>;
|
||||
|
||||
int _rename_r(<[reent]>, <[old]>, <[new]>)
|
||||
struct _reent *<[reent]>;
|
||||
char *<[old]>;
|
||||
char *<[new]>;
|
||||
|
||||
DESCRIPTION
|
||||
Use <<rename>> to establish a new name (the string at <[new]>) for a
|
||||
file now known by the string at <[old]>. After a successful
|
||||
@ -50,9 +40,6 @@ file now known by the string at <[old]>. After a successful
|
||||
If <<rename>> 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).
|
||||
@ -70,27 +57,6 @@ Supporting OS subroutines required: <<link>>, <<unlink>>, or <<rename>>.
|
||||
#include <stdio.h>
|
||||
#include <sys/unistd.h>
|
||||
|
||||
int
|
||||
_DEFUN(_rename_r, (ptr, old, new),
|
||||
struct _reent *ptr _AND
|
||||
_CONST char *old _AND
|
||||
_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
|
||||
|
Loading…
x
Reference in New Issue
Block a user