commit a2be972828c866708cfd4583eaa204986e199405
parent 4bb2cc8fbd41eec44fdbf88d3708c07ae78412c6
Author: garbeam <garbeam@localhost>
Date: Sat, 7 Jan 2006 17:50:05 +0200
fixed stat en-/decoding in ixp2
Diffstat:
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;
}