fixed mem leaks
[swftools.git] / lib / pdf / pdf.cc
index e6bfe14..f148424 100644 (file)
@@ -186,6 +186,10 @@ void pdf_doc_destroy(gfxdocument_t*gfx)
 
     delete i->doc; i->doc=0;
     free(i->pages); i->pages = 0;
+   
+    if(i->pagemap) {
+       free(i->pagemap);
+    }
 
     i->docinfo.free();
 
@@ -196,6 +200,10 @@ void pdf_doc_destroy(gfxdocument_t*gfx)
     if(i->info) {
        delete i->info;i->info=0;
     }
+    if(i->parameters) {
+       gfxparams_free(i->parameters);
+       i->parameters=0;
+    }
 
     free(gfx->internal);gfx->internal=0;
     free(gfx);gfx=0;
@@ -368,6 +376,9 @@ static void pdf_setparameter(gfxsource_t*src, const char*name, const char*value)
     msg("<verbose> setting parameter %s to \"%s\"", name, value);
     if(!strncmp(name, "fontdir", strlen("fontdir"))) {
         addGlobalFontDir(value);
+    } else if(!strcmp(name, "addspacechars")) {
+       config_addspace = atoi(value);
+       gfxparams_store(i->parameters, "detectspaces", "0");
     } else if(!strcmp(name, "detectspaces")) {
        config_addspace = atoi(value);
     } else if(!strcmp(name, "fontquality")) {
@@ -442,7 +453,6 @@ static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
       delete userPW;
     }
     if (!i->doc->isOk()) {
-        printf("xpdf reports document as broken.\n");
         return 0;
     }
 
@@ -497,9 +507,15 @@ static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
     pdf_doc->getinfo = pdf_doc_getinfo;
     pdf_doc->getpage = pdf_doc_getpage;
     pdf_doc->prepare = pdf_doc_prepare;
+
+    /* pass global parameters to PDF driver*/
+    gfxparam_t*p = isrc->parameters->params;
+    while(p) {
+       pdf_doc->setparameter(pdf_doc, p->key, p->value);
+       p = p->next;
+    }
     
     return pdf_doc;
-
 }
     
 void pdf_destroy(gfxsource_t*src)