plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }