Subversion Repositories Tewi

Rev

Rev 21 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 21 Rev 70
Line 1... Line 1...
1
/* $Id: string.c 21 2024-09-14 12:39:39Z nishi $ */
1
/* $Id: string.c 70 2024-09-19 09:23:45Z nishi $ */
2
 
2
 
3
#include <string.h>
3
#include <string.h>
4
#include <stdlib.h>
4
#include <stdlib.h>
5
#include <stdbool.h>
5
#include <stdbool.h>
6
#include <stdio.h>
6
#include <stdio.h>
7
#include <ctype.h>
7
#include <ctype.h>
8
 
8
 
9
char* cm_strcat(const char* a, const char* b) {
9
char* cm_strcat(const char* a, const char* b) {
-
 
10
	if(a == NULL) a = "";
-
 
11
	if(b == NULL) b = "";
10
	char* str = malloc(strlen(a) + strlen(b) + 1);
12
	char* str = malloc(strlen(a) + strlen(b) + 1);
11
	memcpy(str, a, strlen(a));
13
	memcpy(str, a, strlen(a));
12
	memcpy(str + strlen(a), b, strlen(b));
14
	memcpy(str + strlen(a), b, strlen(b));
13
	str[strlen(a) + strlen(b)] = 0;
15
	str[strlen(a) + strlen(b)] = 0;
14
	return str;
16
	return str;
Line 21... Line 23...
21
	return str;
23
	return str;
22
}
24
}
23
 
25
 
24
char* cm_strdup(const char* str) { return cm_strcat(str, ""); }
26
char* cm_strdup(const char* str) { return cm_strcat(str, ""); }
25
 
27
 
-
 
28
bool cm_endswith(const char* str, const char* end) {
-
 
29
	if(strlen(str) < strlen(end)) return false;
-
 
30
	int i;
-
 
31
	for(i = strlen(str) - strlen(end); i < strlen(str); i++) {
-
 
32
		if(str[i] != end[i - strlen(str) + strlen(end)]) return false;
-
 
33
	}
-
 
34
	return true;
-
 
35
}
-
 
36
 
-
 
37
bool cm_nocase_endswith(const char* str, const char* end) {
-
 
38
	if(strlen(str) < strlen(end)) return false;
-
 
39
	int i;
-
 
40
	for(i = strlen(str) - strlen(end); i < strlen(str); i++) {
-
 
41
		if(tolower(str[i]) != tolower(end[i - strlen(str) + strlen(end)])) return false;
-
 
42
	}
-
 
43
	return true;
-
 
44
}
-
 
45
 
26
char* cm_trimstart(const char* str) {
46
char* cm_trimstart(const char* str) {
27
	int i;
47
	int i;
28
	for(i = 0; str[i] != 0; i++) {
48
	for(i = 0; str[i] != 0; i++) {
29
		if(str[i] != ' ' && str[i] != '\t') {
49
		if(str[i] != ' ' && str[i] != '\t') {
30
			return cm_strdup(str + i);
50
			return cm_strdup(str + i);