Index: uspace/lib/posix/strings.c
===================================================================
--- uspace/lib/posix/strings.c	(revision 6817eba10030a28743541ff86eeb296a080b9f74)
+++ uspace/lib/posix/strings.c	(revision 8ecef91f85b311c2aa5ad421b6e684984e5080ad)
@@ -42,4 +42,6 @@
 #include "ctype.h"
 
+#include "libc/mem.h"
+
 /**
  *
@@ -49,6 +51,32 @@
 int posix_ffs(int i)
 {
-	// TODO
-	not_implemented();
+	if (i == 0) {
+		return 0;
+	}
+
+	int result = 0;
+
+	// XXX: assumes at most 32-bit int
+	if (!(i & 0xFFFF)) {
+		result |= 16;
+		i >>= 16;
+	}
+	if (!(i & 0xFF)) {
+		result |= 8;
+		i >>= 8;
+	}
+	if (!(i & 0xF)) {
+		result |= 4;
+		i >>= 4;
+	}
+	if (!(i & 0x3)) {
+		result |= 2;
+		i >>= 2;
+	}
+	if (!(i & 0x1)) {
+		result |= 1;
+	}
+
+	return result + 1;
 }
 
@@ -96,6 +124,5 @@
 int posix_bcmp(const void *mem1, const void *mem2, size_t n)
 {
-	// TODO
-	not_implemented();
+	return bcmp(mem1, mem2, n);
 }
 
@@ -108,6 +135,6 @@
 void posix_bcopy(const void *dest, void *src, size_t n)
 {
-	// TODO
-	not_implemented();
+	/* Note that memmove has different order of arguments. */
+	memmove(src, dest, n);
 }
 
@@ -119,6 +146,5 @@
 void posix_bzero(void *mem, size_t n)
 {
-	// TODO
-	not_implemented();
+	bzero(mem, n);
 }
 
