Blame


1 5a1e9de7 2006-02-08 devnull #include <u.h>
2 5a1e9de7 2006-02-08 devnull #include <libc.h>
3 5a1e9de7 2006-02-08 devnull #include <fcall.h>
4 5a1e9de7 2006-02-08 devnull #include <9pclient.h>
5 5a1e9de7 2006-02-08 devnull
6 5a1e9de7 2006-02-08 devnull /* C99 nonsense */
7 5a1e9de7 2006-02-08 devnull #ifdef va_copy
8 5a1e9de7 2006-02-08 devnull # define VA_COPY(a,b) va_copy(a,b)
9 5a1e9de7 2006-02-08 devnull # define VA_END(a) va_end(a)
10 5a1e9de7 2006-02-08 devnull #else
11 5a1e9de7 2006-02-08 devnull # define VA_COPY(a,b) (a) = (b)
12 5a1e9de7 2006-02-08 devnull # define VA_END(a)
13 5a1e9de7 2006-02-08 devnull #endif
14 5a1e9de7 2006-02-08 devnull
15 5a1e9de7 2006-02-08 devnull static int
16 5a1e9de7 2006-02-08 devnull fidflush(Fmt *f)
17 5a1e9de7 2006-02-08 devnull {
18 5a1e9de7 2006-02-08 devnull int n;
19 5a1e9de7 2006-02-08 devnull
20 5a1e9de7 2006-02-08 devnull n = (char*)f->to - (char*)f->start;
21 5a1e9de7 2006-02-08 devnull if(n && fswrite(f->farg, f->start, n) != n)
22 5a1e9de7 2006-02-08 devnull return 0;
23 5a1e9de7 2006-02-08 devnull f->to = f->start;
24 5a1e9de7 2006-02-08 devnull return 1;
25 5a1e9de7 2006-02-08 devnull }
26 5a1e9de7 2006-02-08 devnull
27 5a1e9de7 2006-02-08 devnull static int
28 5a1e9de7 2006-02-08 devnull fsfmtfidinit(Fmt *f, CFid *fid, char *buf, int size)
29 5a1e9de7 2006-02-08 devnull {
30 5a1e9de7 2006-02-08 devnull f->runes = 0;
31 5a1e9de7 2006-02-08 devnull f->start = buf;
32 5a1e9de7 2006-02-08 devnull f->to = buf;
33 5a1e9de7 2006-02-08 devnull f->stop = buf + size;
34 5a1e9de7 2006-02-08 devnull f->flush = fidflush;
35 5a1e9de7 2006-02-08 devnull f->farg = fid;
36 5a1e9de7 2006-02-08 devnull f->nfmt = 0;
37 70a3bbd7 2006-05-27 devnull fmtlocaleinit(f, nil, nil, nil);
38 5a1e9de7 2006-02-08 devnull return 0;
39 5a1e9de7 2006-02-08 devnull }
40 5a1e9de7 2006-02-08 devnull
41 5a1e9de7 2006-02-08 devnull int
42 5a1e9de7 2006-02-08 devnull fsprint(CFid *fd, char *fmt, ...)
43 5a1e9de7 2006-02-08 devnull {
44 5a1e9de7 2006-02-08 devnull int n;
45 5a1e9de7 2006-02-08 devnull va_list args;
46 5a1e9de7 2006-02-08 devnull
47 5a1e9de7 2006-02-08 devnull va_start(args, fmt);
48 5a1e9de7 2006-02-08 devnull n = fsvprint(fd, fmt, args);
49 5a1e9de7 2006-02-08 devnull va_end(args);
50 5a1e9de7 2006-02-08 devnull return n;
51 5a1e9de7 2006-02-08 devnull }
52 5a1e9de7 2006-02-08 devnull
53 5a1e9de7 2006-02-08 devnull int
54 5a1e9de7 2006-02-08 devnull fsvprint(CFid *fd, char *fmt, va_list args)
55 5a1e9de7 2006-02-08 devnull {
56 5a1e9de7 2006-02-08 devnull Fmt f;
57 5a1e9de7 2006-02-08 devnull char buf[256];
58 5a1e9de7 2006-02-08 devnull int n;
59 5a1e9de7 2006-02-08 devnull
60 5a1e9de7 2006-02-08 devnull fsfmtfidinit(&f, fd, buf, sizeof(buf));
61 5a1e9de7 2006-02-08 devnull VA_COPY(f.args,args);
62 5a1e9de7 2006-02-08 devnull n = dofmt(&f, fmt);
63 5a1e9de7 2006-02-08 devnull VA_END(f.args);
64 5a1e9de7 2006-02-08 devnull if(n > 0 && fidflush(&f) == 0)
65 5a1e9de7 2006-02-08 devnull return -1;
66 5a1e9de7 2006-02-08 devnull return n;
67 5a1e9de7 2006-02-08 devnull }