summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-01-21 23:25:13 +0100
committerRichard Braun <rbraun@sceen.net>2018-01-21 23:25:58 +0100
commit06844a6997166e5845b4ef7dfbccf5aac3a6a352 (patch)
tree5df4f53bd052446b706bb983dde42a9de5488d43
parent3b40c8df13ad7012aedeaa327d3143af205610db (diff)
string: add memset and memcmp
-rw-r--r--include/string.h6
-rw-r--r--src/string.c51
2 files changed, 46 insertions, 11 deletions
diff --git a/include/string.h b/include/string.h
index fc17482..36e71da 100644
--- a/include/string.h
+++ b/include/string.h
@@ -25,10 +25,12 @@
#include <stddef.h>
-void * memmove(void *dest, const void *src, size_t n);
void * memcpy(void * restrict dest, const void * restrict src, size_t n);
-char * strcpy(char *dest, const char *src);
+void * memmove(void *dest, const void *src, size_t n);
+void * memset(void *s, int c, size_t n);
+int memcmp(const void *s1, const void *s2, size_t n);
size_t strlen(const char *s);
+char * strcpy(char *dest, const char *src);
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
char * strerror(int errnum);
diff --git a/src/string.c b/src/string.c
index 60ac49e..fbca323 100644
--- a/src/string.c
+++ b/src/string.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Richard Braun.
+ * Copyright (c) 2017-2018 Richard Braun.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -75,19 +75,37 @@ memmove(void *dest, const void *src, size_t n)
return dest;
}
-char *
-strcpy(char *dest, const char *src)
+void *
+memset(void *s, int c, size_t n)
{
- char *tmp;
+ char *buffer;
+ size_t i;
- tmp = dest;
+ buffer = s;
- while ((*dest = *src) != '\0') {
- dest++;
- src++;
+ for (i = 0; i < n; i++) {
+ buffer[i] = c;
}
- return tmp;
+ return s;
+}
+
+int
+memcmp(const void *s1, const void *s2, size_t n)
+{
+ const unsigned char *a1, *a2;
+ size_t i;
+
+ a1 = s1;
+ a2 = s2;
+
+ for (i = 0; i < n; i++) {
+ if (a1[i] != a2[i]) {
+ return (int)a1[i] - (int)a2[i];
+ }
+ }
+
+ return 0;
}
size_t
@@ -104,6 +122,21 @@ strlen(const char *s)
return (s - start);
}
+char *
+strcpy(char *dest, const char *src)
+{
+ char *tmp;
+
+ tmp = dest;
+
+ while ((*dest = *src) != '\0') {
+ dest++;
+ src++;
+ }
+
+ return tmp;
+}
+
int
strcmp(const char *s1, const char *s2)
{