diff options
author | mischief <mischief@offblast.org> | 2018-05-01 12:47:26 -0700 |
---|---|---|
committer | mischief <mischief@offblast.org> | 2018-05-01 12:47:26 -0700 |
commit | d05b90f300b79b79eb8462aed9f649d76e432b78 (patch) | |
tree | 791b51f15c56939d0e71a5a9c8a47b6e86cac06d /sys/src/libplumb | |
parent | e87ca8d97689ad9a63c0b56d0bfbda00c56abca2 (diff) |
libplumb: allow attributes larger than 4096, set some malloc tags
Diffstat (limited to 'sys/src/libplumb')
-rw-r--r-- | sys/src/libplumb/mesg.c | 25 |
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* |