summaryrefslogtreecommitdiff
path: root/apps/snmpnetstat/ffs.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/snmpnetstat/ffs.c')
-rw-r--r--apps/snmpnetstat/ffs.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/apps/snmpnetstat/ffs.c b/apps/snmpnetstat/ffs.c
new file mode 100644
index 0000000..5997339
--- /dev/null
+++ b/apps/snmpnetstat/ffs.c
@@ -0,0 +1,38 @@
+/* $OpenBSD: ffs.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */
+
+/*
+ * Public domain.
+ * Written by Dale Rahn.
+ */
+
+/*
+ * ffs -- vax ffs instruction
+ */
+int
+_ffs(int mask)
+{
+ int bit;
+ unsigned int r = mask;
+ static const signed char t[16] = {
+ -28, 1, 2, 1,
+ 3, 1, 2, 1,
+ 4, 1, 2, 1,
+ 3, 1, 2, 1
+ };
+
+ bit = 0;
+ if (!(r & 0xffff)) {
+ bit += 16;
+ r >>= 16;
+ }
+ if (!(r & 0xff)) {
+ bit += 8;
+ r >>= 8;
+ }
+ if (!(r & 0xf)) {
+ bit += 4;
+ r >>= 4;
+ }
+
+ return (bit + t[ r & 0xf ]);
+}