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; }