X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstring.c;h=eaddd181d0b499d33f17617b167a620d0be1013f;hb=c8e606164e7bb405295b2f14e6949d0812cfa342;hp=98692b215b9f00f510470ad2d5c68f7fc4f9c617;hpb=95a7eaaa4a1065334125b65130866f8d1048ddb7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/string.c b/Usermode/Libraries/libc.so_src/string.c index 98692b21..eaddd181 100644 --- a/Usermode/Libraries/libc.so_src/string.c +++ b/Usermode/Libraries/libc.so_src/string.c @@ -19,6 +19,19 @@ EXPORT int strcmp(const char *s1, const char *s2) return (int)*s1 - (int)*s2; } +/** + * \fn EXPORT int strncmp(const char *s1, const char *s2) + * \brief Compare two strings + */ +EXPORT int strncmp(const char *s1, const char *s2, size_t n) +{ + if( n == 0 ) return 0; + while(n -- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') { + s1++; s2++; + } + return (int)*s1 - (int)*s2; +} + /** * \fn EXPORT char *strcpy(char *dst, const char *src) * \brief Copy a string to another @@ -75,18 +88,6 @@ EXPORT int strlen(const char *str) return retval; } -/** - * \fn EXPORT int strncmp(const char *s1, const char *s2, size_t len) - * \brief Compare two strings with a limit - */ -EXPORT int strncmp(const char *s1, const char *s2, size_t len) -{ - while(--len && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') { - s1++; s2++; - } - return (int)*s1 - (int)*s2; -} - /** * \fn EXPORT char *strdup(const char *str) * \brief Duplicate a string using heap memory @@ -101,6 +102,24 @@ EXPORT char *strdup(const char *str) return ret; } +/** + * \fn EXPORT char *strndup(const char *str, size_t maxlen) + * \brief Duplicate a string into the heap with a maximum length + * \param str Input string buffer + * \param maxlen Maximum valid size of the \a str buffer + * \return Heap string with the same value of \a str + */ +EXPORT char *strndup(const char *str, size_t maxlen) +{ + size_t len; + char *ret; + for( len = 0; len < maxlen && str[len]; len ++) ; + ret = malloc( len + 1); + memcpy( ret, str, len ); + ret[len] = '\0'; + return ret; +} + /** * \fn EXPORT char *strchr(char *str, int character) * \brief Locate a character in a string