#include #include #include "strops.hpp" size_t strops_copy(char *dst, const char *src, size_t size) { size_t srclen; size --; srclen = strlen(src); if (srclen > size) srclen = size; memcpy(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } char* strops_stristr(char* haystack, char* needle) { do { const char* h = haystack; const char* n = needle; while (tolower((unsigned char) *h) == tolower((unsigned char ) *n) && *n) { h++; n++; } if (*n == 0) { return (char *) haystack; } } while (*haystack++); return 0; } void strops_replace(char *buf, size_t buf_size, const char *search, const char *replace) { size_t search_len = strlen(search); size_t replace_len = strlen(replace); char *r = buf; // read pointer char *w = buf; // write pointer while (*r && (w - buf) < (signed int)(buf_size - 1)) { if (strncmp(r, search, search_len) == 0) { // Ensure space size_t remaining = buf_size - (w - buf) - 1; size_t copy_len = (replace_len < remaining) ? replace_len : remaining; memcpy(w, replace, copy_len); w += copy_len; r += search_len; } else { *w++ = *r++; } } *w = '\0'; // terminate }