Add pool-aware versions of rpmdsThis() and rpmdsSingle()
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 13 Sep 2012 07:56:42 +0000 (10:56 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 13 Sep 2012 08:01:09 +0000 (11:01 +0300)
- Pooh ... I mean pool ... bah. The previous  versions become simple
  wrappers to the pool-aware ones, using a private pool always.
  rpmdsCurrent() doesn't need pool-variant as its inherits its pool
  from the parent.

lib/rpmds.c
lib/rpmds.h

index a7d27b3..d21944c 100644 (file)
@@ -297,33 +297,47 @@ exit:
     return ds;
 }
 
-static rpmds singleDS(rpmTagVal tagN, const char * N, const char * EVR,
+static rpmds singleDS(rpmstrPool pool, rpmTagVal tagN,
+                     const char * N, const char * EVR,
                      rpmsenseFlags Flags, unsigned int instance,
                      rpm_color_t Color)
 {
-    rpmds ds = singleDSPool(NULL, tagN, 0, 0, Flags, instance, Color);
+    rpmds ds = singleDSPool(pool, tagN, 0, 0, Flags, instance, Color);
     if (ds) {
        /* now that we have a pool, we can insert our N & EVR strings */
        ds->N[0] = rpmstrPoolId(ds->pool, N ? N : "", 1);
        ds->EVR[0] = rpmstrPoolId(ds->pool, EVR ? EVR : "", 1);
-       /* freeze the pool to save memory */
-       rpmstrPoolFreeze(ds->pool, 0);
+       /* freeze the pool to save memory, but only if private pool */
+       if (ds->pool != pool)
+           rpmstrPoolFreeze(ds->pool, 0);
     }
     return ds;
 }
 
-rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags)
+rpmds rpmdsThisPool(rpmstrPool pool,
+                   Header h, rpmTagVal tagN, rpmsenseFlags Flags)
 {
     char *evr = headerGetAsString(h, RPMTAG_EVR);
-    rpmds ds = singleDS(tagN, headerGetString(h, RPMTAG_NAME),
+    rpmds ds = singleDS(pool, tagN, headerGetString(h, RPMTAG_NAME),
                        evr, Flags, headerGetInstance(h), 0);
     free(evr);
     return ds;
 }
 
+rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags)
+{
+    return rpmdsThisPool(NULL, h, tagN, Flags);
+}
+
+rpmds rpmdsSinglePool(rpmstrPool pool,rpmTagVal tagN,
+                     const char * N, const char * EVR, rpmsenseFlags Flags)
+{
+    return singleDS(pool, tagN, N, EVR, Flags, 0, 0);
+}
+
 rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags)
 {
-    return singleDS(tagN, N, EVR, Flags, 0, 0);
+    return rpmdsSinglePool(NULL, tagN, N, EVR, Flags);
 }
 
 rpmds rpmdsCurrent(rpmds ds)
index 0a4f27f..8b5e813 100644 (file)
@@ -136,6 +136,17 @@ char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds);
 rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags);
 
 /** \ingroup rpmds
+ * Create, load and initialize a dependency for this header. 
+ * @param pool         string pool (or NULL for private pool)
+ * @param h            header
+ * @param tagN         type of dependency
+ * @param Flags                comparison flags
+ * @return             new dependency set
+ */
+rpmds rpmdsThisPool(rpmstrPool pool,
+                   Header h, rpmTagVal tagN, rpmsenseFlags Flags);
+
+/** \ingroup rpmds
  * Create, load and initialize a dependency set of size 1.
  * @param tagN         type of dependency
  * @param N            name
@@ -146,6 +157,18 @@ rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags);
 rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags);
 
 /** \ingroup rpmds
+ * Create, load and initialize a dependency set of size 1.
+ * @param pool         string pool (or NULL for private pool)
+ * @param tagN         type of dependency
+ * @param N            name
+ * @param EVR          epoch:version-release
+ * @param Flags                comparison flags
+ * @return             new dependency set
+ */
+rpmds rpmdsSinglePool(rpmstrPool pool, rpmTagVal tagN,
+                     const char * N, const char * EVR, rpmsenseFlags Flags);
+
+/** \ingroup rpmds
  * Return a new dependency set of size 1 from the current iteration index
  * @param ds           dependency set
  * @return             new dependency set