mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-24 11:41:58 +00:00
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 fsremove(CFsys*, char*);
|
||||
CFid *fscreate(CFsys*, char*, int, ulong);
|
||||
int fsaccess(CFsys*, char*, int);
|
||||
int fsvprint(CFid*, char*, va_list);
|
||||
int fsprint(CFid*, char*, ...);
|
||||
|
||||
extern int chatty9pclient;
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ OFILES=\
|
|||
ns.$O\
|
||||
open.$O\
|
||||
openfd.$O\
|
||||
print.$O\
|
||||
read.$O\
|
||||
remove.$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…
Reference in a new issue