180ee5cbfSDavid du Colombier #include <u.h>
280ee5cbfSDavid du Colombier #include <libc.h>
380ee5cbfSDavid du Colombier #include <bio.h>
480ee5cbfSDavid du Colombier #include <thread.h>
580ee5cbfSDavid du Colombier #include "win.h"
680ee5cbfSDavid du Colombier
780ee5cbfSDavid du Colombier void*
emalloc(uint n)880ee5cbfSDavid du Colombier emalloc(uint n)
980ee5cbfSDavid du Colombier {
1080ee5cbfSDavid du Colombier void *p;
1180ee5cbfSDavid du Colombier
1280ee5cbfSDavid du Colombier p = malloc(n);
1380ee5cbfSDavid du Colombier if(p == nil)
1480ee5cbfSDavid du Colombier error("can't malloc: %r");
1580ee5cbfSDavid du Colombier memset(p, 0, n);
1680ee5cbfSDavid du Colombier return p;
1780ee5cbfSDavid du Colombier }
1880ee5cbfSDavid du Colombier
1980ee5cbfSDavid du Colombier char*
estrdup(char * s)2080ee5cbfSDavid du Colombier estrdup(char *s)
2180ee5cbfSDavid du Colombier {
2280ee5cbfSDavid du Colombier char *t;
2380ee5cbfSDavid du Colombier
2480ee5cbfSDavid du Colombier t = emalloc(strlen(s)+1);
2580ee5cbfSDavid du Colombier strcpy(t, s);
2680ee5cbfSDavid du Colombier return t;
2780ee5cbfSDavid du Colombier }
2880ee5cbfSDavid du Colombier
2980ee5cbfSDavid du Colombier char*
estrstrdup(char * s,char * t)3080ee5cbfSDavid du Colombier estrstrdup(char *s, char *t)
3180ee5cbfSDavid du Colombier {
3280ee5cbfSDavid du Colombier char *u;
3380ee5cbfSDavid du Colombier
3480ee5cbfSDavid du Colombier u = emalloc(strlen(s)+strlen(t)+1);
3580ee5cbfSDavid du Colombier strcpy(u, s);
3680ee5cbfSDavid du Colombier strcat(u, t);
3780ee5cbfSDavid du Colombier return u;
3880ee5cbfSDavid du Colombier }
3980ee5cbfSDavid du Colombier
4080ee5cbfSDavid du Colombier char*
estrstrstrdup(char * r,char * s,char * t)4180ee5cbfSDavid du Colombier estrstrstrdup(char *r, char *s, char *t)
4280ee5cbfSDavid du Colombier {
4380ee5cbfSDavid du Colombier char *u;
4480ee5cbfSDavid du Colombier
4580ee5cbfSDavid du Colombier u = emalloc(strlen(r)+strlen(s)+strlen(t)+1);
4680ee5cbfSDavid du Colombier strcpy(u, r);
4780ee5cbfSDavid du Colombier strcat(u, s);
4880ee5cbfSDavid du Colombier strcat(u, t);
4980ee5cbfSDavid du Colombier return u;
5080ee5cbfSDavid du Colombier }
5180ee5cbfSDavid du Colombier
5280ee5cbfSDavid du Colombier char*
eappend(char * s,char * sep,char * t)5380ee5cbfSDavid du Colombier eappend(char *s, char *sep, char *t)
5480ee5cbfSDavid du Colombier {
5580ee5cbfSDavid du Colombier char *u;
5680ee5cbfSDavid du Colombier
5780ee5cbfSDavid du Colombier if(t == nil)
5880ee5cbfSDavid du Colombier u = estrstrdup(s, sep);
5980ee5cbfSDavid du Colombier else{
6080ee5cbfSDavid du Colombier u = emalloc(strlen(s)+strlen(sep)+strlen(t)+1);
6180ee5cbfSDavid du Colombier strcpy(u, s);
6280ee5cbfSDavid du Colombier strcat(u, sep);
6380ee5cbfSDavid du Colombier strcat(u, t);
6480ee5cbfSDavid du Colombier }
6580ee5cbfSDavid du Colombier free(s);
6680ee5cbfSDavid du Colombier return u;
6780ee5cbfSDavid du Colombier }
6880ee5cbfSDavid du Colombier
6980ee5cbfSDavid du Colombier char*
egrow(char * s,char * sep,char * t)7080ee5cbfSDavid du Colombier egrow(char *s, char *sep, char *t)
7180ee5cbfSDavid du Colombier {
7280ee5cbfSDavid du Colombier s = eappend(s, sep, t);
7380ee5cbfSDavid du Colombier free(t);
7480ee5cbfSDavid du Colombier return s;
7580ee5cbfSDavid du Colombier }
7680ee5cbfSDavid du Colombier
7780ee5cbfSDavid du Colombier void
error(char * fmt,...)7880ee5cbfSDavid du Colombier error(char *fmt, ...)
7980ee5cbfSDavid du Colombier {
8080ee5cbfSDavid du Colombier va_list arg;
8180ee5cbfSDavid du Colombier char buf[256];
82*9a747e4fSDavid du Colombier Fmt f;
8380ee5cbfSDavid du Colombier
84*9a747e4fSDavid du Colombier fmtfdinit(&f, 2, buf, sizeof buf);
85*9a747e4fSDavid du Colombier fmtprint(&f, "%s: ", argv0);
8680ee5cbfSDavid du Colombier va_start(arg, fmt);
87*9a747e4fSDavid du Colombier fmtprint(&f, fmt, arg);
8880ee5cbfSDavid du Colombier va_end(arg);
89*9a747e4fSDavid du Colombier fmtprint(&f, "\n");
90*9a747e4fSDavid du Colombier fmtfdflush(&f);
9180ee5cbfSDavid du Colombier threadexitsall(fmt);
9280ee5cbfSDavid du Colombier }
9380ee5cbfSDavid du Colombier
9480ee5cbfSDavid du Colombier void
ctlprint(int fd,char * fmt,...)9580ee5cbfSDavid du Colombier ctlprint(int fd, char *fmt, ...)
9680ee5cbfSDavid du Colombier {
9780ee5cbfSDavid du Colombier int n;
9880ee5cbfSDavid du Colombier va_list arg;
9980ee5cbfSDavid du Colombier char buf[256];
10080ee5cbfSDavid du Colombier
10180ee5cbfSDavid du Colombier va_start(arg, fmt);
102*9a747e4fSDavid du Colombier n = vfprint(fd, fmt, arg);
10380ee5cbfSDavid du Colombier va_end(arg);
104*9a747e4fSDavid du Colombier if(n < 0)
10580ee5cbfSDavid du Colombier error("control file write(%s) error: %r", buf);
10680ee5cbfSDavid du Colombier }
107