add print
This commit is contained in:
parent
4ca53ff0e0
commit
5a1e9de7b1
3 changed files with 71 additions and 0 deletions
|
|
@ -44,6 +44,9 @@ CFid *nsopen(char*, char*, char*, int);
|
||||||
int fsfremove(CFid*);
|
int fsfremove(CFid*);
|
||||||
int fsremove(CFsys*, char*);
|
int fsremove(CFsys*, char*);
|
||||||
CFid *fscreate(CFsys*, char*, int, ulong);
|
CFid *fscreate(CFsys*, char*, int, ulong);
|
||||||
|
int fsaccess(CFsys*, char*, int);
|
||||||
|
int fsvprint(CFid*, char*, va_list);
|
||||||
|
int fsprint(CFid*, char*, ...);
|
||||||
|
|
||||||
extern int chatty9pclient;
|
extern int chatty9pclient;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ OFILES=\
|
||||||
ns.$O\
|
ns.$O\
|
||||||
open.$O\
|
open.$O\
|
||||||
openfd.$O\
|
openfd.$O\
|
||||||
|
print.$O\
|
||||||
read.$O\
|
read.$O\
|
||||||
remove.$O\
|
remove.$O\
|
||||||
seek.$O\
|
seek.$O\
|
||||||
|
|
|
||||||
67
src/lib9pclient/print.c
Normal file
67
src/lib9pclient/print.c
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
#include <u.h>
|
||||||
|
#include <libc.h>
|
||||||
|
#include <fcall.h>
|
||||||
|
#include <9pclient.h>
|
||||||
|
|
||||||
|
/* C99 nonsense */
|
||||||
|
#ifdef va_copy
|
||||||
|
# define VA_COPY(a,b) va_copy(a,b)
|
||||||
|
# define VA_END(a) va_end(a)
|
||||||
|
#else
|
||||||
|
# define VA_COPY(a,b) (a) = (b)
|
||||||
|
# define VA_END(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int
|
||||||
|
fidflush(Fmt *f)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
|
||||||
|
n = (char*)f->to - (char*)f->start;
|
||||||
|
if(n && fswrite(f->farg, f->start, n) != n)
|
||||||
|
return 0;
|
||||||
|
f->to = f->start;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
fsfmtfidinit(Fmt *f, CFid *fid, char *buf, int size)
|
||||||
|
{
|
||||||
|
f->runes = 0;
|
||||||
|
f->start = buf;
|
||||||
|
f->to = buf;
|
||||||
|
f->stop = buf + size;
|
||||||
|
f->flush = fidflush;
|
||||||
|
f->farg = fid;
|
||||||
|
f->nfmt = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fsprint(CFid *fd, char *fmt, ...)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
n = fsvprint(fd, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fsvprint(CFid *fd, char *fmt, va_list args)
|
||||||
|
{
|
||||||
|
Fmt f;
|
||||||
|
char buf[256];
|
||||||
|
int n;
|
||||||
|
|
||||||
|
fsfmtfidinit(&f, fd, buf, sizeof(buf));
|
||||||
|
VA_COPY(f.args,args);
|
||||||
|
n = dofmt(&f, fmt);
|
||||||
|
VA_END(f.args);
|
||||||
|
if(n > 0 && fidflush(&f) == 0)
|
||||||
|
return -1;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue