]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - ppdc/ppdc-group.cxx
Merge changes from CUPS 1.5svn-r9049 (private header support)
[thirdparty/cups.git] / ppdc / ppdc-group.cxx
index c93fc20b1b330a6b312ae6e2669e43159d4bc744..413a8f28a068ed475adf79436057193243c8e2fe 100644 (file)
@@ -3,7 +3,7 @@
 //
 //   Group class for the CUPS PPD Compiler.
 //
-//   Copyright 2007 by Apple Inc.
+//   Copyright 2007-2009 by Apple Inc.
 //   Copyright 2002-2005 by Easy Software Products.
 //
 //   These coded instructions, statements, and computer programs are the
@@ -14,7 +14,6 @@
 //
 // Contents:
 //
-//   ppdcGroup::ppdcGroup()   - Create a new group.
 //   ppdcGroup::ppdcGroup()   - Copy a new group.
 //   ppdcGroup::~ppdcGroup()  - Destroy a group.
 //   ppdcGroup::find_option() - Find an option in a group.
@@ -24,7 +23,7 @@
 // Include necessary headers...
 //
 
-#include "ppdc.h"
+#include "ppdc-private.h"
 
 
 //
@@ -34,6 +33,8 @@
 ppdcGroup::ppdcGroup(const char *n,    // I - Name of group
                      const char *t)    // I - Text of group
 {
+  PPDC_NEWVAL(n);
+
   name    = new ppdcString(n);
   text    = new ppdcString(t);
   options = new ppdcArray();
@@ -46,17 +47,18 @@ ppdcGroup::ppdcGroup(const char *n, // I - Name of group
 
 ppdcGroup::ppdcGroup(ppdcGroup *g)     // I - Group template
 {
-  ppdcOption   *o;                     // Current option
-
+  PPDC_NEWVAL(g->name->value);
 
-  g->name->get();
-  g->text->get();
+  g->name->retain();
+  g->text->retain();
 
   name = g->name;
   text = g->text;
 
   options = new ppdcArray();
-  for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
+  for (ppdcOption *o = (ppdcOption *)g->options->first();
+       o;
+       o = (ppdcOption *)g->options->next())
     options->add(new ppdcOption(o));
 }
 
@@ -67,9 +69,14 @@ ppdcGroup::ppdcGroup(ppdcGroup *g)   // I - Group template
 
 ppdcGroup::~ppdcGroup()
 {
+  PPDC_DELETEVAL(name ? name->value : NULL);
+
   name->release();
   text->release();
-  delete options;
+  options->release();
+
+  name = text = 0;
+  options = 0;
 }