Hi, __libc_X() functions are relicts of locking implemented in linuxthreads_old, they (or their name) is only relevant, if linuxthreads_old is enabled
Regards, Peter -------- Original-Nachricht -------- > Datum: Fri, 4 May 2012 08:16:34 -0400 > Von: Mark Salter <msal...@redhat.com> > An: uclibc@uclibc.org > Betreff: [PATCH] fcntl cleanup > This patch aims to clean up the current support for fcntl in the > following ways: > > * replace multiple istances of #ifdef selection between fcntl > and fcntl64 syscalls with a single INLINE_SYSCALL_FCNTL macro. > The fcntl64 syscall only exists on 32-bit systems and is > identical to the fcntl syscall except for the addition of > commands to support locking with 64-bit file offsets. > > * only check for unsupported 64-bit locking commands in the > case of no LFS support or no fcntl64 syscall. This eliminates > unnecessary code for configurations which do support the > 64-bit locking commands. > > * add check for unsupported 64-bit locking commands which was > missing from the native threads case. > > * in the non-native threads case, __libc_fcntl and __fcntl_nocancel > are identical, so make __libc_fcntl an alias of __fcntl_nocancel > to avoid two functions with the same code. > > Signed-off-by: Mark Salter <msal...@redhat.com> > --- > libc/sysdeps/linux/common/__syscall_fcntl.c | 55 > ++++++++++++-------------- > 1 files changed, 25 insertions(+), 30 deletions(-) > > diff --git a/libc/sysdeps/linux/common/__syscall_fcntl.c > b/libc/sysdeps/linux/common/__syscall_fcntl.c > index 6d4c339..06146b4 100644 > --- a/libc/sysdeps/linux/common/__syscall_fcntl.c > +++ b/libc/sysdeps/linux/common/__syscall_fcntl.c > @@ -16,6 +16,17 @@ > #include <fcntl.h> > #include <bits/wordsize.h> > > +/* > + * The fcntl64 syscall only exists on 32-Bit systems. It is identical to > + * the fcntl syscall except for additial commands providing 32-bit > systems > + * with file locking operations using 64-bit offsets. > + */ > +#if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 > +#define INLINE_SYSCALL_FCNTL(a,b,c) INLINE_SYSCALL(fcntl64, 3, (a), (b), > (c)) > +#else > +#define INLINE_SYSCALL_FCNTL(a,b,c) INLINE_SYSCALL(fcntl, 3, (a), (b), > (c)) > +#endif > + > extern __typeof(fcntl) __libc_fcntl; > libc_hidden_proto(__libc_fcntl) > > @@ -28,20 +39,17 @@ int __fcntl_nocancel (int fd, int cmd, ...) > arg = va_arg (ap, void *); > va_end (ap); > > -# if __WORDSIZE == 32 > +# if __WORDSIZE == 32 && !(defined __UCLIBC_HAS_LFS__ && defined > __NR_fcntl64) > if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) { > -# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 > - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > -# else > __set_errno(ENOSYS); > return -1; > -# endif > } > # endif > - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > + return INLINE_SYSCALL_FCNTL (fd, cmd, arg); > } > libc_hidden_def(__fcntl_nocancel) > > +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ > int __libc_fcntl (int fd, int cmd, ...) > { > va_list ap; > @@ -51,39 +59,26 @@ int __libc_fcntl (int fd, int cmd, ...) > arg = va_arg (ap, void *); > va_end (ap); > > -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ > - if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64)) > -# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 > - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > -# else > - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > -# endif > +#if __WORDSIZE == 32 && !(defined __UCLIBC_HAS_LFS__ && defined > __NR_fcntl64) > + if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) { > + __set_errno(ENOSYS); > + return -1; > + } > +#endif > > + if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64)) > + return INLINE_SYSCALL_FCNTL (fd, cmd, arg); > int oldtype = LIBC_CANCEL_ASYNC (); > > -# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 > - int result = INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > -# else > - int result = INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > -# endif > + int result = INLINE_SYSCALL_FCNTL (fd, cmd, arg); > > LIBC_CANCEL_RESET (oldtype); > > return result; > +} > #else > -# if __WORDSIZE == 32 > - if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) { > -# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 > - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); > -# else > - __set_errno(ENOSYS); > - return -1; > -# endif > - } > -# endif > - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); > +strong_alias(__fcntl_nocancel,__libc_fcntl) > #endif > -} > libc_hidden_def(__libc_fcntl) > > libc_hidden_proto(fcntl) > -- > 1.7.9.1 > > _______________________________________________ > uClibc mailing list > uClibc@uclibc.org > http://lists.busybox.net/mailman/listinfo/uclibc -- Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de _______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc