Resurrect "other endian" rpmdb functionality.
authorjbj <devnull@localhost>
Thu, 18 Mar 2004 15:29:23 +0000 (15:29 +0000)
committerjbj <devnull@localhost>
Thu, 18 Mar 2004 15:29:23 +0000 (15:29 +0000)
CVS patchset: 7177
CVS date: 2004/03/18 15:29:23

rpmdb/dbconfig.c
rpmdb/rpmdb.c

index d20327c..0a87cd9 100644 (file)
@@ -437,7 +437,7 @@ dbiIndex db3New(rpmdb rpmdb, rpmTag rpmtag)
     }
     /*@=sizeoftype@*/
 
-    dbi->dbi_byteswapped = 0;  /* -1 unknown, 0 native order, 1 alien order */
+    dbi->dbi_byteswapped = -1; /* -1 unknown, 0 native order, 1 alien order */
 
     if (!dbi->dbi_use_dbenv) {         /* db3 dbenv is always used now. */
        dbi->dbi_use_dbenv = 1;
index 409a565..4803818 100644 (file)
@@ -2200,9 +2200,15 @@ top:
 
        /* Don't bother re-checking a previously read header. */
        if (mi->mi_db->db_bits) {
-           pbm_set * set = PBM_REALLOC((pbm_set **)&mi->mi_db->db_bits,
-                       &mi->mi_db->db_nbits, mi->mi_offset);
-           if (PBM_ISSET(mi->mi_offset, set))
+           pbm_set * set;
+union _dbswap mi_offset;
+
+memcpy(&mi_offset.ui, &mi->mi_offset, sizeof(mi_offset.ui));
+if (dbiByteSwapped(dbi) == 1)
+    _DBSWAP(mi_offset);
+           set = PBM_REALLOC((pbm_set **)&mi->mi_db->db_bits,
+                       &mi->mi_db->db_nbits, mi_offset.ui);
+           if (PBM_ISSET(mi_offset.ui, set))
                rpmrc = RPMRC_OK;
        }
 
@@ -2220,9 +2226,15 @@ top:
 
            /* Mark header checked. */
            if (mi->mi_db && mi->mi_db->db_bits && rpmrc == RPMRC_OK) {
-               pbm_set * set = PBM_REALLOC((pbm_set **)&mi->mi_db->db_bits,
-                       &mi->mi_db->db_nbits, mi->mi_offset);
-               PBM_SET(mi->mi_offset, set);
+               pbm_set * set;
+union _dbswap mi_offset;
+
+memcpy(&mi_offset.ui, &mi->mi_offset, sizeof(mi_offset.ui));
+if (dbiByteSwapped(dbi) == 1)
+    _DBSWAP(mi_offset);
+               set = PBM_REALLOC((pbm_set **)&mi->mi_db->db_bits,
+                       &mi->mi_db->db_nbits, mi_offset.ui);
+               PBM_SET(mi_offset.ui, set);
            }
 
            /* Skip damaged and inconsistent headers. */