ref: a080ae88c6c65503575da220cb131ddada107bf6
dir: /array.c/
#include <u.h> #include <libc.h> #include <bio.h> #include "pdf.h" /* 7.3.6 Array Objects */ Object * pdfarray(Biobuf *b) { Object *o, *m; Object **a; int c, noel; o = calloc(1, sizeof(*o)); o->type = Oarray; Bgetc(b); /* throw away '[' */ for(noel = 0;;){ if((c = Bgetc(b)) < 0 || c == ']') break; if(noel){ werrstr("no ']'"); goto err; } Bungetc(b); if((m = pdfobject(b)) == nil){ noel = 1; continue; } 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; } if(c != ']'){ werrstr("no ']'"); goto err; } return o; err: werrstr("array: %r"); freeobject(o); return nil; }