util.c (1416B)
1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <thread.h> 5 #include <plumb.h> 6 #include <9pclient.h> 7 #include "dat.h" 8 9 void* 10 emalloc(uint n) 11 { 12 void *p; 13 14 p = malloc(n); 15 if(p == nil) 16 error("can't malloc: %r"); 17 memset(p, 0, n); 18 setmalloctag(p, getcallerpc(&n)); 19 return p; 20 } 21 22 void* 23 erealloc(void *p, uint n) 24 { 25 p = realloc(p, n); 26 if(p == nil) 27 error("can't realloc: %r"); 28 setmalloctag(p, getcallerpc(&n)); 29 return p; 30 } 31 32 char* 33 estrdup(char *s) 34 { 35 char *t; 36 37 t = emalloc(strlen(s)+1); 38 strcpy(t, s); 39 return t; 40 } 41 42 char* 43 estrstrdup(char *s, char *t) 44 { 45 char *u; 46 47 u = emalloc(strlen(s)+strlen(t)+1); 48 strcpy(u, s); 49 strcat(u, t); 50 return u; 51 } 52 53 char* 54 eappend(char *s, char *sep, char *t) 55 { 56 char *u; 57 58 if(t == nil) 59 u = estrstrdup(s, sep); 60 else{ 61 u = emalloc(strlen(s)+strlen(sep)+strlen(t)+1); 62 strcpy(u, s); 63 strcat(u, sep); 64 strcat(u, t); 65 } 66 free(s); 67 return u; 68 } 69 70 char* 71 egrow(char *s, char *sep, char *t) 72 { 73 s = eappend(s, sep, t); 74 free(t); 75 return s; 76 } 77 78 void 79 error(char *fmt, ...) 80 { 81 Fmt f; 82 char buf[64]; 83 va_list arg; 84 85 fmtfdinit(&f, 2, buf, sizeof buf); 86 fmtprint(&f, "Mail: "); 87 va_start(arg, fmt); 88 fmtvprint(&f, fmt, arg); 89 va_end(arg); 90 fmtprint(&f, "\n"); 91 fmtfdflush(&f); 92 threadexitsall(fmt); 93 } 94 95 void 96 ctlprint(CFid *fd, char *fmt, ...) 97 { 98 int n; 99 va_list arg; 100 101 va_start(arg, fmt); 102 n = fsvprint(fd, fmt, arg); 103 va_end(arg); 104 if(n <= 0) 105 error("control file write error: %r"); 106 }