util.c - ledit - Text editor (WIP) | |
git clone git://lumidify.org/ledit.git (fast, but not encrypted) | |
git clone https://lumidify.org/ledit.git (encrypted, but very slow) | |
git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/… | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
util.c (1119B) | |
--- | |
1 #include <string.h> | |
2 #include <stddef.h> | |
3 #include "memory.h" | |
4 | |
5 char * | |
6 next_utf8(char *str) { | |
7 while ((*str & 0xC0) == 0x80) | |
8 str++; | |
9 return str; | |
10 } | |
11 | |
12 size_t | |
13 next_utf8_len(char *str, size_t len) { | |
14 size_t cur = 0; | |
15 while (cur < len && (str[cur] & 0xC0) == 0x80) | |
16 cur++; | |
17 return cur; | |
18 } | |
19 | |
20 /* FIXME: change these to macros somehow */ | |
21 size_t | |
22 add_sz(size_t a, size_t b) { | |
23 if (a > SIZE_MAX - b) | |
24 err_overflow(); | |
25 return a + b; | |
26 } | |
27 | |
28 size_t | |
29 add_sz3(size_t a, size_t b, size_t c) { | |
30 if (b > SIZE_MAX - c || a > SIZE_MAX - (b + c)) | |
31 err_overflow(); | |
32 return a + b + c; | |
33 } | |
34 | |
35 void | |
36 swap_sz(size_t *a, size_t *b) { | |
37 size_t tmp = *a; | |
38 *a = *b; | |
39 *b = tmp; | |
40 } | |
41 | |
42 void | |
43 sort_range(size_t *l1, size_t *b1, size_t *l2, size_t *b2) { | |
44 if (*l1 == *l2 && *b1 > *b2) { | |
45 swap_sz(b1, b2); | |
46 } else if (*l1 > *l2) { | |
47 swap_sz(l1, l2); | |
48 swap_sz(b1, b2); | |
49 } | |
50 } | |
51 | |
52 int | |
53 str_array_equal(const char *terminated, const char *array, size_t len) { | |
54 if (!strncmp(terminated, array, len)) { | |
55 /* this is kind of inefficient, but there's no way to kn… | |
56 otherwise if strncmp just stopped comparing after a '… | |
57 return strlen(terminated) == len; | |
58 } | |
59 return 0; | |
60 } |