1 /*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1996, 1997, 1998 5 * Sleepycat Software. All rights reserved. 6 */ 7 8 #include "config.h" 9 10 #ifndef lint 11 static const char sccsid[] = "@(#)bt_conv.c 10.7 (Sleepycat) 9/20/98"; 12 #endif /* not lint */ 13 14 #ifndef NO_SYSTEM_INCLUDES 15 #include <sys/types.h> 16 #endif 17 18 #include "db_int.h" 19 #include "db_page.h" 20 #include "db_swap.h" 21 #include "btree.h" 22 23 /* 24 * __bam_pgin -- 25 * Convert host-specific page layout from the host-independent format 26 * stored on disk. 27 * 28 * PUBLIC: int __bam_pgin __P((db_pgno_t, void *, DBT *)); 29 */ 30 int 31 __bam_pgin(pg, pp, cookie) 32 db_pgno_t pg; 33 void *pp; 34 DBT *cookie; 35 { 36 DB_PGINFO *pginfo; 37 38 pginfo = (DB_PGINFO *)cookie->data; 39 if (!pginfo->needswap) 40 return (0); 41 return (pg == PGNO_METADATA ? 42 __bam_mswap(pp) : __db_pgin(pg, pginfo->db_pagesize, pp)); 43 } 44 45 /* 46 * __bam_pgout -- 47 * Convert host-specific page layout to the host-independent format 48 * stored on disk. 49 * 50 * PUBLIC: int __bam_pgout __P((db_pgno_t, void *, DBT *)); 51 */ 52 int 53 __bam_pgout(pg, pp, cookie) 54 db_pgno_t pg; 55 void *pp; 56 DBT *cookie; 57 { 58 DB_PGINFO *pginfo; 59 60 pginfo = (DB_PGINFO *)cookie->data; 61 if (!pginfo->needswap) 62 return (0); 63 return (pg == PGNO_METADATA ? 64 __bam_mswap(pp) : __db_pgout(pg, pginfo->db_pagesize, pp)); 65 } 66 67 /* 68 * __bam_mswap -- 69 * Swap the bytes on the btree metadata page. 70 * 71 * PUBLIC: int __bam_mswap __P((PAGE *)); 72 */ 73 int 74 __bam_mswap(pg) 75 PAGE *pg; 76 { 77 u_int8_t *p; 78 79 p = (u_int8_t *)pg; 80 81 /* Swap the meta-data information. */ 82 SWAP32(p); /* lsn.file */ 83 SWAP32(p); /* lsn.offset */ 84 SWAP32(p); /* pgno */ 85 SWAP32(p); /* magic */ 86 SWAP32(p); /* version */ 87 SWAP32(p); /* pagesize */ 88 SWAP32(p); /* maxkey */ 89 SWAP32(p); /* minkey */ 90 SWAP32(p); /* free */ 91 SWAP32(p); /* flags */ 92 93 return (0); 94 } 95