]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/webfs/util.c
webfs: fix redirection mem/fd leak
[plan9front.git] / sys / src / cmd / webfs / util.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <ndb.h>
5 #include <fcall.h>
6 #include <thread.h>
7 #include <9p.h>
8 #include <ctype.h>
9 #include "dat.h"
10 #include "fns.h"
11
12 void*
13 erealloc(void *a, uint n)
14 {
15         a = realloc(a, n);
16         if(a == nil)
17                 sysfatal("realloc %d: out of memory", n);
18         setrealloctag(a, getcallerpc(&a));
19         return a;
20 }
21
22 void*
23 emalloc(uint n)
24 {
25         void *a;
26
27         a = mallocz(n, 1);
28         if(a == nil)
29                 sysfatal("malloc %d: out of memory", n);
30         setmalloctag(a, getcallerpc(&n));
31         return a;
32 }
33
34 char*
35 estrdup(char *s)
36 {
37         s = strdup(s);
38         if(s == nil)
39                 sysfatal("strdup: out of memory");
40         setmalloctag(s, getcallerpc(&s));
41         return s;
42 }
43
44 char*
45 estredup(char *s, char *e)
46 {
47         char *t;
48
49         t = emalloc(e-s+1);
50         memmove(t, s, e-s);
51         t[e-s] = '\0';
52         setmalloctag(t, getcallerpc(&s));
53         return t;
54 }
55
56 char*
57 estrmanydup(char *s, ...)
58 {
59         char *p, *t;
60         int len;
61         va_list arg;
62
63         len = strlen(s);
64         va_start(arg, s);
65         while((p = va_arg(arg, char*)) != nil)
66                 len += strlen(p);
67         len++;
68
69         t = emalloc(len);
70         strcpy(t, s);
71         va_start(arg, s);
72         while((p = va_arg(arg, char*)) != nil)
73                 strcat(t, p);
74         return t;
75 }
76
77 char*
78 strlower(char *s)
79 {
80         char *t;
81
82         for(t=s; *t; t++)
83                 if('A' <= *t && *t <= 'Z')
84                         *t += 'a'-'A';
85         return s;
86 }