URI: 
       tutil.c - ics2txt - convert icalendar .ics file to plain text
  HTML 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 }