Browse Source

implement ffsl and ffsll functions

per the resolution of Austin Group issue #617, these are accepted for
XSI option in POSIX future and thus I'm treating them as standard
functions.
Rich Felker 10 years ago
parent
commit
ecc082c61b
3 changed files with 16 additions and 0 deletions
  1. 2 0
      include/strings.h
  2. 7 0
      src/misc/ffsl.c
  3. 7 0
      src/misc/ffsll.c

+ 2 - 0
include/strings.h

@@ -22,6 +22,8 @@ char *rindex (const char *, int);
 
 #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)  || defined(_BSD_SOURCE)
 int ffs (int);
+int ffsl (long);
+int ffsll (long long);
 #endif
 
 int strcasecmp (const char *, const char *);

+ 7 - 0
src/misc/ffsl.c

@@ -0,0 +1,7 @@
+#include <strings.h>
+#include "atomic.h"
+
+int ffsl(long i)
+{
+	return i ? a_ctz_l(i)+1 : 0;
+}

+ 7 - 0
src/misc/ffsll.c

@@ -0,0 +1,7 @@
+#include <strings.h>
+#include "atomic.h"
+
+int ffsll(long long i)
+{
+	return i ? a_ctz_64(i)+1 : 0;
+}