17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include <thread.h>
57dd7cddfSDavid du Colombier #include "dat.h"
67dd7cddfSDavid du Colombier
77dd7cddfSDavid du Colombier void*
emalloc(uint n)87dd7cddfSDavid du Colombier emalloc(uint n)
97dd7cddfSDavid du Colombier {
107dd7cddfSDavid du Colombier void *p;
117dd7cddfSDavid du Colombier
127dd7cddfSDavid du Colombier p = malloc(n);
137dd7cddfSDavid du Colombier if(p == nil)
147dd7cddfSDavid du Colombier error("can't malloc: %r");
157dd7cddfSDavid du Colombier memset(p, 0, n);
167dd7cddfSDavid du Colombier return p;
177dd7cddfSDavid du Colombier }
187dd7cddfSDavid du Colombier
197dd7cddfSDavid du Colombier char*
estrdup(char * s)207dd7cddfSDavid du Colombier estrdup(char *s)
217dd7cddfSDavid du Colombier {
227dd7cddfSDavid du Colombier char *t;
237dd7cddfSDavid du Colombier
247dd7cddfSDavid du Colombier t = emalloc(strlen(s)+1);
257dd7cddfSDavid du Colombier strcpy(t, s);
267dd7cddfSDavid du Colombier return t;
277dd7cddfSDavid du Colombier }
287dd7cddfSDavid du Colombier
297dd7cddfSDavid du Colombier char*
estrstrdup(char * s,char * t)307dd7cddfSDavid du Colombier estrstrdup(char *s, char *t)
317dd7cddfSDavid du Colombier {
327dd7cddfSDavid du Colombier char *u;
337dd7cddfSDavid du Colombier
347dd7cddfSDavid du Colombier u = emalloc(strlen(s)+strlen(t)+1);
357dd7cddfSDavid du Colombier sprint(u, "%s%s", s, t);
367dd7cddfSDavid du Colombier return u;
377dd7cddfSDavid du Colombier }
387dd7cddfSDavid du Colombier
397dd7cddfSDavid du Colombier char*
eappend(char * s,char * sep,char * t)407dd7cddfSDavid du Colombier eappend(char *s, char *sep, char *t)
417dd7cddfSDavid du Colombier {
427dd7cddfSDavid du Colombier char *u;
437dd7cddfSDavid du Colombier
447dd7cddfSDavid du Colombier if(t == nil)
457dd7cddfSDavid du Colombier u = estrstrdup(s, sep);
467dd7cddfSDavid du Colombier else{
477dd7cddfSDavid du Colombier u = emalloc(strlen(s)+strlen(sep)+strlen(t)+1);
487dd7cddfSDavid du Colombier sprint(u, "%s%s%s", s, sep, t);
497dd7cddfSDavid du Colombier }
507dd7cddfSDavid du Colombier free(s);
517dd7cddfSDavid du Colombier return u;
527dd7cddfSDavid du Colombier }
537dd7cddfSDavid du Colombier
547dd7cddfSDavid du Colombier char*
egrow(char * s,char * sep,char * t)557dd7cddfSDavid du Colombier egrow(char *s, char *sep, char *t)
567dd7cddfSDavid du Colombier {
577dd7cddfSDavid du Colombier s = eappend(s, sep, t);
587dd7cddfSDavid du Colombier free(t);
597dd7cddfSDavid du Colombier return s;
607dd7cddfSDavid du Colombier }
617dd7cddfSDavid du Colombier
627dd7cddfSDavid du Colombier void
error(char * fmt,...)637dd7cddfSDavid du Colombier error(char *fmt, ...)
647dd7cddfSDavid du Colombier {
65*9a747e4fSDavid du Colombier Fmt f;
66*9a747e4fSDavid du Colombier char buf[64];
677dd7cddfSDavid du Colombier va_list arg;
687dd7cddfSDavid du Colombier
69*9a747e4fSDavid du Colombier fmtfdinit(&f, 2, buf, sizeof buf);
70*9a747e4fSDavid du Colombier fmtprint(&f, "win: ");
717dd7cddfSDavid du Colombier va_start(arg, fmt);
72*9a747e4fSDavid du Colombier fmtvprint(&f, fmt, arg);
737dd7cddfSDavid du Colombier va_end(arg);
74*9a747e4fSDavid du Colombier fmtprint(&f, "\n");
75*9a747e4fSDavid du Colombier fmtfdflush(&f);
767dd7cddfSDavid du Colombier threadexitsall(fmt);
777dd7cddfSDavid du Colombier }
787dd7cddfSDavid du Colombier
797dd7cddfSDavid du Colombier void
ctlprint(int fd,char * fmt,...)807dd7cddfSDavid du Colombier ctlprint(int fd, char *fmt, ...)
817dd7cddfSDavid du Colombier {
827dd7cddfSDavid du Colombier int n;
837dd7cddfSDavid du Colombier va_list arg;
847dd7cddfSDavid du Colombier
857dd7cddfSDavid du Colombier va_start(arg, fmt);
86*9a747e4fSDavid du Colombier n = vfprint(fd, fmt, arg);
877dd7cddfSDavid du Colombier va_end(arg);
88*9a747e4fSDavid du Colombier if(n <= 0)
897dd7cddfSDavid du Colombier error("control file write error: %r");
907dd7cddfSDavid du Colombier }
91