45 #define MIN_PRINTF_ALLOC 16
65 char *buf = malloc(size *
sizeof(
char));
70 va_copy(args, orig_args);
71 returnsize = vsnprintf(buf, size, fmt, args);
75 if (returnsize < size) {
81 size = returnsize + 1;
82 buf = malloc(size *
sizeof(
char));
84 va_copy(args, orig_args);
85 returnsize = vsnprintf(buf, size, fmt, args);
88 assert(returnsize <= size);
99 va_start(args, first);
100 const char *arg = first;
103 arg = va_arg(args,
const char *);
109 char *str = malloc(len*
sizeof(
char) + 1);
113 va_start(args, first);
114 const char *arg = first;
118 arg = va_arg(args,
const char *);
135 size_t lena = strlen(a);
136 size_t lenb = strlen(b);
138 size_t minlen = lena < lenb ? lena : lenb;
140 for (; i < minlen; i++)
151 assert(delim != NULL);
156 size_t delim_len = strlen(delim);
157 size_t len = strlen(str);
188 size_t len = strlen(str);
193 while (pos < len && str[pos] ==
' ')
200 while (pos < len && str[pos] !=
' ')
204 size_t len_off = off1 - off0;
205 char *tok = malloc(len_off + 1);
206 memcpy(tok, &str[off0], len_off);
236 char *end = str + strlen(str);
237 for(; ptr != end && isspace(*ptr); ptr++);
239 memmove(str, ptr, strlen(ptr)+1);
247 char *ptr = str + strlen(str) - 1;
248 for(; ptr+1 != str && isspace(*ptr); ptr--);
255 assert(haystack != NULL);
256 assert(needle != NULL);
259 int hlen = (int) strlen(haystack);
260 int nlen = (int) strlen(needle);
262 if (nlen > hlen)
return -1;
264 for (
int i = 0; i <= hlen - nlen; i++) {
265 if (!strncmp(&haystack[i], needle, nlen))
274 assert(haystack != NULL);
275 assert(needle != NULL);
278 int hlen = (int) strlen(haystack);
279 int nlen = (int) strlen(needle);
282 for (
int i = 0; i <= hlen - nlen; i++) {
283 if (!strncmp(&haystack[i], needle, nlen))
295 size_t slen = strlen(s);
296 for (
size_t i = 0; i < slen; i++) {
297 if (s[i] >=
'A' && s[i] <=
'Z')
298 s[i] = s[i] +
'a' -
'A';
308 size_t slen = strlen(s);
309 for (
size_t i = 0; i < slen; i++) {
310 if (s[i] >=
'a' && s[i] <=
'z')
311 s[i] = s[i] - (
'a' -
'A');
322 sb->
s = calloc(sb->
alloc, 1);
344 sb->
s = realloc(sb->
s, sb->
alloc);
347 sb->
s[sb->
size++] = c;
356 char back = sb->
s[--sb->
size];
367 char *buf = malloc(size *
sizeof(
char));
373 returnsize = vsnprintf(buf, size, fmt, args);
376 if (returnsize >= size) {
379 size = returnsize + 1;
380 buf = malloc(size *
sizeof(
char));
383 returnsize = vsnprintf(buf, size, fmt, args);
386 assert(returnsize <= size);
398 size_t len = strlen(str);
402 sb->
s = realloc(sb->
s, sb->
alloc);
405 memcpy(&sb->
s[sb->
size], str, len);
422 return strdup(sb->
s);
447 sf->
len = strlen(sf->
s);
480 return sf->
s[sf->
pos] != 0 && sf->
pos <= sf->
len;
486 assert(sf->
pos <= sf->
len);
488 char c = sf->
s[sf->
pos++];
502 assert(sf->
pos <= sf->
len);
504 if (sf->
pos + length > sf->
len)
505 length = sf->
len - sf->
pos;
507 char *substr = calloc(length+1,
sizeof(
char));
508 for (
size_t i = 0 ; i < length ; i++)
516 assert(sf->
pos <= sf->
len);
518 return sf->
s[sf->
pos];
524 assert(sf->
pos <= sf->
len);
526 if (sf->
pos + length > sf->
len)
527 length = sf->
len - sf->
pos;
529 char *substr = calloc(length+1,
sizeof(
char));
530 memcpy(substr, &sf->
s[sf->
pos], length*
sizeof(
char));
538 assert(sf->
pos <= sf->
len);
547 assert(sf->
pos <= sf->
len);
549 size_t len = strlen(str);
551 for (
size_t i = 0; i < len; i++) {
561 assert(haystack != NULL);
562 assert(needle != NULL);
564 size_t lens = strlen(haystack);
565 size_t lenneedle = strlen(needle);
567 if (lenneedle > lens)
570 return !strncmp(&haystack[lens - lenneedle], needle, lenneedle);
578 assert(haystack != NULL);
579 assert(needle != NULL);
586 while (haystack[pos] == needle[pos] && needle[pos] != 0)
589 return (needle[pos] == 0);
594 assert(haystack != NULL);
595 assert(needles != NULL);
596 assert(num_needles >= 0);
598 for (
int i = 0; i < num_needles; i++) {
599 assert(needles[i] != NULL);
609 assert(haystack != NULL);
610 assert(needles != NULL);
611 assert(num_needles >= 0);
613 for (
int i = 0; i < num_needles; i++) {
614 assert(needles[i] != NULL);
615 if (!strcmp(haystack, needles[i]))
625 assert(startidx <= strlen(str)+1);
626 assert(endidx >= startidx);
627 assert(endidx <= strlen(str)+1);
629 size_t blen = endidx - startidx;
630 char *b = malloc(blen + 1);
631 memcpy(b, &str[startidx], blen);
636 char *
str_replace(
const char *haystack,
const char *needle,
const char *replacement)
638 assert(haystack != NULL);
639 assert(needle != NULL);
640 assert(replacement != NULL);
643 size_t haystack_len = strlen(haystack);
644 size_t needle_len = strlen(needle);
647 while (pos < haystack_len) {
656 if (needle_len == 0 && haystack_len == 0)
667 va_start(ap, _haystack);
669 char *haystack = strdup(_haystack);
672 char *needle = va_arg(ap,
char*);
676 char *replacement = va_arg(ap,
char*);
677 char *tmp =
str_replace(haystack, needle, replacement);
693 char *s = malloc(salloc);
696 int slen = vsnprintf(s, salloc, fmt, ap);
699 if (slen >= salloc) {
700 s = realloc(s, slen + 1);
702 vsprintf((
char*) s, fmt, ap);
706 buf = realloc(buf, *bufpos + slen + 1);
709 memcpy(&buf[*bufpos], s, slen + 1);
717 if (c >=
'a' && c <=
'z')
720 if (c >=
'A' && c <=
'Z')
723 if (c >=
'0' && c <=
'9')
734 size_t inlen = strlen(in);
740 while (inpos < inlen) {
742 if (in[inpos] !=
'$') {
750 char *varname = NULL;
758 char *env = getenv(varname);