tutil.c - ics2txt - convert icalendar .ics file to plain text
(HTM) git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
tutil.c (1205B)
---
1 #include "util.h"
2
3 #include <errno.h>
4 #include <stdint.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 size_t
9 strlcpy(char *buf, char const *str, size_t sz)
10 {
11 size_t len, cpy;
12
13 len = strlen(str);
14 cpy = (len > sz) ? (sz) : (len);
15 memcpy(buf, str, cpy + 1);
16 buf[sz - 1] = '\0';
17 return len;
18 }
19
20 char *
21 strsep(char **str_p, char const *sep)
22 {
23 char *s, *prev;
24
25 if (*str_p == NULL)
26 return NULL;
27
28 for (s = prev = *str_p; strchr(sep, *s) == NULL; s++)
29 continue;
30
31 if (*s == '\0') {
32 *str_p = NULL;
33 } else {
34 *s = '\0';
35 *str_p = s + 1;
36 }
37 return prev;
38 }
39
40 void
41 strchomp(char *line)
42 {
43 size_t len;
44
45 len = strlen(line);
46 if (len > 0 && line[len - 1] == '\n')
47 line[len-- - 1] = '\0';
48 if (len > 0 && line[len - 1] == '\r')
49 line[len-- - 1] = '\0';
50 }
51
52 int
53 strappend(char **base_p, char const *s)
54 {
55 size_t base_len, s_len;
56 void *v;
57
58 base_len = (*base_p == NULL) ? (0) : (strlen(*base_p));
59 s_len = strlen(s);
60
61 if ((v = realloc(*base_p, base_len + s_len + 1)) == NULL)
62 return -1;
63
64 *base_p = v;
65 memcpy(*base_p + base_len, s, s_len + 1);
66 return 0;
67 }
68
69 void *
70 reallocarray(void *buf, size_t len, size_t sz)
71 {
72 if (SIZE_MAX / len < sz)
73 return errno=ERANGE, NULL;
74 return realloc(buf, len * sz);
75 }