mirror of
https://gittea.dev/nova/th.git
synced 2025-12-14 19:50:10 -05:00
migration of concat to macro based implementation
This commit is contained in:
40
backend.c
40
backend.c
@@ -1,14 +1,40 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
char* concat(const char *s1, const char *s2){
|
||||
const size_t len1 = strlen(s1);
|
||||
const size_t len2 = strlen(s2);
|
||||
char *result = malloc(len1 + len2 + 1);
|
||||
memcpy(result, s1, len1);
|
||||
memcpy(result + len1, s2, len2 + 1);
|
||||
return result;
|
||||
#define concat(out, s1, s2, _free) { \
|
||||
concat## _free(out, s1, s2); \
|
||||
}
|
||||
|
||||
#define concat0(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
out = result;
|
||||
|
||||
|
||||
#define concat1(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s1); \
|
||||
out = result;
|
||||
|
||||
#define concat2(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s2); \
|
||||
out = result;
|
||||
|
||||
#define concat3(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s1); \
|
||||
free(s2); \
|
||||
out = result;
|
||||
|
||||
|
||||
char* smartstrcasestr(const char *haystack, const char *needle){
|
||||
char smart = 0;
|
||||
char *ret;
|
||||
|
||||
Reference in New Issue
Block a user