On Mon, Feb 21, 2011 at 06:48:19PM +0100, Bernd Schmidt wrote: >On 02/19/2011 07:42 PM, Bernhard Reutner-Fischer wrote: > >> Missing signed-off-by. Other than that the Makefile part will not >> apply anymore, I think. > >Ow. I made a complete mess of these patch submissions; I forgot about >the switch to git and worked in an old svn repository. Sorry :-( > >Here's a new version of the two patches. The __libc_ffs functions are >now declared in string.h. I've had another look at the clock_nanosleep >implementation and saw no reason for the use of __libc_clock_nanosleep, >so I've changed the implementation to look like e.g. capget (define the >syscall if it's available, otherwise provide a function that sets errno >to ENOSYS). Nathan, any input on why you chose to do it that way? > >Ok to check in this version? >Signed-off-by: Bernd Schmidt <[email protected]>
Acked-by: Bernhard Reutner-Fischer <[email protected]> > > >Bernd >diff --git a/include/string.h b/include/string.h >index ca22055..66f64e7 100644 >--- a/include/string.h >+++ b/include/string.h >@@ -374,11 +374,10 @@ extern char *rindex (__const char *__s, int __c) > /* Return the position of the first bit set in I, or 0 if none are set. > The least-significant bit is position 1, the most-significant 32. */ > extern int ffs (int __i) __THROW __attribute__ ((__const__)); >-libc_hidden_proto(ffs) > > /* The following two functions are non-standard but necessary for non-32 bit > platforms. */ >-# if 0 /*#ifdef __USE_GNU*/ >+#ifdef __USE_GNU > extern int ffsl (long int __l) __THROW __attribute__ ((__const__)); > # ifdef __GNUC__ > __extension__ extern int ffsll (long long int __ll) >@@ -386,6 +385,13 @@ __extension__ extern int ffsll (long long int __ll) > # endif > # endif > >+#ifdef _LIBC >+extern __typeof(ffs) __libc_ffs; >+libc_hidden_proto(__libc_ffs); >+extern __typeof(ffsll) __libc_ffsll; >+libc_hidden_proto(__libc_ffsll) >+#endif >+ > /* Compare S1 and S2, ignoring case. */ > extern int strcasecmp (__const char *__s1, __const char *__s2) > __THROW __attribute_pure__ __nonnull ((1, 2)); >diff --git a/libc/inet/rpc/svc.c b/libc/inet/rpc/svc.c >index 0f5300c..03b4062 100644 >--- a/libc/inet/rpc/svc.c >+++ b/libc/inet/rpc/svc.c >@@ -452,7 +452,7 @@ svc_getreqset (fd_set *readfds) > setsize = _rpc_dtablesize (); > maskp = (u_int32_t *) readfds->fds_bits; > for (sock = 0; sock < setsize; sock += 32) >- for (mask = *maskp++; (bit = ffs (mask)); mask ^= (1 << (bit - 1))) >+ for (mask = *maskp++; (bit = __libc_ffs (mask)); mask ^= (1 << (bit - 1))) > svc_getreq_common (sock + bit - 1); > } > libc_hidden_def(svc_getreqset) >diff --git a/libc/string/ffs.c b/libc/string/ffs.c >index 22efe4a..4a5336d 100644 >--- a/libc/string/ffs.c >+++ b/libc/string/ffs.c >@@ -5,12 +5,12 @@ > * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. > */ > >-/* ffsl,ffsll */ >- >+#include <limits.h> >+#define ffsl __something_else > #include "_string.h" >- >- >-int ffs(int i) >+#undef ffsl >+ >+int __libc_ffs(int i) > { > #if 1 > /* inlined binary search method */ >@@ -51,4 +51,8 @@ int ffs(int i) > return n; > #endif > } >-libc_hidden_def(ffs) >+libc_hidden_def(__libc_ffs) >+weak_alias(__libc_ffs,ffs) >+#if ULONG_MAX == UINT_MAX >+weak_alias (__libc_ffs, ffsl) >+#endif >diff --git a/libc/string/ffsll.c b/libc/string/ffsll.c >new file mode 100644 >index 0000000..29e9ba9 >--- /dev/null >+++ b/libc/string/ffsll.c >@@ -0,0 +1,40 @@ >+/* Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc. >+ This file is part of the GNU C Library. >+ Contributed by Torbjorn Granlund ([email protected]). >+ >+ The GNU C Library is free software; you can redistribute it and/or >+ modify it under the terms of the GNU Lesser General Public >+ License as published by the Free Software Foundation; either >+ version 2.1 of the License, or (at your option) any later version. >+ >+ The GNU C Library is distributed in the hope that it will be useful, >+ but WITHOUT ANY WARRANTY; without even the implied warranty of >+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ Lesser General Public License for more details. >+ >+ You should have received a copy of the GNU Lesser General Public >+ License along with the GNU C Library; if not, write to the Free >+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA >+ 02111-1307 USA. */ >+ >+#include <limits.h> >+#define ffsl __something_else >+#include "_string.h" >+#undef ffsl >+ >+/* Find the first bit set in I. */ >+int __libc_ffsll (long long int i) >+{ >+ unsigned long long int x = i & -i; >+ >+ if (x <= 0xffffffff) >+ return __libc_ffs (i); >+ else >+ return 32 + __libc_ffs (i >> 32); >+} >+libc_hidden_def(__libc_ffsll) >+ >+weak_alias (__libc_ffsll, ffsll) >+#if ULONG_MAX != UINT_MAX >+weak_alias (__libc_ffsll, ffsl) >+#endif >diff --git a/libc/sysdeps/linux/common/Makefile.in >b/libc/sysdeps/linux/common/Makefile.in >index a6d22e5..1724a83 100644 >--- a/libc/sysdeps/linux/common/Makefile.in >+++ b/libc/sysdeps/linux/common/Makefile.in >@@ -45,7 +45,7 @@ CSRC-$(UCLIBC_HAS_REALTIME) += clock_getres.c >clock_gettime.c clock_settime.c \ > sched_get_priority_max.c sched_get_priority_min.c sched_getscheduler.c \ > sched_rr_get_interval.c sched_setparam.c sched_setscheduler.c sigqueue.c > # > clock_getcpuclockid|clock_nanosleep|mq_timedreceive|mq_timedsend|posix_fadvise|posix_fallocate|posix_madvise|posix_memalign|posix_mem_offset|posix_spawnattr_destroy|posix_spawnattr_init|posix_spawnattr_getflags|posix_spawnattr_setflags|posix_spawnattr_getpgroup|posix_spawnattr_setpgroup|posix_spawnattr_getschedparam|posix_spawnattr_setschedparam|posix_spawnattr_getschedpolicy|posix_spawnattr_setschedpolicy|posix_spawnattr_getsigdefault|posix_spawnattr_setsigdefault|posix_spawnattr_getsigmask|posix_spawnattr_setsigmask|posix_spawnattr_init|posix_spawnattr_setflags|posix_spawnattr_setpgroup|posix_spawnattr_setschedparam|posix_spawnattr_setschedpolicy|posix_spawnattr_setsigdefault|posix_spawnattr_setsigmask|posix_spawn_file_actions_addclose|posix_spawn_file_actions_addopen|posix_spawn_file_actions_adddup2|posix_spawn_file_actions_addopen|posix_spawn_file_actions_destroy|posix_spawn_file_actions_init|posix_spawn_file_actions_init|posix_spawn|posix_spawnp|posix_spawnp|posix_ty ped_mem_get_info|pthread_mutex_tim >edlock|sem_timedwait >-CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise64.c posix_fadvise.c >+CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise64.c posix_fadvise.c >clock_nanosleep.c > CSRC-$(UCLIBC_SUSV4_LEGACY) += utime.c > CSRC-$(UCLIBC_HAS_EPOLL) += epoll.c > CSRC-$(UCLIBC_HAS_XATTR) += xattr.c >diff --git a/libc/sysdeps/linux/common/clock_nanosleep.c >b/libc/sysdeps/linux/common/clock_nanosleep.c >new file mode 100644 >index 0000000..6897439 >--- /dev/null >+++ b/libc/sysdeps/linux/common/clock_nanosleep.c >@@ -0,0 +1,27 @@ >+/* vi: set sw=4 ts=4: */ >+/* >+ * clock_nanosleep() for uClibc >+ * >+ * Copyright (C) 2010 Nathan Sidwell <[email protected]> >+ * >+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. >+ */ >+ >+#include <sys/syscall.h> >+#include <time.h> >+ >+#ifdef __NR_clock_nanosleep >+ >+_syscall4(int, clock_nanosleep, >+ clockid_t, clock_id, int, flags, >+ const struct timespec *, req, struct timespec *, rem) >+#else >+int clock_nanosleep (clockid_t __clock_id, int __flags, >+ __const struct timespec *__req, >+ struct timespec *__rem) >+{ >+ __set_errno (ENOSYS); >+ return -1; >+} >+ >+#endif _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
