util.c - ledit - Text editor (WIP)
HTML git clone git://lumidify.org/ledit.git (fast, but not encrypted)
HTML git clone https://lumidify.org/ledit.git (encrypted, but very slow)
HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ledit.git (over tor)
DIR Log
DIR Files
DIR Refs
DIR README
DIR 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 know
56 otherwise if strncmp just stopped comparing after a '\0' */
57 return strlen(terminated) == len;
58 }
59 return 0;
60 }