shithub: pdffs

ref: d613b76a67a6dbb4d2c16a17e6994e7bdf2731df
dir: /eval.c/

View raw version
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "pdf.h"

Object *
pdfeval(Object **oo)
{
	Object *d, *o;
	Xref *x;
	int i;

	if(oo == nil || *oo == nil)
		return &null;
	o = *oo;
	if(o->type != Oindir)
		return o;

	for(i = 0; i < o->pdf->nxref && o->pdf->xref[i].id != o->indir.id; i++);
	if(i >= o->pdf->nxref){
		werrstr("no object id %d in xref", o->indir.id);
		return &null;
	}
	x = &o->pdf->xref[i];

	if(Bseek(o->pdf->bio, x->off, 0) != x->off){
		werrstr("xref seek failed");
		return &null;
	}
	if((d = pdfobj(o->pdf, o->pdf->bio)) == nil)
		return &null;
	*oo = d;
	pdfobjfree(o);

	return d;
}