| #include "a.h" |
| |
| void* |
| emalloc(int n) |
| { |
| void *v; |
| |
| v = mallocz(n, 1); |
| if(v == nil) |
| sysfatal("out of memory"); |
| return v; |
| } |
| |
| void* |
| erealloc(void *v, int n) |
| { |
| v = realloc(v, n); |
| if(v == nil) |
| sysfatal("out of memory"); |
| return v; |
| } |
| |
| char* |
| estrdup(char *s) |
| { |
| s = strdup(s); |
| if(s == nil) |
| sysfatal("out of memory"); |
| return s; |
| } |
| |
| int |
| timefmt(Fmt *f) |
| { |
| Tm tm; |
| vlong ms; |
| |
| ms = nsec()/1000000; |
| |
| tm = *localtime(ms/1000); |
| fmtprint(f, "%02d:%02d:%02d.%03d", |
| tm.hour, tm.min, tm.sec, |
| (int)(ms%1000)); |
| return 0; |
| } |
| |
| int |
| writen(int fd, void *buf, int n) |
| { |
| long m, tot; |
| |
| for(tot=0; tot<n; tot+=m){ |
| m = n - tot; |
| if(m > 8192) |
| m = 8192; |
| if(write(fd, (uchar*)buf+tot, m) != m) |
| break; |
| } |
| return tot; |
| } |
| |
| int |
| urlencodefmt(Fmt *fmt) |
| { |
| int x; |
| char *s; |
| |
| s = va_arg(fmt->args, char*); |
| for(; *s; s++){ |
| x = (uchar)*s; |
| if(x == ' ') |
| fmtrune(fmt, '+'); |
| else if(('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z') || ('0' <= x && x <= '9') |
| || strchr("$-_.+!*'()", x)){ |
| fmtrune(fmt, x); |
| }else |
| fmtprint(fmt, "%%%02ux", x); |
| } |
| return 0; |
| } |
| |