From 06844a6997166e5845b4ef7dfbccf5aac3a6a352 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Sun, 21 Jan 2018 23:25:13 +0100 Subject: string: add memset and memcmp --- include/string.h | 6 ++++-- src/string.c | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 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 -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) { -- cgit v1.2.3