MCPcopy Create free account
hub / github.com/acl-dev/acl / split2

Function split2

lib_acl/samples/benchmark/split/main.c:21–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19#define SPACE_LEFT(a) ((a)->len - (a)->argc - 1)
20
21static ACL_ARGV *split2(const char *str, const char *sep) {
22#if 0
23 size_t len = strlen(str), i, start = 0;
24 ACL_ARGV *argv = acl_argv_alloc(5);
25
26 for (i = 0; i < len; i++) {
27 if (strchr(sep, str[i]) != NULL) {
28 if (start < i) {
29 size_t n = i - start;
30 char *buf = (char*) acl_mymalloc(n + 1);
31
32 if (SPACE_LEFT(argv) <= 0) {
33 argv_extend(argv);
34 }
35 memcpy(buf, str + start, n);
36 buf[n] = 0;
37 argv->argv[argv->argc++] = buf;
38 }
39 start = i + 1;
40 }
41 }
42
43 if (start < len) {
44 size_t n = len - start;
45 char *buf = (char*) acl_mymalloc(n + 1);
46
47 if (SPACE_LEFT(argv) <= 0) {
48 argv_extend(argv);
49 }
50 memcpy(buf, str + start, n);
51 buf[n] = 0;
52 argv->argv[argv->argc++] = buf;
53 }
54#else
55 const char *ptr = str, *start = str;
56 ACL_ARGV *argv = acl_argv_alloc(5);
57
58 while (*ptr != 0) {
59 if (strchr(sep, (int) (*ptr)) != NULL) {
60 if (start < ptr) {
61 size_t n = ptr - start;
62 char *buf = (char*) acl_mymalloc(n + 1);
63
64 if (SPACE_LEFT(argv) <= 0) {
65 argv_extend(argv);
66 }
67 memcpy(buf, start, n);
68 buf[n] = 0;
69 argv->argv[argv->argc++] = buf;
70 }
71 start = ptr + 1;
72 }
73 ptr++;
74 }
75
76 if (*start) {
77 char *buf = (char*) acl_mystrdup(start);
78

Callers 3

test2Function · 0.85
test6Function · 0.85
test7Function · 0.85

Calls 3

acl_argv_allocFunction · 0.85
memcpyFunction · 0.85
argv_extendFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…