wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit a2be972828c866708cfd4583eaa204986e199405
parent 4bb2cc8fbd41eec44fdbf88d3708c07ae78412c6
Author: garbeam <garbeam@localhost>
Date:   Sat,  7 Jan 2006 17:50:05 +0200

fixed stat en-/decoding in ixp2


Diffstat:
cmd/wmiibar2.c | 6+++---
cmd/wmiir2.c | 3+--
libixp2/convert.c | 14+++++++-------
libixp2/ixp.h | 2+-
libixp2/message.c | 4++--
5 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/cmd/wmiibar2.c b/cmd/wmiibar2.c @@ -342,18 +342,18 @@ xread(IXPServer * s, IXPConn * c) cext_strlcpy(stat.name, "display", sizeof(stat.name)); stat.length = strlen(align); make_qid(&root_qid, "display", &stat.qid); - s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); p = ixp_enc_stat(p, &stat); + s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); cext_strlcpy(stat.name, "font", sizeof(stat.name)); stat.length = strlen(font); make_qid(&root_qid, "font", &stat.qid); - s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); p = ixp_enc_stat(p, &stat); + s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); cext_strlcpy(stat.name, "new", sizeof(stat.name)); stat.length = 0; make_qid(&root_qid, "new", &stat.qid); - s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); p = ixp_enc_stat(p, &stat); + s->fcall.count += ixp_sizeof_stat(&stat) + sizeof(unsigned short); s->fcall.id = RREAD; if(s->fcall.offset >= s->fcall.count) s->fcall.count = 0; /* EOF */ diff --git a/cmd/wmiir2.c b/cmd/wmiir2.c @@ -97,9 +97,8 @@ print_dir(void *result, unsigned int msize) unsigned int len = 0; unsigned short size; do { - p = ixp_dec_u16(p, &size); + p = ixp_dec_stat(p, &stat, &size); len += size + sizeof(unsigned short); - p = ixp_dec_stat(p, &stat); if(stat.qid.type == IXP_QTDIR) fprintf(stdout, "%s/\n", stat.name); else diff --git a/libixp2/convert.c b/libixp2/convert.c @@ -179,10 +179,10 @@ ixp_enc_stat(unsigned char *msg, Stat * stat) } void * -ixp_dec_stat(unsigned char *msg, Stat * stat) +ixp_dec_stat(unsigned char *msg, Stat * stat, unsigned short *len) { - unsigned short len; - msg = ixp_dec_u16(msg, &len); + unsigned short dummy; + msg = ixp_dec_u16(msg, len); msg = ixp_dec_u16(msg, &stat->type); msg = ixp_dec_u32(msg, &stat->dev); msg = ixp_dec_qid(msg, &stat->qid); @@ -190,8 +190,8 @@ ixp_dec_stat(unsigned char *msg, Stat * stat) msg = ixp_dec_u32(msg, &stat->atime); msg = ixp_dec_u32(msg, &stat->mtime); msg = ixp_dec_u64(msg, &stat->length); - msg = ixp_dec_string(msg, stat->name, sizeof(stat->name), &len); - msg = ixp_dec_string(msg, stat->uid, sizeof(stat->uid), &len); - msg = ixp_dec_string(msg, stat->gid, sizeof(stat->gid), &len); - return ixp_dec_string(msg, stat->muid, sizeof(stat->muid), &len); + msg = ixp_dec_string(msg, stat->name, sizeof(stat->name), &dummy); + msg = ixp_dec_string(msg, stat->uid, sizeof(stat->uid), &dummy); + msg = ixp_dec_string(msg, stat->gid, sizeof(stat->gid), &dummy); + return ixp_dec_string(msg, stat->muid, sizeof(stat->muid), &dummy); } diff --git a/libixp2/ixp.h b/libixp2/ixp.h @@ -253,7 +253,7 @@ void *ixp_dec_prefix(unsigned char *msg, unsigned int *size, void *ixp_enc_qid(unsigned char *msg, Qid * qid); void *ixp_dec_qid(unsigned char *msg, Qid * qid); void *ixp_enc_stat(unsigned char *msg, Stat * stat); -void *ixp_dec_stat(unsigned char *msg, Stat * stat); +void *ixp_dec_stat(unsigned char *msg, Stat * stat, unsigned short *len); /* message.c */ unsigned short ixp_sizeof_stat(Stat * stat); diff --git a/libixp2/message.c b/libixp2/message.c @@ -300,11 +300,11 @@ ixp_msg_to_fcall(void *msg, unsigned int msglen, Fcall * fcall) p = ixp_dec_u32(p, &fcall->fid); break; case RSTAT: - p = ixp_dec_stat(p, &fcall->stat); + p = ixp_dec_stat(p, &fcall->stat, &len); break; case TWSTAT: p = ixp_dec_u32(p, &fcall->fid); - p = ixp_dec_stat(p, &fcall->stat); + p = ixp_dec_stat(p, &fcall->stat, &len); break; }