]> git.saurik.com Git - apple/libc.git/blobdiff - db/hash/FreeBSD/hash_page.c
Libc-825.24.tar.gz
[apple/libc.git] / db / hash / FreeBSD / hash_page.c
index 1f44bdeab664c8794c01e594e182b9f3fd5e136f..809a3b9e1203501903dabad2b366087ebdf4bf85 100644 (file)
@@ -70,7 +70,7 @@ __FBSDID("$FreeBSD: src/lib/libc/db/hash/hash_page.c,v 1.16 2009/03/28 06:30:43
 #include <db.h>
 #include "hash.h"
 #include "page.h"
-#include "extern.h"
+#include "hash_extern.h"
 
 static u_int32_t *fetch_bitmap(HTAB *, int);
 static u_int32_t  first_free(u_int32_t);
@@ -571,7 +571,7 @@ __get_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_disk,
 int
 __put_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_bitmap)
 {
-       int fd, page, size, wsize;
+       int fd, page, size, wsize, max;
 
        size = hashp->BSIZE;
        if ((hashp->fp == -1) && open_temp(hashp))
@@ -579,7 +579,7 @@ __put_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_bitmap)
        fd = hashp->fp;
 
        if (hashp->LORDER != BYTE_ORDER) {
-               int i, max;
+               int i;
 
                if (is_bitmap) {
                        max = hashp->BSIZE >> 2;        /* divide by 4 */
@@ -602,6 +602,18 @@ __put_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_bitmap)
                errno = EFTYPE;
                return (-1);
        }
+       /* 4485533 - reswap the in-memory copy */
+       if (hashp->LORDER != BYTE_ORDER) {
+               int i;
+
+               if (is_bitmap) {
+                       for (i = 0; i < max; i++)
+                               M_32_SWAP(((int *)p)[i]);
+               } else {
+                       for (i = 0; i <= max; i++)
+                               M_16_SWAP(((u_int16_t *)p)[i]);
+               }
+       }
        return (0);
 }