]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libString/s_alloc.c
bootrc: for wireless netbooting, set the WPA/WPA2 preshard key with wpapsk=password...
[plan9front.git] / sys / src / libString / s_alloc.c
1 #include <u.h>
2 #include <libc.h>
3 #include "String.h"
4
5 #define STRLEN 128
6
7 extern void
8 s_free(String *sp)
9 {
10         if (sp == nil)
11                 return;
12         lock(sp);
13         if(--(sp->ref) != 0){
14                 unlock(sp);
15                 return;
16         }
17         unlock(sp);
18
19         if(sp->fixed == 0 && sp->base != nil)
20                 free(sp->base);
21         free(sp);
22 }
23
24 /* get another reference to a string */
25 extern String *
26 s_incref(String *sp)
27 {
28         lock(sp);
29         sp->ref++;
30         unlock(sp);
31
32         return sp;
33 }
34
35 /* allocate a String head */
36 extern String *
37 _s_alloc(void)
38 {
39         String *s;
40
41         s = mallocz(sizeof *s, 1);
42         if(s == nil)
43                 return s;
44         s->ref = 1;
45         s->fixed = 0;
46         return s;
47 }
48
49 /* create a new `short' String */
50 extern String *
51 s_newalloc(int len)
52 {
53         String *sp;
54
55         sp = _s_alloc();
56         if(sp == nil)
57                 sysfatal("s_newalloc: %r");
58         setmalloctag(sp, getcallerpc(&len));
59         if(len < STRLEN)
60                 len = STRLEN;
61         sp->base = sp->ptr = malloc(len);
62         if (sp->base == nil)
63                 sysfatal("s_newalloc: %r");
64         setmalloctag(sp->base, getcallerpc(&len));
65
66         sp->end = sp->base + len;
67         s_terminate(sp);
68         return sp;
69 }
70
71 /* create a new `short' String */
72 extern String *
73 s_new(void)
74 {
75         String *sp;
76
77         sp = _s_alloc();
78         if(sp == nil)
79                 sysfatal("s_new: %r");
80         sp->base = sp->ptr = malloc(STRLEN);
81         if (sp->base == nil)
82                 sysfatal("s_new: %r");
83         sp->end = sp->base + STRLEN;
84         s_terminate(sp);
85         return sp;
86 }