implement ffsl and ffsll functions
authorRich Felker <dalias@aerifal.cx>
Thu, 31 Jul 2014 06:38:23 +0000 (02:38 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 31 Jul 2014 06:38:23 +0000 (02:38 -0400)
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.

include/strings.h
src/misc/ffsl.c [new file with mode: 0644]
src/misc/ffsll.c [new file with mode: 0644]

index 4d7d69c31ab06564e2fcfa19a7d3cc2f204ede0f..db0960b4eb87a5d5883d7c94ad6d9e5dca9d9633 100644 (file)
@@ -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 *);
diff --git a/src/misc/ffsl.c b/src/misc/ffsl.c
new file mode 100644 (file)
index 0000000..0105c66
--- /dev/null
@@ -0,0 +1,7 @@
+#include <strings.h>
+#include "atomic.h"
+
+int ffsl(long i)
+{
+       return i ? a_ctz_l(i)+1 : 0;
+}
diff --git a/src/misc/ffsll.c b/src/misc/ffsll.c
new file mode 100644 (file)
index 0000000..0c5ced8
--- /dev/null
@@ -0,0 +1,7 @@
+#include <strings.h>
+#include "atomic.h"
+
+int ffsll(long long i)
+{
+       return i ? a_ctz_64(i)+1 : 0;
+}