From ca48eb65e9f332484b1fe00ae373a1121091cbfb Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 23 Apr 2008 11:13:24 +0000 Subject: [PATCH] * libc/include/stdio.h (renameat): Declare for Cygwin. (symlinkat): Ditto. * libc/include/sys/unistd.h (readlink): Align declaration to POSIX. (faccessat): Declare for Cygwin. (fchownat): Ditto. (linkat): Ditto. (readlinkat): Ditto. * libc/include/sys/_default_fcntl.h (AT_FDCWD): Define for Cygwin. (AT_EACCESS): Ditto. (AT_SYMLINK_NOFOLLOW): Ditto. (AT_SYMLINK_FOLLOW): Ditto. (AT_REMOVEDIR): Ditto. (futimesat): Declare for Cygwin. (openat): Ditto. (unlinkat): Ditto. * libc/include/sys/stat.h (fchmodat): Ditto. (fstatat): Ditto. (mkdirat): Ditto. (mkfifoat): Ditto. (mknodat): Ditto. --- newlib/ChangeLog | 23 +++++++++++++++++++++++ newlib/libc/include/stdio.h | 5 ++++- newlib/libc/include/sys/_default_fcntl.h | 16 ++++++++++++++++ newlib/libc/include/sys/stat.h | 8 ++++++++ newlib/libc/include/sys/unistd.h | 14 +++++++++++++- 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 083e868e8..c6480a0d0 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,26 @@ +2008-04-23 Corinna Vinschen + + * libc/include/stdio.h (renameat): Declare for Cygwin. + (symlinkat): Ditto. + * libc/include/sys/unistd.h (readlink): Align declaration to POSIX. + (faccessat): Declare for Cygwin. + (fchownat): Ditto. + (linkat): Ditto. + (readlinkat): Ditto. + * libc/include/sys/_default_fcntl.h (AT_FDCWD): Define for Cygwin. + (AT_EACCESS): Ditto. + (AT_SYMLINK_NOFOLLOW): Ditto. + (AT_SYMLINK_FOLLOW): Ditto. + (AT_REMOVEDIR): Ditto. + (futimesat): Declare for Cygwin. + (openat): Ditto. + (unlinkat): Ditto. + * libc/include/sys/stat.h (fchmodat): Ditto. + (fstatat): Ditto. + (mkdirat): Ditto. + (mkfifoat): Ditto. + (mknodat): Ditto. + 2008-04-16 Patrick Mansfield * libc/machine/spu/sys/errno.h: Use _impure_data, not _reent_data. diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h index 51c72a447..3f4fa6724 100644 --- a/newlib/libc/include/stdio.h +++ b/newlib/libc/include/stdio.h @@ -339,7 +339,10 @@ FILE * _EXFUN(fmemopen, (void *, size_t, const char *)); /* getdelim - see __getdelim for now */ /* getline - see __getline for now */ FILE * _EXFUN(open_memstream, (char **, size_t *)); -/* renameat - unimplemented for now */ +#if defined (__CYGWIN__) +int _EXFUN(renameat, (int, const char *, int, const char *)); +int _EXFUN(symlinkat, (const char *, int, const char *)); +#endif int _EXFUN(vdprintf, (int, const char *, __VALIST) _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); # endif diff --git a/newlib/libc/include/sys/_default_fcntl.h b/newlib/libc/include/sys/_default_fcntl.h index b10503933..2a5dede44 100644 --- a/newlib/libc/include/sys/_default_fcntl.h +++ b/newlib/libc/include/sys/_default_fcntl.h @@ -131,6 +131,17 @@ extern "C" { #define F_UNLKSYS 4 /* remove remote locks for a given system */ #endif /* !_POSIX_SOURCE */ +#ifdef __CYGWIN__ +/* Special descriptor value to denote the cwd in calls to openat(2) etc. */ +#define AT_FDCWD -2 + +/* Flag values for faccessat2) et al. */ +#define AT_EACCESS 1 +#define AT_SYMLINK_NOFOLLOW 2 +#define AT_SYMLINK_FOLLOW 4 +#define AT_REMOVEDIR 8 +#endif + /*#include */ #ifndef __CYGWIN__ @@ -166,6 +177,11 @@ struct eflock { extern int open _PARAMS ((const char *, int, ...)); extern int creat _PARAMS ((const char *, mode_t)); extern int fcntl _PARAMS ((int, int, ...)); +#ifdef __CYGWIN__ +extern int futimesat _PARAMS ((int, const char *, const struct timeval *)); +extern int openat _PARAMS ((int, const char *, int, ...)); +extern int unlinkat _PARAMS ((int, const char *, int)); +#endif /* Provide _ prototypes for functions provided by some versions of newlib. */ diff --git a/newlib/libc/include/sys/stat.h b/newlib/libc/include/sys/stat.h index 1eb16ecd3..949508d6f 100644 --- a/newlib/libc/include/sys/stat.h +++ b/newlib/libc/include/sys/stat.h @@ -129,6 +129,14 @@ int _EXFUN(lstat,( const char *__path, struct stat *__buf )); int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev )); #endif +#if defined (__CYGWIN__) +int _EXFUN(fchmodat, (int, const char *, mode_t, int)); +int _EXFUN(fstatat, (int, const char *, struct __stat64 *, int)); +int _EXFUN(mkdirat, (int, const char *, mode_t)); +int _EXFUN(mkfifoat, (int, const char *, mode_t)); +int _EXFUN(mknodat, (int, const char *, mode_t, dev_t)); +#endif + /* Provide prototypes for most of the _ names that are provided in newlib for some compilers. */ #ifdef _COMPILING_NEWLIB diff --git a/newlib/libc/include/sys/unistd.h b/newlib/libc/include/sys/unistd.h index 025951819..fa7361a25 100644 --- a/newlib/libc/include/sys/unistd.h +++ b/newlib/libc/include/sys/unistd.h @@ -46,6 +46,9 @@ int _EXFUN(execlp, (const char *__file, const char *, ... )); int _EXFUN(execv, (const char *__path, char * const __argv[] )); int _EXFUN(execve, (const char *__path, char * const __argv[], char * const __envp[] )); int _EXFUN(execvp, (const char *__file, char * const __argv[] )); +#if defined(__CYGWIN__) +int _EXFUN(faccessat, (int __dirfd, const char *__path, int __mode, int __flags)); +#endif #if defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__) int _EXFUN(fchdir, (int __fildes)); #endif @@ -53,6 +56,9 @@ int _EXFUN(fchmod, (int __fildes, mode_t __mode )); #if !defined(__INSIDE_CYGWIN__) int _EXFUN(fchown, (int __fildes, uid_t __owner, gid_t __group )); #endif +#if defined(__CYGWIN__) +int _EXFUN(fchownat, (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags)); +#endif pid_t _EXFUN(fork, (void )); long _EXFUN(fpathconf, (int __fd, int __name )); int _EXFUN(fsync, (int __fd)); @@ -99,6 +105,9 @@ int _EXFUN(isatty, (int __fildes )); int _EXFUN(lchown, (const char *__path, uid_t __owner, gid_t __group )); #endif int _EXFUN(link, (const char *__path1, const char *__path2 )); +#if defined(__CYGWIN__) +int _EXFUN(linkat, (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags )); +#endif int _EXFUN(nice, (int __nice_value )); #if !defined(__INSIDE_CYGWIN__) off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence )); @@ -226,7 +235,10 @@ void _EXFUN(sync, (void)); int _EXFUN(sync, (void)); #endif -int _EXFUN(readlink, (const char *__path, char *__buf, int __buflen)); +ssize_t _EXFUN(readlink, (const char *__path, char *__buf, size_t __buflen)); +#if defined(__CYGWIN__) +ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__path, char *__buf, size_t __buflen)); +#endif int _EXFUN(symlink, (const char *__name1, const char *__name2)); #define F_OK 0