plan9port

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

util.c (1061B)


      1 #include "a.h"
      2 
      3 void*
      4 emalloc(int n)
      5 {
      6 	void *v;
      7 
      8 	v = mallocz(n, 1);
      9 	if(v == nil)
     10 		sysfatal("out of memory");
     11 	return v;
     12 }
     13 
     14 void*
     15 erealloc(void *v, int n)
     16 {
     17 	v = realloc(v, n);
     18 	if(v == nil)
     19 		sysfatal("out of memory");
     20 	return v;
     21 }
     22 
     23 char*
     24 estrdup(char *s)
     25 {
     26 	s = strdup(s);
     27 	if(s == nil)
     28 		sysfatal("out of memory");
     29 	return s;
     30 }
     31 
     32 int
     33 timefmt(Fmt *f)
     34 {
     35 	Tm tm;
     36 	vlong ms;
     37 
     38 	ms = nsec()/1000000;
     39 
     40 	tm = *localtime(ms/1000);
     41 	fmtprint(f, "%02d:%02d:%02d.%03d",
     42 		tm.hour, tm.min, tm.sec,
     43 		(int)(ms%1000));
     44 	return 0;
     45 }
     46 
     47 int
     48 writen(int fd, void *buf, int n)
     49 {
     50 	long m, tot;
     51 
     52 	for(tot=0; tot<n; tot+=m){
     53 		m = n - tot;
     54 		if(m > 8192)
     55 			m = 8192;
     56 		if(write(fd, (uchar*)buf+tot, m) != m)
     57 			break;
     58 	}
     59 	return tot;
     60 }
     61 
     62 int
     63 urlencodefmt(Fmt *fmt)
     64 {
     65 	int x;
     66 	char *s;
     67 
     68 	s = va_arg(fmt->args, char*);
     69 	for(; *s; s++){
     70 		x = (uchar)*s;
     71 		if(x == ' ')
     72 			fmtrune(fmt, '+');
     73 		else if(('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z') || ('0' <= x && x <= '9')
     74 			|| strchr("$-_.+!*'()", x)){
     75 			fmtrune(fmt, x);
     76 		}else
     77 			fmtprint(fmt, "%%%02ux", x);
     78 	}
     79 	return 0;
     80 }