]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/wikifs/util.c
Libflac: Tell it that we have stdint.h so it finds SIZE_MAX
[plan9front.git] / sys / src / cmd / wikifs / util.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <String.h>
5 #include <ctype.h>
6 #include <thread.h>
7 #include "wiki.h"
8
9 void*
10 erealloc(void *v, ulong n)
11 {
12         v = realloc(v, n);
13         if(v == nil)
14                 sysfatal("out of memory reallocating %lud", n);
15         setmalloctag(v, getcallerpc(&v));
16         return v;
17 }
18
19 void*
20 emalloc(ulong n)
21 {
22         void *v;
23
24         v = malloc(n);
25         if(v == nil)
26                 sysfatal("out of memory allocating %lud", n);
27         memset(v, 0, n);
28         setmalloctag(v, getcallerpc(&n));
29         return v;
30 }
31
32 char*
33 estrdup(char *s)
34 {
35         int l;
36         char *t;
37
38         if (s == nil)
39                 return nil;
40         l = strlen(s)+1;
41         t = emalloc(l);
42         memmove(t, s, l);
43         setmalloctag(t, getcallerpc(&s));
44         return t;
45 }
46
47 char*
48 estrdupn(char *s, int n)
49 {
50         int l;
51         char *t;
52
53         l = strlen(s);
54         if(l > n)
55                 l = n;
56         t = emalloc(l+1);
57         memmove(t, s, l);
58         t[l] = '\0';
59         setmalloctag(t, getcallerpc(&s));
60         return t;
61 }
62
63 char*
64 strlower(char *s)
65 {
66         char *p;
67
68         for(p=s; *p; p++)
69                 if('A' <= *p && *p <= 'Z')
70                         *p += 'a'-'A';
71         return s;
72 }
73
74 String*
75 s_appendsub(String *s, char *p, int n, Sub *sub, int nsub)
76 {
77         int i, m;
78         char *q, *r, *ep;
79
80         ep = p+n;
81         while(p<ep){
82                 q = ep;
83                 m = -1;
84                 for(i=0; i<nsub; i++){
85                         if(sub[i].sub && (r = strstr(p, sub[i].match)) && r < q){
86                                 q = r;
87                                 m = i;
88                         }
89                 }
90                 s = s_nappend(s, p, q-p);
91                 p = q;
92                 if(m >= 0){
93                         s = s_append(s, sub[m].sub);
94                         p += strlen(sub[m].match);
95                 }
96         }
97         return s;
98 }
99
100 String*
101 s_appendlist(String *s, ...)
102 {
103         char *x;
104         va_list arg;
105
106         va_start(arg, s);
107         while(x = va_arg(arg, char*))
108                 s = s_append(s, x);
109         va_end(arg);
110         return s;
111 }
112
113 int
114 opentemp(char *template)
115 {
116         int fd, i;
117         char *p;
118
119         p = estrdup(template);
120         fd = -1;
121         for(i=0; i<10; i++){
122                 mktemp(p);
123                 if(access(p, 0) < 0 && (fd=create(p, ORDWR|ORCLOSE, 0444)) >= 0)
124                         break;
125                 strcpy(p, template);
126         }
127         if(fd >= 0)
128                 strcpy(template, p);
129         free(p);
130
131         return fd;
132 }
133