summaryrefslogtreecommitdiff
path: root/sys/src/libplumb
diff options
context:
space:
mode:
authormischief <mischief@offblast.org>2018-05-01 12:47:26 -0700
committermischief <mischief@offblast.org>2018-05-01 12:47:26 -0700
commitd05b90f300b79b79eb8462aed9f649d76e432b78 (patch)
tree791b51f15c56939d0e71a5a9c8a47b6e86cac06d /sys/src/libplumb
parente87ca8d97689ad9a63c0b56d0bfbda00c56abca2 (diff)
libplumb: allow attributes larger than 4096, set some malloc tags
Diffstat (limited to 'sys/src/libplumb')
-rw-r--r--sys/src/libplumb/mesg.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/sys/src/libplumb/mesg.c b/sys/src/libplumb/mesg.c
index 328604288..5b111f679 100644
--- a/sys/src/libplumb/mesg.c
+++ b/sys/src/libplumb/mesg.c
@@ -76,15 +76,21 @@ quote(char *s, char *buf, char *bufe)
char*
plumbpackattr(Plumbattr *attr)
{
- int n;
+ int n, l;
Plumbattr *a;
char *s, *t, *buf, *bufe;
if(attr == nil)
return nil;
- if((buf = malloc(4096)) == nil)
+ n = 0;
+ for(a=attr; a!=nil; a=a->next){
+ l = Strlen(a->value);
+ if(l > n)
+ n = l;
+ }
+ if((buf = malloc(n*2+3)) == nil)
return nil;
- bufe = buf + 4096;
+ bufe = buf + n*2+3;
n = 0;
for(a=attr; a!=nil; a=a->next)
n += Strlen(a->name) + 1 + Strlen(quote(a->value, buf, bufe)) + 1;
@@ -221,9 +227,11 @@ plumbunpackattr(char *p)
char *q, *v, *buf, *bufe;
int c, quoting;
- if((buf = malloc(4096)) == nil)
+ c = strlen(p) + 1;
+
+ if((buf = malloc(c)) == nil)
return nil;
- bufe = buf + 4096;
+ bufe = buf + c;
attr = prev = nil;
while(*p!='\0' && *p!='\n'){
while(*p==' ' || *p=='\t')
@@ -340,6 +348,7 @@ plumbunpackpartial(char *buf, int n, int *morep)
m = malloc(sizeof(Plumbmsg));
if(m == nil)
return nil;
+ setmalloctag(m, getcallerpc(&buf));
memset(m, 0, sizeof(Plumbmsg));
if(morep != nil)
*morep = 0;
@@ -384,7 +393,11 @@ plumbunpackpartial(char *buf, int n, int *morep)
Plumbmsg*
plumbunpack(char *buf, int n)
{
- return plumbunpackpartial(buf, n, nil);
+ Plumbmsg *m;
+ m = plumbunpackpartial(buf, n, nil);
+ if(m != nil)
+ setmalloctag(m, getcallerpc(&buf));
+ return m;
}
Plumbmsg*