summaryrefslogtreecommitdiff
path: root/src/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c62
1 files changed, 61 insertions, 1 deletions
diff --git a/src/string.c b/src/string.c
index f1876f2..3beb426 100644
--- a/src/string.c
+++ b/src/string.c
@@ -3,8 +3,10 @@
#include <stddef.h>
#include <stdint.h>
+#include "string.h"
-int memcmp(void *s1, const void *s2, size_t n)
+
+int memcmp(const void *s1, const void *s2, size_t n)
{
unsigned char *a = (unsigned char *) s1;
unsigned char *b = (unsigned char *) s2;
@@ -48,6 +50,52 @@ size_t strlen(const char *s)
return len;
}
+// BELOW: YET UNTESTED
+char *strcpy(char *dest, const char *src) {
+ for (size_t i=0;src[i]!='\0';i++) dest[i] = src[i];
+ return dest;
+}
+
+char *strncpy(char *dest, const char *src, size_t n) {
+ for (size_t i=0;src[i]!='\0'&&i<n;i++) dest[i] = src[i];
+ return dest;
+}
+
+int strcmp(const char *s1, const char *s2) {
+ size_t i;
+ for (i = 0;s1[i]!='\0'&&s2[i]!='\0';i++)
+ if (s1[i] != s2[i]) break;
+ return s1[i] - s2[i];
+}
+
+int strncmp(const char *s1, const char *s2, size_t n) {
+ size_t i;
+ for (i = 0;s1[i]!='\0'&&s2[i]!='\0'&&i<n;i++)
+ if (s1[i] != s2[i]) break;
+ return s1[i] - s2[i];
+}
+
+char *strstr(const char *haystack, const char *needle) {
+ int l = strlen(needle);
+ for (const char *r=haystack;*r!='\0';r++)
+ if (strncmp(r, needle, l) == 0) return (char *) r;
+ return NULL;
+}
+
+char *strchr(const char *s, int c) {
+ const char *r = s;
+ for (;*r!='\0';r++)
+ if (*r == c) return (char *) r;
+
+ if (c == 0) return (char *) r;
+ return NULL;
+}
+
+size_t strspn(const char *s, const char *accept) {
+ size_t i;
+ for (i=0;accept[i]!='\0'&&accept[i]==s[i];i++);
+ return i;
+}
char *hex(uint32_t n, char *buf)
{
@@ -62,3 +110,15 @@ char *hex(uint32_t n, char *buf)
}
return buf;
}
+
+#define R(a, b) (c >= a && c <= b)
+bool isupper(char c) {return R('A', 'Z');}
+bool islower(char c) {return R('a', 'z');}
+bool isalpha(char c) {return isupper(c) || islower(c);}
+bool isdigit(char c) {return R('0', '9');}
+bool isxdigit(char c) {return isdigit(c) || R('A', 'F') || R('a', 'f');}
+bool isalnum(char c) {return isdigit(c) || isalpha(c);}
+bool isspace(char c) {return c == ' ' || (unsigned)c-'\t' < 5;}
+
+char toupper(char c) {if (islower(c)) return (c + ('A' - 'a')); else return c;}
+char tolower(char c) {if (isupper(c)) return (c - ('A' - 'a')); else return c;}