diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/inet/rpc/svc.c | 2 | ||||
| -rw-r--r-- | libc/string/ffs.c | 16 | ||||
| -rw-r--r-- | libc/string/ffsll.c | 40 | 
3 files changed, 51 insertions, 7 deletions
diff --git a/libc/inet/rpc/svc.c b/libc/inet/rpc/svc.c index 0f5300c8b..03b406200 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 22efe4a1e..4a5336d47 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 000000000..29e9ba9d9 --- /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 (tege@sics.se). + +   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  | 
