ref: 3c27f041321b91dbf2bfd0ab9e4865e03854cd68
dir: /array.c/
#include <u.h>
#include <libc.h>
#include <ctype.h>
#include "pdf.h"
Object *
pdfarray(char *p, char **e, int len)
{
Object *o, *m;
Object **a;
o = nil;
if(len < 3 || p[0] != '['){
werrstr("invalid array");
goto err;
}
p++;
len--;
o = calloc(1, sizeof(*o));
o->type = Oarray;
for(; len >= 1;){
for(; len > 0 && isws(*p); p++, len--);
if(len < 1){
werrstr("too short");
goto err;
}
if(p[0] == ']'){
p++;
break;
}
if((m = pdfobject(p, e, len)) == nil)
goto err;
len -= *e - p;
p = *e;
if((a = realloc(o->array.e, (o->array.ne+1)*sizeof(Object*))) == nil){
freeobject(m);
goto err;
}
o->array.e = a;
a[o->array.ne++] = m;
}
*e = p;
return o;
err:
freeobject(o);
return nil;
}