destroy globalparams if no pdf is currently open
[swftools.git] / lib / pdf / pdf.cc
index 0e2ba10..f06949e 100644 (file)
@@ -115,6 +115,8 @@ void pdfpage_rendersection(gfxpage_t*page, gfxdevice_t*output, gfxcoord_t x, gfx
     pi->outputDev->setDevice(0);
 }
 
+static int globalparams_count=0;
+
 void pdf_doc_destroy(gfxdocument_t*gfx)
 {
     pdf_doc_internal_t*i= (pdf_doc_internal_t*)gfx->internal;
@@ -135,6 +137,13 @@ void pdf_doc_destroy(gfxdocument_t*gfx)
        free(global_page_range);
        global_page_range = 0;
     }
+    
+    globalparams_count--;
+    if(!globalparams_count) {
+       delete globalParams;
+       globalParams = 0;
+       globalparams_count = 0;
+    }
 }
 
 void pdf_doc_set_parameter(gfxdocument_t*gfx, const char*name, const char*value)
@@ -179,7 +188,7 @@ static char*getInfoString(Dict *infoDict, char *key)
     GString *s1, *s2;
     int i;
 
-    if (infoDict->lookup(key, &obj)->isString()) {
+    if (infoDict && infoDict->lookup(key, &obj)->isString()) {
        s1 = obj.getString();
        if ((s1->getChar(0) & 0xff) == 0xfe &&
            (s1->getChar(1) & 0xff) == 0xff) {
@@ -211,7 +220,7 @@ static char*getInfoDate(Dict *infoDict, char *key)
     Object obj;
     char *s;
 
-    if (infoDict->lookup(key, &obj)->isString()) {
+    if (infoDict && infoDict->lookup(key, &obj)->isString()) {
        s = obj.getString()->getCString();
        if (s[0] == 'D' && s[1] == ':') {
          s += 2;
@@ -300,6 +309,11 @@ static void pdf_set_parameter(const char*name, const char*value)
 
 static gfxdocument_t*pdf_open(const char*filename)
 {
+    if(!globalParams) {
+        globalParams = new GFXGlobalParams();
+       globalparams_count++;
+    }
+    
     gfxdocument_t*pdf_doc = (gfxdocument_t*)malloc(sizeof(gfxdocument_t));
     memset(pdf_doc, 0, sizeof(gfxdocument_t));
     pdf_doc_internal_t*i= (pdf_doc_internal_t*)malloc(sizeof(pdf_doc_internal_t));
@@ -318,10 +332,6 @@ static gfxdocument_t*pdf_open(const char*filename)
     GString *fileName = new GString(filename);
     GString *userPW;
 
-    // read config file
-    if(!globalParams)
-        globalParams = new GlobalParams("");
-
     // open PDF file
     if (userPassword && userPassword[0]) {
       userPW = new GString(userPassword);