- fix: %dev(...) needs to map rdev and mtime from metadata.
authorjbj <devnull@localhost>
Wed, 18 Jul 2001 10:49:09 +0000 (10:49 +0000)
committerjbj <devnull@localhost>
Wed, 18 Jul 2001 10:49:09 +0000 (10:49 +0000)
CVS patchset: 4953
CVS date: 2001/07/18 10:49:09

CHANGES
lib/fsm.c
lib/psm.c
lib/psm.h

diff --git a/CHANGES b/CHANGES
index 595da4e..8bba23f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
        - fix: short aliases broken (#49213).
        - python: "seal" immutable region for legacy headers in rhnUnload() .
        - python: add poptmodule.so bindings.
+       - fix: %dev(...) needs to map rdev and mtime from metadata.
 
 4.0 -> 4.0.[12]
        - add doxygen and lclint annotations most everywhere.
index 6940c51..6f09270 100644 (file)
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -628,6 +628,10 @@ int fsmMapAttrs(FSM_t fsm)
                (fi->fuids ? fi->fuids[i] : fi->uid); /* XXX chmod u-s */
        gid_t finalGid =
                (fi->fgids ? fi->fgids[i] : fi->gid); /* XXX chmod g-s */
+       dev_t finalRdev =
+               (fi->frdevs ? fi->frdevs[i] : 0);
+       int_32 finalMtime =
+               (fi->fmtimes ? fi->fmtimes[i] : 0);
 
        if (fsm->mapFlags & CPIO_MAP_MODE)
            st->st_mode = (st->st_mode & S_IFMT) | (finalMode & ~S_IFMT);
@@ -636,6 +640,8 @@ int fsmMapAttrs(FSM_t fsm)
            if ((S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
            && st->st_nlink == 0)
                st->st_nlink = 1;
+           st->st_rdev = finalRdev;
+           st->st_mtime = finalMtime;
        }
        if (fsm->mapFlags & CPIO_MAP_UID)
            st->st_uid = finalUid;
index b0f1f30..9fe34f9 100644 (file)
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -129,6 +129,7 @@ void loadFi(Header h, TFI_t fi)
        rc = hge(fi->h, RPMTAG_FILELINKTOS, NULL, (void **) &fi->flinks, NULL);
        rc = hge(fi->h, RPMTAG_FILELANGS, NULL, (void **) &fi->flangs, NULL);
        rc = hge(fi->h, RPMTAG_FILEMTIMES, NULL, (void **) &fi->fmtimes, NULL);
+       rc = hge(fi->h, RPMTAG_FILERDEVS, NULL, (void **) &fi->frdevs, NULL);
 
        /* 0 makes for noops */
        fi->replacedSizes = xcalloc(fi->fc, sizeof(*fi->replacedSizes));
index 3dd3f88..a88b0de 100644 (file)
--- a/lib/psm.h
+++ b/lib/psm.h
@@ -51,6 +51,7 @@ struct transactionFileInfo_s {
 /*@owned@*/ const char ** flinks;      /*!< File link(s) (from header) */
 /* XXX setuid/setgid bits are turned off if fuser/fgroup doesn't map. */
     uint_16 * fmodes;          /*!< File mode(s) (from header) */
+    uint_16 * frdevs;          /*!< File rdev(s) (from header) */
 /*@only@*/ /*@null@*/ char * fstates;  /*!< File state(s) (from header) */
 /*@owned@*/ const char ** fuser;       /*!< File owner(s) */
 /*@owned@*/ const char ** fgroup;      /*!< File group(s) */