Turn rpmfiNew() scareMem argument into bitfield of flags
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 29 Oct 2008 12:08:12 +0000 (14:08 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 30 Oct 2008 11:47:40 +0000 (13:47 +0200)
- preserve behavior with 0/1
- more room for controlling what gets loaded into file info set, not
  everything is needed at all times

lib/rpmfi.c
lib/rpmfi.h

index bf03761..c20088c 100644 (file)
@@ -1187,7 +1187,7 @@ fprintf(stderr, "*** fi %p\t%s[%d]\n", fi, fi->Type, fi->fc);
     if (headerGet((_h), (_tag), (_td), (_flags))) \
        _data = (td.data)
 
-rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, rpmfiFlags flags)
 {
     rpmte p;
     rpmfi fi = NULL;
@@ -1197,7 +1197,8 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
     unsigned char * t;
     struct rpmtd_s fdigests, digalgo;
     struct rpmtd_s td;
-    headerGetFlags scareFlags = scareMem ? HEADERGET_MINMEM : HEADERGET_ALLOC;
+    headerGetFlags scareFlags = (flags & RPMFI_KEEPHEADER) ? 
+                               HEADERGET_MINMEM : HEADERGET_ALLOC;
     headerGetFlags defFlags = HEADERGET_ALLOC;
     int len;
     int i;
@@ -1220,7 +1221,8 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
 
     fi->scareFlags = scareFlags;
 
-    fi->h = (scareMem ? headerLink(h) : NULL);
+    fi->keep_header = (flags & RPMFI_KEEPHEADER);
+    fi->h = fi->keep_header ? headerLink(h) : NULL;
 
     if (fi->fsm == NULL)
        fi->fsm = newFSM();
@@ -1279,8 +1281,6 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
 if (fi->actions == NULL)
        fi->actions = xcalloc(fi->fc, sizeof(*fi->actions));
 
-    fi->keep_header = (scareMem ? 1 : 0);
-
     /* XXX TR_REMOVED needs CPIO_MAP_{ABSOLUTE,ADDDOT} CPIO_ALL_HARDLINKS */
     fi->mapflags =
                CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID;
@@ -1345,7 +1345,7 @@ if (fi->actions == NULL)
        foo = headerFree(foo);
     }
 
-    if (!scareMem) {
+    if (!fi->keep_header) {
        fi->h = headerFree(fi->h);
     }
 
index f3498f6..b0b68e3 100644 (file)
@@ -373,16 +373,21 @@ rpmfi rpmfiInitD(rpmfi fi, int dx);
  */
 rpmfi rpmfiFree(rpmfi fi);
 
+typedef enum rpmfiFlags_e {
+    RPMFI_NOHEADER     = 0,
+    RPMFI_KEEPHEADER   = (1 << 0),
+} rpmfiFlags;
+
 /** \ingroup rpmfi
  * Create and load a file info set.
  * @deprecated Only scareMem = 0 will be permitted.
  * @param ts           transaction set (NULL skips path relocation)
  * @param h            header
  * @param tagN         RPMTAG_BASENAMES
- * @param scareMem     Use pointers to refcounted header memory?
+ * @param flags                Flags to control what information is loaded.
  * @return             new file info set
  */
-rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem);
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, rpmfiFlags flags);
 
 /** \ingroup rpmfi
  * Return file type from mode_t.