summaryrefslogtreecommitdiffstats
path: root/StringUtils.c
diff options
context:
space:
mode:
authorDavid Hunt <dhunt@iolanthe.attlocal.net>2015-08-19 13:43:20 -0300
committerHisham Muhammad <hisham@gobolinux.org>2015-08-19 13:45:20 -0300
commit5e602f18d5f619f7dba6d9fccefacdb991db391d (patch)
treed72cbc763c7dcd27022b223f1daf6dcb5ac8bcb6 /StringUtils.c
parentf2c053a88497f3ad5ae786c16ecf1275212c13be (diff)
Rename String to StringUtils.
Fixes building on case-insensitive filesystems where String.h gets confused with <string.h>. From d734dacea0a10d0465dad4e95b3421511e7da112 Mon Sep 17 00:00:00 2001 From: David Hunt <dhunt@iolanthe.attlocal.net> Date: Sat, 11 Jul 2015 20:56:31 -0500 Subject: [PATCH 1/8] Rename String to StringUtils
Diffstat (limited to 'StringUtils.c')
-rw-r--r--StringUtils.c129
1 files changed, 129 insertions, 0 deletions
diff --git a/StringUtils.c b/StringUtils.c
new file mode 100644
index 00000000..5d1cc165
--- /dev/null
+++ b/StringUtils.c
@@ -0,0 +1,129 @@
+/*
+htop - String.c
+(C) 2004-2011 Hisham H. Muhammad
+Released under the GNU GPL, see the COPYING file
+in the source distribution for its full text.
+*/
+
+#include "StringUtils.h"
+
+#include "config.h"
+
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+/*{
+#define String_startsWith(s, match) (strstr((s), (match)) == (s))
+#define String_contains_i(s1, s2) (strcasestr(s1, s2) != NULL)
+}*/
+
+char* String_cat(const char* s1, const 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(const 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;
+}
+
+inline int String_eq(const char* s1, const char* s2) {
+ if (s1 == NULL || s2 == NULL) {
+ if (s1 == NULL && s2 == NULL)
+ return 1;
+ else
+ return 0;
+ }
+ return (strcmp(s1, s2) == 0);
+}
+
+char** String_split(const char* s, char sep, int* n) {
+ *n = 0;
+ 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;
+ char** newOut = (char**) realloc(out, sizeof(char*) * blocks);
+ if (newOut) {
+ out = newOut;
+ } else {
+ blocks -= rate;
+ break;
+ }
+ }
+ 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++;
+ }
+ char** newOut = realloc(out, sizeof(char*) * (ctr + 1));
+ if (newOut) {
+ out = newOut;
+ }
+ out[ctr] = NULL;
+ *n = ctr;
+ return out;
+}
+
+void String_freeArray(char** s) {
+ for (int i = 0; s[i] != NULL; i++) {
+ free(s[i]);
+ }
+ free(s);
+}
+
+char* String_getToken(const char* line, const unsigned short int numMatch) {
+ const unsigned short int len = strlen(line);
+ char inWord = 0;
+ unsigned short int count = 0;
+ char match[50];
+
+ unsigned short int foundCount = 0;
+
+ for (unsigned short int i = 0; i < len; i++) {
+ char lastState = inWord;
+ inWord = line[i] == ' ' ? 0:1;
+
+ if (lastState == 0 && inWord == 1)
+ count++;
+
+ if(inWord == 1){
+ if (count == numMatch && line[i] != ' ' && line[i] != '\0' && line[i] != '\n' && line[i] != (char)EOF) {
+ match[foundCount] = line[i];
+ foundCount++;
+ }
+ }
+ }
+
+ match[foundCount] = '\0';
+ return((char*)strdup(match));
+}

© 2014-2024 Faster IT GmbH | imprint | privacy policy