1*9a747e4fSDavid du Colombier #include "acd.h" 2*9a747e4fSDavid du Colombier 3*9a747e4fSDavid du Colombier void* 4*9a747e4fSDavid du Colombier emalloc(uint n) 5*9a747e4fSDavid du Colombier { 6*9a747e4fSDavid du Colombier void *p; 7*9a747e4fSDavid du Colombier 8*9a747e4fSDavid du Colombier p = malloc(n); 9*9a747e4fSDavid du Colombier if(p == nil) 10*9a747e4fSDavid du Colombier error("can't malloc: %r"); 11*9a747e4fSDavid du Colombier memset(p, 0, n); 12*9a747e4fSDavid du Colombier return p; 13*9a747e4fSDavid du Colombier } 14*9a747e4fSDavid du Colombier 15*9a747e4fSDavid du Colombier char* 16*9a747e4fSDavid du Colombier estrdup(char *s) 17*9a747e4fSDavid du Colombier { 18*9a747e4fSDavid du Colombier char *t; 19*9a747e4fSDavid du Colombier 20*9a747e4fSDavid du Colombier t = emalloc(strlen(s)+1); 21*9a747e4fSDavid du Colombier strcpy(t, s); 22*9a747e4fSDavid du Colombier return t; 23*9a747e4fSDavid du Colombier } 24*9a747e4fSDavid du Colombier 25*9a747e4fSDavid du Colombier char* 26*9a747e4fSDavid du Colombier estrstrdup(char *s, char *t) 27*9a747e4fSDavid du Colombier { 28*9a747e4fSDavid du Colombier char *u; 29*9a747e4fSDavid du Colombier 30*9a747e4fSDavid du Colombier u = emalloc(strlen(s)+strlen(t)+1); 31*9a747e4fSDavid du Colombier strcpy(u, s); 32*9a747e4fSDavid du Colombier strcat(u, t); 33*9a747e4fSDavid du Colombier return u; 34*9a747e4fSDavid du Colombier } 35*9a747e4fSDavid du Colombier 36*9a747e4fSDavid du Colombier char* 37*9a747e4fSDavid du Colombier eappend(char *s, char *sep, char *t) 38*9a747e4fSDavid du Colombier { 39*9a747e4fSDavid du Colombier char *u; 40*9a747e4fSDavid du Colombier 41*9a747e4fSDavid du Colombier if(t == nil) 42*9a747e4fSDavid du Colombier u = estrstrdup(s, sep); 43*9a747e4fSDavid du Colombier else{ 44*9a747e4fSDavid du Colombier u = emalloc(strlen(s)+strlen(sep)+strlen(t)+1); 45*9a747e4fSDavid du Colombier strcpy(u, s); 46*9a747e4fSDavid du Colombier strcat(u, sep); 47*9a747e4fSDavid du Colombier strcat(u, t); 48*9a747e4fSDavid du Colombier } 49*9a747e4fSDavid du Colombier free(s); 50*9a747e4fSDavid du Colombier return u; 51*9a747e4fSDavid du Colombier } 52*9a747e4fSDavid du Colombier 53*9a747e4fSDavid du Colombier char* 54*9a747e4fSDavid du Colombier egrow(char *s, char *sep, char *t) 55*9a747e4fSDavid du Colombier { 56*9a747e4fSDavid du Colombier s = eappend(s, sep, t); 57*9a747e4fSDavid du Colombier free(t); 58*9a747e4fSDavid du Colombier return s; 59*9a747e4fSDavid du Colombier } 60*9a747e4fSDavid du Colombier 61*9a747e4fSDavid du Colombier void 62*9a747e4fSDavid du Colombier error(char *fmt, ...) 63*9a747e4fSDavid du Colombier { 64*9a747e4fSDavid du Colombier int n; 65*9a747e4fSDavid du Colombier va_list arg; 66*9a747e4fSDavid du Colombier char buf[256]; 67*9a747e4fSDavid du Colombier 68*9a747e4fSDavid du Colombier threadprint(2, "Mail: "); 69*9a747e4fSDavid du Colombier va_start(arg, fmt); 70*9a747e4fSDavid du Colombier n = doprint(buf, buf+sizeof buf, fmt, arg) - buf; 71*9a747e4fSDavid du Colombier va_end(arg); 72*9a747e4fSDavid du Colombier write(2, buf, n); 73*9a747e4fSDavid du Colombier write(2, "\n", 1); 74*9a747e4fSDavid du Colombier threadexitsall(fmt); 75*9a747e4fSDavid du Colombier } 76*9a747e4fSDavid du Colombier 77*9a747e4fSDavid du Colombier void 78*9a747e4fSDavid du Colombier ctlprint(int fd, char *fmt, ...) 79*9a747e4fSDavid du Colombier { 80*9a747e4fSDavid du Colombier int n; 81*9a747e4fSDavid du Colombier va_list arg; 82*9a747e4fSDavid du Colombier char buf[256]; 83*9a747e4fSDavid du Colombier 84*9a747e4fSDavid du Colombier va_start(arg, fmt); 85*9a747e4fSDavid du Colombier n = doprint(buf, buf+sizeof buf, fmt, arg) - buf; 86*9a747e4fSDavid du Colombier va_end(arg); 87*9a747e4fSDavid du Colombier if(write(fd, buf, n) != n) 88*9a747e4fSDavid du Colombier error("control file write error: %r"); 89*9a747e4fSDavid du Colombier } 90