From d6231bab89d634da5564491196b7c478db038505 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Sat, 4 Mar 2006 18:16:49 +0000 Subject: Initial import. --- String.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 String.c (limited to 'String.c') diff --git a/String.c b/String.c new file mode 100644 index 00000000..00cd4f2c --- /dev/null +++ b/String.c @@ -0,0 +1,160 @@ +/* +htop +(C) 2004-2006 Hisham H. Muhammad +Released under the GNU GPL, see the COPYING file +in the source distribution for its full text. +*/ + +#define _GNU_SOURCE +#include "String.h" +#include +#include +#include +#include + +#include "debug.h" + +inline void String_delete(char* s) { + free(s); +} + +inline char* String_copy(char* orig) { + return strdup(orig); +} + +char* String_cat(char* s1, char* s2) { + int l1 = strlen(s1); + int l2 = strlen(s2); + char* out = malloc(l1 + l2 + 1); + strncpy(out, s1, l1); + strncpy(out+l1, s2, l2+1); + return out; +} + +char* String_trim(char* in) { + while (in[0] == ' ' || in[0] == '\t' || in[0] == '\n') { + in++; + } + int len = strlen(in); + while (len > 0 && (in[len-1] == ' ' || in[len-1] == '\t' || in[len-1] == '\n')) { + len--; + } + char* out = malloc(len+1); + strncpy(out, in, len); + out[len] = '\0'; + return out; +} + +char* String_copyUpTo(char* orig, char upTo) { + int len; + + int origLen = strlen(orig); + char* at = strchr(orig, upTo); + if (at != NULL) + len = at - orig; + else + len = origLen; + char* copy = (char*) malloc(len+1); + strncpy(copy, orig, len); + copy[len] = '\0'; + return copy; +} + +char* String_sub(char* orig, int from, int to) { + char* copy; + int len; + + len = strlen(orig); + if (to > len) + to = len; + if (from > len) + to = len; + len = to-from+1; + copy = (char*) malloc(len+1); + strncpy(copy, orig+from, len); + copy[len] = '\0'; + return copy; +} + +void String_println(char* s) { + printf("%s\n", s); +} + +void String_print(char* s) { + printf("%s", s); +} + +void String_printInt(int i) { + printf("%i", i); +} + +void String_printPointer(void* p) { + printf("%p", p); +} + +inline int String_eq(char* s1, char* s2) { + if (s1 == NULL || s2 == NULL) { + if (s1 == NULL && s2 == NULL) + return 1; + else + return 0; + } + return (strcmp(s1, s2) == 0); +} + +inline int String_startsWith(char* s, char* match) { + return (strstr(s, match) == s); +} + +char** String_split(char* s, char sep) { + const int rate = 10; + char** out = (char**) malloc(sizeof(char*) * rate); + int ctr = 0; + int blocks = rate; + char* where; + while ((where = strchr(s, sep)) != NULL) { + int size = where - s; + char* token = (char*) malloc(size + 1); + strncpy(token, s, size); + token[size] = '\0'; + out[ctr] = token; + ctr++; + if (ctr == blocks) { + blocks += rate; + out = (char**) realloc(out, sizeof(char*) * blocks); + } + s += size + 1; + } + if (s[0] != '\0') { + int size = strlen(s); + char* token = (char*) malloc(size + 1); + strncpy(token, s, size + 1); + out[ctr] = token; + ctr++; + } + out = realloc(out, sizeof(char*) * (ctr + 1)); + out[ctr] = NULL; + return out; +} + +void String_freeArray(char** s) { + for (int i = 0; s[i] != NULL; i++) { + free(s[i]); + } + free(s); +} + +int String_startsWith_i(char* s, char* match) { + return (strncasecmp(s, match, strlen(match)) == 0); +} + +int String_contains_i(char* s, char* match) { + int lens = strlen(s); + int lenmatch = strlen(match); + for (int i = 0; i < lens-lenmatch; i++) { + if (strncasecmp(s, match, strlen(match)) == 0) + return 1; + s++; + } + return 0; +} -- cgit v1.2.3