31 lines
683 B
C
31 lines
683 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <errno.h>
|
|
|
|
char *mu_replace(const char *prog_name, const char *src, const char *str, const char *fmt) {
|
|
size_t src_len = strlen(src);
|
|
size_t str_len = strlen(str);
|
|
size_t fmt_len = strlen(fmt);
|
|
|
|
char *buf = malloc(src_len - fmt_len + str_len + 1);
|
|
if (buf == NULL) {
|
|
if (prog_name)
|
|
fprintf(stderr, "%s: malloc failed: %s\n", prog_name, strerror(errno));
|
|
|
|
return NULL;
|
|
}
|
|
|
|
strcpy(buf, src);
|
|
|
|
/* REPLACE */
|
|
char *ptr = strstr(buf, fmt);
|
|
if (ptr == NULL)
|
|
return NULL;
|
|
|
|
memmove(ptr + str_len, ptr + fmt_len, strlen(ptr + fmt_len) + 1);
|
|
strncpy(ptr, str, str_len);
|
|
return buf;
|
|
}
|