summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/strings.h2
-rw-r--r--src/misc/ffsl.c7
-rw-r--r--src/misc/ffsll.c7
3 files changed, 16 insertions, 0 deletions
diff --git a/include/strings.h b/include/strings.h
index 4d7d69c3..db0960b4 100644
--- a/include/strings.h
+++ b/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 *);
diff --git a/src/misc/ffsl.c b/src/misc/ffsl.c
new file mode 100644
index 00000000..0105c66a
--- /dev/null
+++ b/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;
+}
diff --git a/src/misc/ffsll.c b/src/misc/ffsll.c
new file mode 100644
index 00000000..0c5ced82
--- /dev/null
+++ b/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;
+}