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

Reply via email to