QUOTE: Kindness is always fashionable.

libstr

A util library for dealing with strings in C

libstr.h (1437B)


      1#ifndef LIB_STR_H
      2#define LIB_STR_H
      3
      4void str_append_len(char **buffer, char *value, int len);
      5void str_append(char **buffer, char *value);
      6void str_appendf(char **buffer, const char *format, ...);
      7char *str_replace_all(char *buffer, char *str, char *replacement);
      8
      9#ifdef LIB_STR_IMPL
     10
     11#include <stdio.h>
     12#include <stdlib.h>
     13#include <string.h>
     14#include <stdarg.h>
     15
     16void str_append_len(char **buffer, char *value, int len) {
     17  int buffer_len = 0;
     18  if (*buffer != NULL) {
     19    buffer_len = strlen(*buffer);
     20  }
     21  *buffer = realloc(*buffer, sizeof(char) * (buffer_len + len + 1));
     22  memcpy(*buffer + buffer_len, value, len);
     23  (*buffer)[buffer_len + len] = '\0';
     24}
     25
     26void str_append(char **buffer, char *value) {
     27  int len = strlen(value);
     28  str_append_len(buffer, value, len);
     29}
     30
     31void str_appendf(char **buffer, const char *format, ...) {
     32  va_list args;
     33  va_start(args, format);
     34  char str[1000];
     35  vsnprintf(str, sizeof(str), format, args);
     36  str_append(buffer, str);
     37  va_end(args);
     38}
     39
     40char *str_replace_all(char *buffer, char *str, char *replacement) {
     41  char *result = NULL;
     42  int str_len = strlen(str);
     43  for (int i = 0; i < (int) strlen(buffer); i++) {
     44    char *ptr = &buffer[i];
     45    if (strncmp(ptr, str, str_len) == 0) {
     46      str_append(&result, replacement);
     47      i += str_len - 1;
     48    }
     49    else {
     50      str_append_len(&result, &buffer[i], 1);
     51    }
     52  }
     53  return result;
     54}
     55
     56#endif /* LIB_STR_IMPL */
     57#endif /* LIB_STR_H */