xref: /plan9-contrib/acme/bin/source/win/util.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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