summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2009-07-18 14:59:44 +0200
committerTor Andersson <tor@ghostscript.com>2009-07-18 14:59:44 +0200
commite36b3779b5f409c21602ae7ca34bc2bb989f0a61 (patch)
tree3a34a37e21ecad16342a577ade6c5229e21df51c
parent1d3a42a1dec236c88b01ab59f59e246eb91445bd (diff)
downloadmupdf-e36b3779b5f409c21602ae7ca34bc2bb989f0a61.tar.xz
Load the pagecount after the encryption has been parsed and installed.
-rw-r--r--apps/common/pdfapp.c13
-rw-r--r--apps/common/pdftool.c5
-rw-r--r--apps/pdfdraw.c6
-rw-r--r--apps/pdfinfo.c12
-rw-r--r--apps/pdftool.h2
-rw-r--r--mupdf/mupdf.h1
-rw-r--r--mupdf/pdf_open.c7
-rw-r--r--mupdf/pdf_repair.c4
8 files changed, 23 insertions, 27 deletions
diff --git a/apps/common/pdfapp.c b/apps/common/pdfapp.c
index f4cea83f..69a41055 100644
--- a/apps/common/pdfapp.c
+++ b/apps/common/pdfapp.c
@@ -159,7 +159,10 @@ void pdfapp_open(pdfapp_t *app, char *filename)
* Start at first page
*/
- app->pagecount = app->xref->pagecount;
+ error = pdf_getpagecount(app->xref, &app->pagecount);
+ if (error)
+ pdfapp_error(app, error);
+
app->shrinkwrap = 1;
if (app->pageno < 1)
app->pageno = 1;
@@ -255,7 +258,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage)
pdfapp_error(app, error);
sprintf(buf, "%s - %d/%d", app->doctitle,
- app->pageno, app->xref->pagecount);
+ app->pageno, app->pagecount);
wintitle(app, buf);
}
@@ -441,7 +444,7 @@ void pdfapp_onkey(pdfapp_t *app, int c)
break;
case 'G':
- app->pageno = app->xref->pagecount;
+ app->pageno = app->pagecount;
break;
case 'm':
@@ -482,8 +485,8 @@ void pdfapp_onkey(pdfapp_t *app, int c)
if (app->pageno < 1)
app->pageno = 1;
- if (app->pageno > app->xref->pagecount)
- app->pageno = app->xref->pagecount;
+ if (app->pageno > app->pagecount)
+ app->pageno = app->pagecount;
if (app->pageno != oldpage)
{
diff --git a/apps/common/pdftool.c b/apps/common/pdftool.c
index a607ba3d..5de9e1b6 100644
--- a/apps/common/pdftool.c
+++ b/apps/common/pdftool.c
@@ -2,6 +2,7 @@
char *basename = nil;
pdf_xref *xref = nil;
+int pagecount = 0;
static void (*cleanup)(void) = nil;
void closexref(void);
@@ -67,6 +68,10 @@ void openxref(char *filename, char *password, int dieonbadpass)
xref->info = fz_resolveindirect(obj);
if (xref->info)
fz_keepobj(xref->info);
+
+ error = pdf_getpagecount(xref, &pagecount);
+ if (error)
+ die(error);
}
void closexref(void)
diff --git a/apps/pdfdraw.c b/apps/pdfdraw.c
index 14e85781..4cc3bd51 100644
--- a/apps/pdfdraw.c
+++ b/apps/pdfdraw.c
@@ -326,7 +326,7 @@ static void drawpages(char *pagelist)
if (strlen(dash) > 1)
epage = atoi(dash + 1);
else
- epage = xref->pagecount;
+ epage = pagecount;
}
if (spage > epage)
@@ -334,8 +334,8 @@ static void drawpages(char *pagelist)
if (spage < 1)
spage = 1;
- if (epage > xref->pagecount)
- epage = xref->pagecount;
+ if (epage > pagecount)
+ epage = pagecount;
printf("Drawing pages %d-%d...\n", spage, epage);
for (page = spage; page <= epage; page++)
diff --git a/apps/pdfinfo.c b/apps/pdfinfo.c
index b7fc4b4b..af44d1fa 100644
--- a/apps/pdfinfo.c
+++ b/apps/pdfinfo.c
@@ -742,7 +742,7 @@ printglobalinfo(void)
fz_debugobj(cryptinfo->u.crypt.obj);
}
- printf("\nPages: %d\n\n", xref->pagecount);
+ printf("\nPages: %d\n\n", pagecount);
}
static void
@@ -979,7 +979,7 @@ showinfo(char *filename, int show, char *pagelist)
if (strlen(dash) > 1)
epage = atoi(dash + 1);
else
- epage = xref->pagecount;
+ epage = pagecount;
}
if (spage > epage)
@@ -987,10 +987,10 @@ showinfo(char *filename, int show, char *pagelist)
if (spage < 1)
spage = 1;
- if (epage > xref->pagecount)
- epage = xref->pagecount;
- if (spage > xref->pagecount)
- spage = xref->pagecount;
+ if (epage > pagecount)
+ epage = pagecount;
+ if (spage > pagecount)
+ spage = pagecount;
if (allpages)
printf("Retrieving info from pages %d-%d...\n", spage, epage);
diff --git a/apps/pdftool.h b/apps/pdftool.h
index 6eb75770..706383f5 100644
--- a/apps/pdftool.h
+++ b/apps/pdftool.h
@@ -3,7 +3,7 @@
extern char *basename;
extern pdf_xref *xref;
-extern int pages;
+extern int pagecount;
void die(fz_error error);
void setcleanup(void (*cleanup)(void));
diff --git a/mupdf/mupdf.h b/mupdf/mupdf.h
index 3e7cebda..82e83a3f 100644
--- a/mupdf/mupdf.h
+++ b/mupdf/mupdf.h
@@ -121,7 +121,6 @@ struct pdf_xref_s
struct pdf_store_s *store;
struct pdf_outline_s *outlines;
- int pagecount;
};
struct pdf_xrefentry_s
diff --git a/mupdf/pdf_open.c b/mupdf/pdf_open.c
index da5f138b..c3e96224 100644
--- a/mupdf/pdf_open.c
+++ b/mupdf/pdf_open.c
@@ -720,13 +720,6 @@ pdf_loadxref(pdf_xref *xref, char *filename)
goto cleanup;
}
- error = pdf_getpagecount(xref, &xref->pagecount);
- if (error)
- {
- error = fz_rethrow(error, "cannot determine page count");
- goto cleanup;
- }
-
return fz_okay;
cleanup:
diff --git a/mupdf/pdf_repair.c b/mupdf/pdf_repair.c
index 19f71538..56bc59ac 100644
--- a/mupdf/pdf_repair.c
+++ b/mupdf/pdf_repair.c
@@ -351,10 +351,6 @@ pdf_repairxref(pdf_xref *xref, char *filename)
}
}
- error = pdf_getpagecount(xref, &xref->pagecount);
- if (error)
- return fz_rethrow(error, "cannot determine page count");
-
fz_free(list);
return fz_okay;