1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #include <u.h>
- #include <libc.h>
- #include <bio.h>
- #include <libsec.h>
- #include <ctype.h>
- #include "iso9660.h"
- typedef struct Stringtab Stringtab;
- struct Stringtab {
- Stringtab *link;
- char *str;
- };
- static Stringtab *stab[1024];
- static uint
- hash(char *s)
- {
- uint h;
- uchar *p;
- h = 0;
- for(p=(uchar*)s; *p; p++)
- h = h*37 + *p;
- return h;
- }
- static char*
- estrdup(char *s)
- {
- if((s = strdup(s)) == nil)
- sysfatal("strdup(%.10s): out of memory", s);
- return s;
- }
- char*
- atom(char *str)
- {
- uint h;
- Stringtab *tab;
-
- h = hash(str) % nelem(stab);
- for(tab=stab[h]; tab; tab=tab->link)
- if(strcmp(str, tab->str) == 0)
- return tab->str;
- tab = emalloc(sizeof *tab);
- tab->str = estrdup(str);
- tab->link = stab[h];
- stab[h] = tab;
- return tab->str;
- }
- void*
- emalloc(ulong n)
- {
- void *p;
- if((p = malloc(n)) == nil)
- sysfatal("malloc(%lud): out of memory", n);
- memset(p, 0, n);
- return p;
- }
- void*
- erealloc(void *v, ulong n)
- {
- if((v = realloc(v, n)) == nil)
- sysfatal("realloc(%p, %lud): out of memory", v, n);
- return v;
- }
- char*
- struprcpy(char *p, char *s)
- {
- char *op;
- op = p;
- for(; *s; s++)
- *p++ = toupper(*s);
- *p = '\0';
- return op;
- }
- int
- chat(char *fmt, ...)
- {
- va_list arg;
- if(!chatty)
- return 0;
- va_start(arg, fmt);
- vfprint(2, fmt, arg);
- va_end(arg);
- return 1;
- }
|