ucx/string.c

changeset 67
27e67e725d35
parent 47
22fb97e9f58a
child 68
88dbea299440
equal deleted inserted replaced
66:fcfe8c5e9fe1 67:27e67e725d35
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, sstr_t s, ...) { 28 size_t sstrnlen (size_t n, const 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++) {
52 va_end(ap); 52 va_end(ap);
53 53
54 return s; 54 return s;
55 } 55 }
56 56
57 sstr_t sstrncat (size_t n, sstr_t s, sstr_t c1, ...) { 57 sstr_t sstrncat (size_t n, sstr_t s, const sstr_t c1, ...) {
58 va_list ap; 58 va_list ap;
59 va_start(ap, c1); 59 va_start(ap, c1);
60 s.ptr[0] = 0; 60 s.ptr[0] = 0;
61 61
62 size_t len = s.length; 62 size_t len = s.length;
80 va_end(ap); 80 va_end(ap);
81 81
82 return s; 82 return s;
83 } 83 }
84 84
85 sstr_t sstrsubs (sstr_t s, size_t start) { 85 sstr_t sstrsubs (const 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 (sstr_t s, size_t start, size_t length) { 89 sstr_t sstrsubsl (const 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) {
97 new_sstr.ptr = &s.ptr[start]; 97 new_sstr.ptr = &s.ptr[start];
98 new_sstr.length = length; 98 new_sstr.length = length;
99 return new_sstr; 99 return new_sstr;
100 } 100 }
101 101
102 sstr_t* sstrsplit(sstr_t s, sstr_t d, size_t *n) { 102 sstr_t* sstrsplit(const sstr_t s, const sstr_t d, size_t *n) {
103 if (d.length == 0) { 103 if (d.length == 0) {
104 return NULL; 104 return NULL;
105 } 105 }
106 106
107 sstr_t* result; 107 sstr_t* result;
153 free(sv.ptr); 153 free(sv.ptr);
154 154
155 return result; 155 return result;
156 } 156 }
157 157
158 int sstrcmp(sstr_t s1, sstr_t s2) { 158 int sstrcmp(const sstr_t s1, const 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(sstr_t s) { 162 sstr_t sstrdup(const 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;

mercurial