9 #include <strings.h> |
9 #include <strings.h> |
10 #include <stdarg.h> |
10 #include <stdarg.h> |
11 |
11 |
12 #include "string.h" |
12 #include "string.h" |
13 |
13 |
14 sstr_t sstr (char *s) { |
14 sstr_t sstr(char *s) { |
15 sstr_t string; |
15 sstr_t string; |
16 string.ptr = s; |
16 string.ptr = s; |
17 string.length = strlen(s); |
17 string.length = strlen(s); |
18 return string; |
18 return string; |
19 } |
19 } |
20 |
20 |
21 sstr_t sstrn (char *s, size_t n) { |
21 sstr_t sstrn(char *s, size_t n) { |
22 sstr_t string; |
22 sstr_t string; |
23 string.ptr = s; |
23 string.ptr = s; |
24 string.length = n; |
24 string.length = n; |
25 return string; |
25 return string; |
26 } |
26 } |
27 |
27 |
28 size_t sstrnlen (size_t n, const sstr_t s, ...) { |
28 size_t sstrnlen(size_t n, sstr_t s, ...) { |
29 va_list ap; |
29 va_list ap; |
30 size_t size = s.length; |
30 size_t size = s.length; |
31 va_start(ap, s); |
31 va_start(ap, s); |
32 |
32 |
33 for (int i=0;i<n-1;i++) { |
33 for (int i=0;i<n-1;i++) { |
80 va_end(ap); |
80 va_end(ap); |
81 |
81 |
82 return s; |
82 return s; |
83 } |
83 } |
84 |
84 |
85 sstr_t sstrsubs (const sstr_t s, size_t start) { |
85 sstr_t sstrsubs(sstr_t s, size_t start) { |
86 return sstrsubsl (s, start, s.length-start); |
86 return sstrsubsl (s, start, s.length-start); |
87 } |
87 } |
88 |
88 |
89 sstr_t sstrsubsl (const sstr_t s, size_t start, size_t length) { |
89 sstr_t sstrsubsl(sstr_t s, size_t start, size_t length) { |
90 sstr_t new_sstr; |
90 sstr_t new_sstr; |
91 if (start < 0 || start >= s.length || length < 0) { |
91 if (start < 0 || start >= s.length || length < 0) { |
92 return s; |
92 return s; |
93 } |
93 } |
94 if (length > s.length-start) { |
94 if (length > s.length-start) { |
153 free(sv.ptr); |
153 free(sv.ptr); |
154 |
154 |
155 return result; |
155 return result; |
156 } |
156 } |
157 |
157 |
158 int sstrcmp(const sstr_t s1, const sstr_t s2) { |
158 int sstrcmp(sstr_t s1, sstr_t s2) { |
159 return strncmp(s1.ptr, s2.ptr, s1.length>s2.length ? s2.length: s1.length); |
159 return strncmp(s1.ptr, s2.ptr, s1.length>s2.length ? s2.length: s1.length); |
160 } |
160 } |
161 |
161 |
162 sstr_t sstrdup(const sstr_t s) { |
162 sstr_t sstrdup(sstr_t s) { |
163 sstr_t newstring; |
163 sstr_t newstring; |
164 newstring.ptr = (char*) malloc(s.length + 1); |
164 newstring.ptr = (char*) malloc(s.length + 1); |
165 if (newstring.ptr != NULL) { |
165 if (newstring.ptr != NULL) { |
166 newstring.length = s.length; |
166 newstring.length = s.length; |
167 newstring.ptr[newstring.length] = 0; |
167 newstring.ptr[newstring.length] = 0; |