static int add_to_srcpage_stream(pdf_document *xref,fz_context *ctx,int pageref,int pagegen, pdf_obj *srcdict) { fz_buffer *srcbuf; fz_buffer *dstbuf; int dstlen; // printf("@add_to_srcpage_stream()...pageref=%d\n",pageref); srcbuf=pdf_load_stream(xref,pdf_to_num(srcdict),pdf_to_gen(srcdict)); if (srcbuf==NULL) { dstbuf=pdf_load_stream(xref,pageref,pagegen); if (dstbuf==NULL) return(0); dstlen=fz_buffer_storage(ctx,dstbuf,NULL); fz_drop_buffer(ctx,dstbuf); return(dstlen); } if (!pdf_is_stream(xref,pageref,pagegen)) dstbuf=fz_new_buffer(ctx,16); else { dstbuf=pdf_load_stream(xref,pageref,pagegen); if (dstbuf==NULL) dstbuf=fz_new_buffer(ctx,16); } /* Concatenate srcbuf to dstbuf: (Will srcbuf->data be allowed?) */ dstlen=fz_buffer_storage(ctx,dstbuf,NULL); /* printf(" dstlen before = %d\n",dstlen); printf(" srclen = %d\n",fz_buffer_storage(ctx,srcbuf,NULL)); printf(" srcptr = %p\n",srcbuf->data); */ fz_write_buffer(ctx,dstbuf,srcbuf->data,fz_buffer_storage(ctx,srcbuf,NULL)); dstlen=fz_buffer_storage(ctx,dstbuf,NULL); // printf(" dstlen after = %d\n",dstlen); fz_drop_buffer(ctx,srcbuf); pdf_update_stream(xref,pageref,dstbuf); fz_drop_buffer(ctx,dstbuf); return(dstlen); }
static int new_stream_object(pdf_document *xref,fz_context *ctx,char *buf) { int ref; pdf_obj *obj,*len; fz_buffer *fzbuf; ref = pdf_create_object(xref); obj = pdf_new_dict(ctx,1); len=pdf_new_int(ctx,strlen(buf)); pdf_dict_puts(obj,"Length",len); pdf_drop_obj(len); pdf_update_object(xref,ref,obj); pdf_drop_obj(obj); fzbuf=fz_new_buffer(ctx,strlen(buf)); fz_write_buffer(ctx,fzbuf,(unsigned char *)buf,strlen(buf)); pdf_update_stream(xref,ref,fzbuf); fz_drop_buffer(ctx,fzbuf); return(ref); }
static unsigned char * gif_read_subblocks(fz_context *ctx, struct info *info, unsigned char *p, unsigned char *end, fz_buffer *buf) { int len; do { if (end - p < 1) fz_throw(ctx, FZ_ERROR_GENERIC, "premature end in data subblocks in gif image"); len = *p; p += 1; if (len > 0) { if (end - p < len) fz_throw(ctx, FZ_ERROR_GENERIC, "premature end in data subblock in gif image"); if (buf) fz_write_buffer(ctx, buf, p, len); p += len; } } while (len > 0); return p; }
static void buffer_write(fz_context *ctx, void *opaque, const void *data, int len) { fz_buffer *buffer = opaque; fz_write_buffer(ctx, buffer, data, len); }