moved feature list into class, fixed some memleaks
authorkramm <kramm>
Sun, 6 Apr 2008 16:50:43 +0000 (16:50 +0000)
committerkramm <kramm>
Sun, 6 Apr 2008 16:50:43 +0000 (16:50 +0000)
lib/pdf/GFXOutputDev.cc
lib/pdf/GFXOutputDev.h

index 08016cc..a61aebc 100644 (file)
@@ -152,16 +152,9 @@ static void dbg(const char*format, ...)
 }
 
 
 }
 
 
-typedef struct _feature
-{
-    char*string;
-    struct _feature*next;
-} feature_t;
-feature_t*featurewarnings = 0;
-
 void GFXOutputDev::showfeature(const char*feature, char fully, char warn)
 {
 void GFXOutputDev::showfeature(const char*feature, char fully, char warn)
 {
-    feature_t*f = featurewarnings;
+    feature_t*f = this->featurewarnings;
     while(f) {
        if(!strcmp(feature, f->string))
            return;
     while(f) {
        if(!strcmp(feature, f->string))
            return;
@@ -169,8 +162,8 @@ void GFXOutputDev::showfeature(const char*feature, char fully, char warn)
     }
     f = (feature_t*)malloc(sizeof(feature_t));
     f->string = strdup(feature);
     }
     f = (feature_t*)malloc(sizeof(feature_t));
     f->string = strdup(feature);
-    f->next = featurewarnings;
-    featurewarnings = f;
+    f->next = this->featurewarnings;
+    this->featurewarnings = f;
     if(warn) {
        msg("<warning> %s not yet %ssupported!",feature,fully?"fully ":"");
        if(this->config_break_on_warning) {
     if(warn) {
        msg("<warning> %s not yet %ssupported!",feature,fully?"fully ":"");
        if(this->config_break_on_warning) {
@@ -582,6 +575,7 @@ GFXOutputDev::GFXOutputDev(InfoOutputDev*info, PDFDoc*doc)
     this->gfxfontlist = gfxfontlist_create();
   
     memset(states, 0, sizeof(states));
     this->gfxfontlist = gfxfontlist_create();
   
     memset(states, 0, sizeof(states));
+    this->featurewarnings = 0;
 };
 
 void GFXOutputDev::setParameter(const char*key, const char*value)
 };
 
 void GFXOutputDev::setParameter(const char*key, const char*value)
@@ -1218,6 +1212,18 @@ GFXOutputDev::~GFXOutputDev()
     if(this->pages) {
        free(this->pages); this->pages = 0;
     }
     if(this->pages) {
        free(this->pages); this->pages = 0;
     }
+    
+    feature_t*f = this->featurewarnings;
+    while(f) {
+       feature_t*next = f->next;
+       if(f->string) {
+           free(f->string);f->string =0;
+       }
+       f->next = 0;
+       free(f);
+       f = next;
+    }
+    this->featurewarnings = 0;
 
     gfxfontlist_free(this->gfxfontlist, 1);this->gfxfontlist = 0;
 };
 
     gfxfontlist_free(this->gfxfontlist, 1);this->gfxfontlist = 0;
 };
@@ -2114,14 +2120,14 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
 
   if(!pbminfo && !(str->getKind()==strDCT)) {
       if(!type3active) {
 
   if(!pbminfo && !(str->getKind()==strDCT)) {
       if(!type3active) {
-         msg("<notice> file contains pbm pictures %s",mask?"(masked)":"");
+         msg("<notice> File contains pbm pictures %s",mask?"(masked)":"");
          pbminfo = 1;
       }
       if(mask)
       msg("<verbose> drawing %d by %d masked picture", width, height);
   }
   if(!jpeginfo && (str->getKind()==strDCT)) {
          pbminfo = 1;
       }
       if(mask)
       msg("<verbose> drawing %d by %d masked picture", width, height);
   }
   if(!jpeginfo && (str->getKind()==strDCT)) {
-      msg("<notice> file contains jpeg pictures");
+      msg("<notice> File contains jpeg pictures");
       jpeginfo = 1;
   }
 
       jpeginfo = 1;
   }
 
@@ -2664,14 +2670,13 @@ void GFXOutputDev::clearSoftMask(GfxState *state)
     gfxresult_record_replay(below, &uniondev);
     gfxline_t*belowoutline = gfxdevice_union_getunion(&uniondev);
     uniondev.finish(&uniondev);
     gfxresult_record_replay(below, &uniondev);
     gfxline_t*belowoutline = gfxdevice_union_getunion(&uniondev);
     uniondev.finish(&uniondev);
-
     gfxbbox_t bbox = gfxline_getbbox(belowoutline);
     gfxbbox_t bbox = gfxline_getbbox(belowoutline);
+    gfxline_free(belowoutline);belowoutline=0;
 #if 0 
     this->device->startclip(this->device, belowoutline);
     gfxresult_record_replay(below, this->device);
     gfxresult_record_replay(mask, this->device);
     this->device->endclip(this->device);
 #if 0 
     this->device->startclip(this->device, belowoutline);
     gfxresult_record_replay(below, this->device);
     gfxresult_record_replay(mask, this->device);
     this->device->endclip(this->device);
-    gfxline_free(belowoutline);
 #endif
     
     int width = (int)bbox.xmax,height = (int)bbox.ymax;
 #endif
     
     int width = (int)bbox.xmax,height = (int)bbox.ymax;
index 89c6185..51e6312 100644 (file)
@@ -38,6 +38,12 @@ typedef struct _parameter
     struct _parameter*next;
 } parameter_t;
 
     struct _parameter*next;
 } parameter_t;
 
+typedef struct _feature
+{
+    char*string;
+    struct _feature*next;
+} feature_t;
+
 void addGlobalFont(const char*filename);
 void addGlobalLanguageDir(const char*dir);
 void addGlobalFontDir(const char*dirname);
 void addGlobalFont(const char*filename);
 void addGlobalLanguageDir(const char*dir);
 void addGlobalFontDir(const char*dirname);
@@ -216,6 +222,8 @@ public:
   void warnfeature(const char*feature,char fully);
   void infofeature(const char*feature);
 
   void warnfeature(const char*feature,char fully);
   void infofeature(const char*feature);
 
+  feature_t*featurewarnings;
+
   char outer_clip_box; //whether the page clip box is still on
 
   gfxfontlist_t*gfxfontlist;
   char outer_clip_box; //whether the page clip box is still on
 
   gfxfontlist_t*gfxfontlist;