82 lines
1 KiB
C
82 lines
1 KiB
C
|
|
#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;
|
||
|
|
}
|
||
|
|
|