URI:
       ts_alloc.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       ts_alloc.c (1305B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include "libString.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->lk);
           13         if(--(sp->ref) != 0){
           14                 unlock(&sp->lk);
           15                 return;
           16         }
           17         unlock(&sp->lk);
           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->lk);
           29         sp->ref++;
           30         unlock(&sp->lk);
           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 }