Blame


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