예제 #1
0
void die(fz_error *eo)
{
    fflush(stdout);
    fz_printerror(eo);
    fflush(stderr);
    abort();
}
예제 #2
0
fz_error fz_rethrowimp(fz_error cause, const char *file, int line, const char *func, char *fmt, ...)
{
	char buf[100];
	va_list ap;
	va_start(ap, fmt);
	vsnprintf(buf, sizeof buf, fmt, ap);
	va_end(ap);
	fz_printerror('|', file, line, func, buf);
	return cause;
}
예제 #3
0
void die(fz_error *eo)
{
	fflush(stdout);
	fz_printerror(eo);
	fz_droperror(eo);
	fflush(stderr);
	if (drawgc)
		fz_droprenderer(drawgc);
	closesrc();
	abort();
}
예제 #4
0
void opensrc(char *filename, char *password, int loadpages)
{
    fz_error *error;

    closesrc();

    srcname = filename;

    error = pdf_newxref(&src);
    if (error)
        die(error);

    error = pdf_loadxref(src, filename);
    if (error)
    {
        fz_printerror(error);
        fz_warn("trying to repair");
        error = pdf_repairxref(src, filename);
        if (error)
            die(error);
    }

    error = pdf_decryptxref(src);
    if (error)
        die(error);

    if (src->crypt)
    {
        int okay = pdf_setpassword(src->crypt, password);
        if (!okay)
            die(fz_throw("invalid password"));
    }

    if (loadpages)
    {
        error = pdf_loadpagetree(&srcpages, src);
        if (error)
            die(error);
    }
}
예제 #5
0
파일: stm_open.c 프로젝트: lgchmomo/mupdf
void
fz_dropstream(fz_stream *stm)
{
	stm->refs --;
	if (stm->refs == 0)
	{
		if (stm->error)
		{
			fflush(stdout);
			fz_printerror(stm->error);
			fz_droperror(stm->error);
			fflush(stderr);
			fz_warn("dropped unhandled ioerror");
		}

		if (stm->mode == FZ_SWRITE)
		{
			stm->buffer->eof = 1;
			fz_flush(stm);
		}

		switch (stm->kind)
		{
		case FZ_SFILE:
			close(stm->file);
			break;
		case FZ_SFILTER:
			fz_dropfilter(stm->filter);
			fz_dropstream(stm->chain);
			break;
		case FZ_SBUFFER:
			break;
		}

		fz_dropbuffer(stm->buffer);
		fz_free(stm);
	}
}
예제 #6
0
void
fz_printerror(fz_error *eo)
{
#if 1
    if (eo->cause)
    {
        fz_printerror(eo->cause);
        fprintf(stderr, "| %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg);
    }
    else
    {
        fprintf(stderr, "+ %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg);
    }
#else
    fprintf(stderr, "+ %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg);
    eo = eo->cause;

    while (eo)
    {
        fprintf(stderr, "| %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg);
        eo = eo->cause;
    }
#endif
}
예제 #7
0
void opensrc(char *filename, char *password, int loadpages)
{
	fz_error *error;
	fz_obj *obj;

	closesrc();

	srcname = filename;

	error = pdf_newxref(&src);
	if (error)
		die(error);

	error = pdf_loadxref(src, filename);
	if (error)
	{
		fz_printerror(error);
		fz_droperror(error);
		fz_warn("trying to repair");
		error = pdf_repairxref(src, filename);
		if (error)
			die(error);
	}

	error = pdf_decryptxref(src);
	if (error)
		die(error);

	if (src->crypt)
	{
		int okay = pdf_setpassword(src->crypt, password);
		if (!okay)
			die(fz_throw("invalid password"));
	}

	if (loadpages)
	{
		error = pdf_loadpagetree(&srcpages, src);
		if (error)
			die(error);
	}

	/* TODO: move into mupdf lib, see pdfapp_open in pdfapp.c */
	obj = fz_dictgets(src->trailer, "Root");
	if (!obj)
		die(error);

	error = pdf_loadindirect(&src->root, src, obj);
	if (error)
		die(error);

	obj = fz_dictgets(src->trailer, "Info");
	if (obj)
	{
		error = pdf_loadindirect(&src->info, src, obj);
		if (error)
			die(error);
	}

	error = pdf_loadnametrees(src);
	if (error)
		die(error);

	error = pdf_loadoutline(&srcoutline, src);
	if (error)
		die(error);
}