Initial commit.
diff --git a/src/std.c b/src/std.c
new file mode 100644
index 0000000..39ba972
--- /dev/null
+++ b/src/std.c
@@ -0,0 +1,84 @@
+#include "std.h"
+
+void *memset(void *s, int c, size_t n)
+{
+ char *p = (char *)s;
+ while (n--)
+ *p++ = c;
+ return s;
+}
+
+/*
+ * Calculates the length of the provided null-terminated string.
+ */
+size_t strlen(const char *str)
+{
+ const char *p = str;
+ while (*p)
+ p++;
+ return p - str;
+}
+
+void *memcpy(void *dst, const void *src, size_t n)
+{
+ char *x = dst;
+ const char *y = src;
+
+ while (n--) {
+ *x = *y;
+ x++;
+ y++;
+ }
+
+ return dst;
+}
+
+void *memmove(void *dst, const void *src, size_t n)
+{
+ char *x;
+ const char *y;
+
+ if (dst < src)
+ return memcpy(dst, src, n);
+
+ x = (char *)dst + n - 1;
+ y = (const char *)src + n - 1;
+
+ while (n--) {
+ *x = *y;
+ x--;
+ y--;
+ }
+
+ return dst;
+}
+
+int memcmp(const void *a, const void *b, size_t n)
+{
+ const char *x = a;
+ const char *y = b;
+
+ while (n--) {
+ if (*x != *y)
+ return *x - *y;
+ x++;
+ y++;
+ }
+
+ return 0;
+}
+
+int strcmp(const char *a, const char *b)
+{
+ const char *x = a;
+ const char *y = b;
+
+ while (*x != 0 && *y != 0) {
+ if (*x != *y)
+ return *x - *y;
+ x++;
+ y++;
+ }
+
+ return *x - *y;
+}