PERFORCE change 160059 for review
Edward Tomasz Napierala
trasz at FreeBSD.org
Tue Mar 31 08:21:08 PDT 2009
http://perforce.freebsd.org/chv.cgi?CH=160059
Change 160059 by trasz at trasz_victim7 on 2009/03/31 15:20:40
IFC.
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/contrib/libpcap/pcap.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/etc/rc.d/ipfw#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/include/dlfcn.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/include/mpool.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/README#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/Symbol.map#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_debug.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_open.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_page.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_put.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_split.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/db/db.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/README#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_bigkey.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_buf.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_func.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_log2.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_page.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/man/mpool.3#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/mpool/Makefile.inc#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/mpool/mpool-compat.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/mpool/mpool.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/recno/rec_close.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/recno/rec_put.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/net/getaddrinfo.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libstand/gets.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libthr/Makefile#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/libexec/rtld-elf/rtld.c#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/libexec/rtld-elf/rtld.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/gvinum/gvinum.8#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sbin/gvinum/gvinum.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man4/ed.4#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man4/lagg.4#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/Makefile#12 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_ACCESS.9#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_ATTRIB.9#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_CREATE.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_FSYNC.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_INACTIVE.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_IOCTL.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_LINK.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_LOCK.9#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_LOOKUP.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_OPENCLOSE.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_RDWR.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_READDIR.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_READLINK.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_REMOVE.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_RENAME.9#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/VOP_VPTOCNP.9#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/share/man/man9/refcount.9#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/arm/conf/AVILA#11 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/arm/conf/CAMBRIA#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/compat/freebsd32/freebsd32_ioctl.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/compat/freebsd32/freebsd32_ioctl.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files#34 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files.amd64#12 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/files.i386#14 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/newvers.sh#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/conf/options#22 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/age/if_age.c#8 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/age/if_agereg.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/ata-pci.c#8 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/ata-pci.h#12 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/ata-sata.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-ahci.c#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-intel.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-jmicron.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-marvell.c#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-nvidia.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-promise.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-siliconimage.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-sis.c#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ata/chipsets/ata-via.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ath/if_ath.c#16 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ath/if_athvar.h#14 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/drm/drm_pci.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/drm/r600_cp.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/ax88x90reg.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/if_ed.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/if_ed_pccard.c#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/if_ed_wd80x3.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/if_edreg.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ed/if_edvar.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/if_ndis/if_ndis.c#12 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ipw/if_ipw.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/iwi/if_iwi.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/iwn/if_iwn.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/malo/if_malo.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/malo/if_malo_pci.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/malo/if_malohal.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/axphy.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/axphyreg.h#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/mii/miidevs#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ofw/ofw_standard.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ofw/openfirm.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ral/rt2560.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ral/rt2560var.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ral/rt2661.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/ral/rt2661var.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/re/if_re.c#13 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/sound/pci/hda/hdac.c#21 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/usbdevs#24 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/if_rum.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/if_rumvar.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/if_ural.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/if_uralvar.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/if_zyd.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/usb/wlan/usb_wlan.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/wi/if_wi.c#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/dev/wpi/if_wpi.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/part/g_part_ebr.c#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/part/g_part_gpt.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/part/g_part_mbr.c#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/part/g_part_pc98.c#9 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum.h#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_create.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_drive.c#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_events.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_init.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_list.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_move.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_plex.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_raid5.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_raid5.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_rename.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_rm.c#5 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_share.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_share.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_state.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_subr.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_var.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/geom/vinum/geom_vinum_volume.c#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/i386/cpufreq/hwpstate.c#1 branch
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/sysv_sem.c#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_cache.c#14 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_mount.c#17 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_subr.c#29 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/mips/include/bus.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/modules/ath/Makefile#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/modules/cpufreq/Makefile#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/modules/geom/geom_vinum/Makefile#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/modules/mii/Makefile#4 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net/if.c#17 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211.c#12 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_ddb.c#14 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_freebsd.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_hostap.c#11 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_ioctl.c#14 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_ioctl.h#6 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_node.c#15 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_output.c#13 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_proto.h#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_scan.c#7 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_scan.h#3 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_sta.c#9 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_superg.c#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_superg.h#2 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/net80211/ieee80211_var.h#11 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/security/mac_biba/mac_biba.c#13 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/security/mac_bsdextended/mac_bsdextended.c#15 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/security/mac_mls/mac_mls.c#13 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/elf_common.h#8 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/vnode.h#25 integrate
.. //depot/projects/soc2008/trasz_nfs4acl/sys/tools/vnode_if.awk#3 integrate
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/contrib/libpcap/pcap.h#3 (text+ko) ====
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/contrib/libpcap/pcap.h,v 1.15 2009/03/21 22:58:08 rpaulo Exp $
+ * $FreeBSD: src/contrib/libpcap/pcap.h,v 1.16 2009/03/31 11:04:51 rpaulo Exp $
* @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.59 2006/10/04 18:09:22 guy Exp $ (LBL)
*/
@@ -53,10 +53,6 @@
#include <stdio.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#define PCAP_VERSION_MAJOR 2
#define PCAP_VERSION_MINOR 4
==== //depot/projects/soc2008/trasz_nfs4acl/etc/rc.d/ipfw#3 (text+ko) ====
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $FreeBSD: src/etc/rc.d/ipfw,v 1.18 2008/07/05 15:27:39 mtm Exp $
+# $FreeBSD: src/etc/rc.d/ipfw,v 1.19 2009/03/30 21:31:52 emax Exp $
#
# PROVIDE: ipfw
@@ -23,10 +23,20 @@
if checkyesno dummynet_enable; then
required_modules="$required_modules dummynet"
fi
+
+ if checkyesno firewall_nat_enable; then
+ if ! checkyesno natd_enable; then
+ required_modules="$required_modules ipfw_nat"
+ fi
+ fi
}
ipfw_start()
{
+ local _firewall_type
+
+ _firewall_type=$1
+
# set the firewall rules script if none was specified
[ -z "${firewall_script}" ] && firewall_script=/etc/rc.firewall
@@ -34,7 +44,7 @@
if [ -f /etc/rc.d/natd ] ; then
/etc/rc.d/natd quietstart
fi
- /bin/sh "${firewall_script}"
+ /bin/sh "${firewall_script}" "${_firewall_type}"
echo 'Firewall rules loaded.'
elif [ "`ipfw list 65535`" = "65535 deny ip from any to any" ]; then
echo 'Warning: kernel has firewall functionality, but' \
@@ -67,4 +77,4 @@
}
load_rc_config $name
-run_rc_command "$1"
+run_rc_command $*
==== //depot/projects/soc2008/trasz_nfs4acl/include/dlfcn.h#2 (text+ko) ====
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/include/dlfcn.h,v 1.20 2005/12/18 19:43:31 kan Exp $
+ * $FreeBSD: src/include/dlfcn.h,v 1.21 2009/03/30 08:47:28 kib Exp $
*/
#ifndef _DLFCN_H_
@@ -47,6 +47,7 @@
#define RTLD_GLOBAL 0x100 /* Make symbols globally available. */
#define RTLD_LOCAL 0 /* Opposite of RTLD_GLOBAL, and the default. */
#define RTLD_TRACE 0x200 /* Trace loaded objects and exit. */
+#define RTLD_NODELETE 0x01000 /* Do not remove members. */
/*
* Request arguments for dlinfo().
==== //depot/projects/soc2008/trasz_nfs4acl/include/mpool.h#2 (text+ko) ====
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)mpool.h 8.2 (Berkeley) 7/14/94
- * $FreeBSD: src/include/mpool.h,v 1.9 2002/03/23 17:24:53 imp Exp $
+ * @(#)mpool.h 8.4 (Berkeley) 11/2/95
+ * $FreeBSD: src/include/mpool.h,v 1.10 2009/03/28 07:31:02 delphij Exp $
*/
#ifndef _MPOOL_H_
@@ -47,7 +47,7 @@
* pool is handed an opaque MPOOL cookie which stores all of this information.
*/
#define HASHSIZE 128
-#define HASHKEY(pgno) ((pgno - 1) % HASHSIZE)
+#define HASHKEY(pgno) ((pgno - 1 + HASHSIZE) % HASHSIZE)
/* The BKT structures are the elements of the queues. */
typedef struct _bkt {
@@ -58,6 +58,7 @@
#define MPOOL_DIRTY 0x01 /* page needs to be written */
#define MPOOL_PINNED 0x02 /* page is pinned into memory */
+#define MPOOL_INUSE 0x04 /* page address is valid */
u_int8_t flags; /* flags */
} BKT;
@@ -68,7 +69,7 @@
pgno_t curcache; /* current number of cached pages */
pgno_t maxcache; /* max number of cached pages */
pgno_t npages; /* number of pages in the file */
- u_long pagesize; /* file page size */
+ unsigned long pagesize; /* file page size */
int fd; /* file descriptor */
/* page in conversion routine */
void (*pgin)(void *, pgno_t, void *);
@@ -76,25 +77,32 @@
void (*pgout)(void *, pgno_t, void *);
void *pgcookie; /* cookie for page in/out routines */
#ifdef STATISTICS
- u_long cachehit;
- u_long cachemiss;
- u_long pagealloc;
- u_long pageflush;
- u_long pageget;
- u_long pagenew;
- u_long pageput;
- u_long pageread;
- u_long pagewrite;
+ unsigned long cachehit;
+ unsigned long cachemiss;
+ unsigned long pagealloc;
+ unsigned long pageflush;
+ unsigned long pageget;
+ unsigned long pagenew;
+ unsigned long pageput;
+ unsigned long pageread;
+ unsigned long pagewrite;
#endif
} MPOOL;
+#define MPOOL_IGNOREPIN 0x01 /* Ignore if the page is pinned. */
+#define MPOOL_PAGE_REQUEST 0x01 /* Allocate a new page with a
+ specific page number. */
+#define MPOOL_PAGE_NEXT 0x02 /* Allocate a new page with the next
+ page number. */
+
__BEGIN_DECLS
MPOOL *mpool_open(void *, int, pgno_t, pgno_t);
void mpool_filter(MPOOL *, void (*)(void *, pgno_t, void *),
void (*)(void *, pgno_t, void *), void *);
-void *mpool_new(MPOOL *, pgno_t *);
-void *mpool_get(MPOOL *, pgno_t, u_int);
-int mpool_put(MPOOL *, void *, u_int);
+void *mpool_new(MPOOL *, pgno_t *, unsigned int);
+void *mpool_get(MPOOL *, pgno_t, unsigned int);
+int mpool_delete(MPOOL *, void *);
+int mpool_put(MPOOL *, void *, unsigned int);
int mpool_sync(MPOOL *);
int mpool_close(MPOOL *);
#ifdef STATISTICS
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/README#2 (text+ko) ====
@@ -1,4 +1,5 @@
# @(#)README 8.27 (Berkeley) 9/1/94
+# $FreeBSD: src/lib/libc/db/README,v 1.2 2009/03/28 04:00:46 delphij Exp $
This is version 1.85 of the Berkeley DB code.
@@ -31,10 +32,3 @@
recno The fixed/variable length record routines.
test Test package.
-============================================
-Debugging:
-
-If you're running a memory checker (e.g. Purify) on DB, make sure that
-you recompile it with "-DPURIFY" in the CFLAGS, first. By default,
-allocated pages are not initialized by the DB code, and they will show
-up as reads of uninitialized memory in the buffer write routines.
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/Symbol.map#2 (text) ====
@@ -1,5 +1,5 @@
/*
- * $FreeBSD: src/lib/libc/db/Symbol.map,v 1.2 2007/04/29 14:05:16 deischen Exp $
+ * $FreeBSD: src/lib/libc/db/Symbol.map,v 1.3 2009/03/28 07:31:02 delphij Exp $
*/
FBSD_1.0 {
@@ -16,7 +16,6 @@
dbm_dirfno;
mpool_open;
mpool_filter;
- mpool_new;
mpool_get;
mpool_put;
mpool_close;
@@ -24,6 +23,11 @@
mpool_stat;
};
+FBSD_1.1 {
+ mpool_new;
+ mpool_delete;
+};
+
FBSDprivate_1.0 {
__bt_open;
__dbpanic;
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_debug.c#4 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)bt_debug.c 8.5 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_debug.c,v 1.6 2009/03/23 23:22:09 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_debug.c,v 1.7 2009/03/28 07:31:02 delphij Exp $");
#include <sys/param.h>
@@ -83,10 +83,9 @@
}
#undef X
- for (i = P_ROOT; (h = mpool_get(t->bt_mp, i, 0)) != NULL; ++i) {
+ for (i = P_ROOT;
+ (h = mpool_get(t->bt_mp, i, MPOOL_IGNOREPIN)) != NULL; ++i)
__bt_dpage(h);
- (void)mpool_put(t->bt_mp, h, 0);
- }
}
/*
@@ -135,10 +134,8 @@
PAGE *h;
t = dbp->internal;
- if ((h = mpool_get(t->bt_mp, pgno, 0)) != NULL) {
+ if ((h = mpool_get(t->bt_mp, pgno, MPOOL_IGNOREPIN)) != NULL)
__bt_dpage(h);
- (void)mpool_put(t->bt_mp, h, 0);
- }
}
/*
@@ -257,7 +254,8 @@
t = dbp->internal;
pcont = pinternal = pleaf = 0;
nkeys = ifree = lfree = 0;
- for (i = P_ROOT; (h = mpool_get(t->bt_mp, i, 0)) != NULL; ++i) {
+ for (i = P_ROOT;
+ (h = mpool_get(t->bt_mp, i, MPOOL_IGNOREPIN)) != NULL; ++i)
switch (h->flags & P_TYPE) {
case P_BINTERNAL:
case P_RINTERNAL:
@@ -274,22 +272,18 @@
++pcont;
break;
}
- (void)mpool_put(t->bt_mp, h, 0);
- }
/* Count the levels of the tree. */
for (i = P_ROOT, levels = 0 ;; ++levels) {
- h = mpool_get(t->bt_mp, i, 0);
+ h = mpool_get(t->bt_mp, i, MPOOL_IGNOREPIN);
if (h->flags & (P_BLEAF|P_RLEAF)) {
if (levels == 0)
levels = 1;
- (void)mpool_put(t->bt_mp, h, 0);
break;
}
i = F_ISSET(t, R_RECNO) ?
GETRINTERNAL(h, 0)->pgno :
GETBINTERNAL(h, 0)->pgno;
- (void)mpool_put(t->bt_mp, h, 0);
}
(void)fprintf(stderr, "%d level%s with %lu keys",
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_open.c#4 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)bt_open.c 8.10 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_open.c,v 1.15 2009/03/23 23:43:07 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_open.c,v 1.18 2009/03/28 07:31:02 delphij Exp $");
/*
* Implementation of btree access method for 4.4BSD.
@@ -156,9 +156,8 @@
goto einval;
/* Allocate and initialize DB and BTREE structures. */
- if ((t = (BTREE *)malloc(sizeof(BTREE))) == NULL)
+ if ((t = (BTREE *)calloc(1, sizeof(BTREE))) == NULL)
goto err;
- memset(t, 0, sizeof(BTREE));
t->bt_fd = -1; /* Don't close unopened fd on error. */
t->bt_lorder = b.lorder;
t->bt_order = NOT;
@@ -166,9 +165,8 @@
t->bt_pfx = b.prefix;
t->bt_rfd = -1;
- if ((t->bt_dbp = dbp = (DB *)malloc(sizeof(DB))) == NULL)
+ if ((t->bt_dbp = dbp = (DB *)calloc(1, sizeof(DB))) == NULL)
goto err;
- memset(t->bt_dbp, 0, sizeof(DB));
if (t->bt_lorder != machine_lorder)
F_SET(t, B_NEEDSWAP);
@@ -354,18 +352,25 @@
PAGE *meta, *root;
pgno_t npg;
- if ((meta = mpool_get(t->bt_mp, 0, 0)) != NULL) {
- mpool_put(t->bt_mp, meta, 0);
- return (RET_SUCCESS);
+ if ((root = mpool_get(t->bt_mp, 1, 0)) != NULL) {
+ if (root->lower == 0 &&
+ root->pgno == 0 &&
+ root->linp[0] == 0) {
+ mpool_delete(t->bt_mp, root);
+ errno = EINVAL;
+ } else {
+ mpool_put(t->bt_mp, root, 0);
+ return (RET_SUCCESS);
+ }
}
if (errno != EINVAL) /* It's OK to not exist. */
return (RET_ERROR);
errno = 0;
- if ((meta = mpool_new(t->bt_mp, &npg)) == NULL)
+ if ((meta = mpool_new(t->bt_mp, &npg, MPOOL_PAGE_NEXT)) == NULL)
return (RET_ERROR);
- if ((root = mpool_new(t->bt_mp, &npg)) == NULL)
+ if ((root = mpool_new(t->bt_mp, &npg, MPOOL_PAGE_NEXT)) == NULL)
return (RET_ERROR);
if (npg != P_ROOT)
@@ -385,14 +390,18 @@
tmp(void)
{
sigset_t set, oset;
- int fd;
+ int fd, len;
char *envtmp = NULL;
char path[MAXPATHLEN];
if (issetugid() == 0)
envtmp = getenv("TMPDIR");
- (void)snprintf(path,
+ len = snprintf(path,
sizeof(path), "%s/bt.XXXXXXXXXX", envtmp ? envtmp : "/tmp");
+ if (len < 0 || len >= (int)sizeof(path)) {
+ errno = ENAMETOOLONG;
+ return(-1);
+ }
(void)sigfillset(&set);
(void)_sigprocmask(SIG_BLOCK, &set, &oset);
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_page.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
static char sccsid[] = "@(#)bt_page.c 8.3 (Berkeley) 7/14/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_page.c,v 1.5 2009/03/02 23:47:18 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_page.c,v 1.6 2009/03/28 07:31:02 delphij Exp $");
#include <sys/types.h>
@@ -90,5 +90,5 @@
F_SET(t, B_METADIRTY);
return (h);
}
- return (mpool_new(t->bt_mp, npg));
+ return (mpool_new(t->bt_mp, npg, MPOOL_PAGE_NEXT));
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_put.c#3 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)bt_put.c 8.8 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_put.c,v 1.8 2009/03/04 00:58:04 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_put.c,v 1.9 2009/03/28 05:45:29 delphij Exp $");
#include <sys/types.h>
@@ -197,7 +197,7 @@
* into the offset array, shift the pointers up.
*/
nbytes = NBLEAFDBT(key->size, data->size);
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
+ if ((u_int32_t)(h->upper - h->lower) < nbytes + sizeof(indx_t)) {
if ((status = __bt_split(t, h, key,
data, dflags, nbytes, idx)) != RET_SUCCESS)
return (status);
@@ -278,7 +278,7 @@
* have to search to get split stack.
*/
nbytes = NBLEAFDBT(key->size, data->size);
- if (h->upper - h->lower < nbytes + sizeof(indx_t))
+ if ((u_int32_t)(h->upper - h->lower) < nbytes + sizeof(indx_t))
goto miss;
if (t->bt_order == FORWARD) {
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/btree/bt_split.c#3 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)bt_split.c 8.9 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_split.c,v 1.10 2009/03/04 00:58:04 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/btree/bt_split.c,v 1.12 2009/03/28 05:45:29 delphij Exp $");
#include <sys/types.h>
@@ -205,7 +205,7 @@
}
/* Split the parent page if necessary or shift the indices. */
- if (h->upper - h->lower < nbytes + sizeof(indx_t)) {
+ if ((u_int32_t)(h->upper - h->lower) < nbytes + sizeof(indx_t)) {
sp = h;
h = h->pgno == P_ROOT ?
bt_root(t, h, &l, &r, &skip, nbytes) :
@@ -372,13 +372,10 @@
}
/* Put the new left page for the split into place. */
- if ((l = (PAGE *)malloc(t->bt_psize)) == NULL) {
+ if ((l = (PAGE *)calloc(1, t->bt_psize)) == NULL) {
mpool_put(t->bt_mp, r, 0);
return (NULL);
}
-#ifdef PURIFY
- memset(l, 0xff, t->bt_psize);
-#endif
l->pgno = h->pgno;
l->nextpg = r->pgno;
l->prevpg = h->prevpg;
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/db/db.c#3 (text+ko) ====
@@ -31,7 +31,7 @@
static char sccsid[] = "@(#)db.c 8.4 (Berkeley) 2/21/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/db/db.c,v 1.4 2009/03/02 23:47:18 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/db/db.c,v 1.5 2009/03/28 07:26:00 delphij Exp $");
#include <sys/types.h>
@@ -50,8 +50,8 @@
#define DB_FLAGS (DB_LOCK | DB_SHMEM | DB_TXN)
#define USE_OPEN_FLAGS \
- (O_CREAT | O_EXCL | O_EXLOCK | O_NONBLOCK | O_RDONLY | \
- O_RDWR | O_SHLOCK | O_TRUNC)
+ (O_CREAT | O_EXCL | O_EXLOCK | O_NOFOLLOW | O_NONBLOCK | \
+ O_RDONLY | O_RDWR | O_SHLOCK | O_SYNC | O_TRUNC)
if ((flags & ~(USE_OPEN_FLAGS | DB_FLAGS)) == 0)
switch (type) {
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/README#2 (text+ko) ====
@@ -1,4 +1,5 @@
# @(#)README 8.1 (Berkeley) 6/4/93
+# $FreeBSD: src/lib/libc/db/hash/README,v 1.2 2009/03/28 07:31:02 delphij Exp $
This package implements a superset of the hsearch and dbm/ndbm libraries.
@@ -44,10 +45,6 @@
NOTES:
-The file search.h is provided for using the hsearch compatible interface
-on BSD systems. On System V derived systems, search.h should appear in
-/usr/include.
-
The man page ../man/db.3 explains the interface to the hashing system.
The file hash.ps is a postscript copy of a paper explaining
the history, implementation, and performance of the hash package.
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash.c#3 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)hash.c 8.9 (Berkeley) 6/16/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash.c,v 1.15 2009/03/02 23:47:18 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash.c,v 1.21 2009/03/28 07:20:39 delphij Exp $");
#include "namespace.h"
#include <sys/param.h>
@@ -120,25 +120,15 @@
*/
hashp->flags = flags;
- new_table = 0;
- if (!file || (flags & O_TRUNC) ||
- (stat(file, &statbuf) && (errno == ENOENT))) {
- if (errno == ENOENT)
- errno = 0; /* Just in case someone looks at errno */
- new_table = 1;
- }
if (file) {
if ((hashp->fp = _open(file, flags, mode)) == -1)
RETURN_ERROR(errno, error0);
+ (void)_fcntl(hashp->fp, F_SETFD, 1);
+ new_table = _fstat(hashp->fp, &statbuf) == 0 &&
+ statbuf.st_size == 0 && (flags & O_ACCMODE) != O_RDONLY;
+ } else
+ new_table = 1;
- /* if the .db file is empty, and we had permission to create
- a new .db file, then reinitialize the database */
- if ((flags & O_CREAT) &&
- _fstat(hashp->fp, &statbuf) == 0 && statbuf.st_size == 0)
- new_table = 1;
-
- (void)_fcntl(hashp->fp, F_SETFD, 1);
- }
if (new_table) {
if (!(hashp = init_hash(hashp, file, info)))
RETURN_ERROR(errno, error1);
@@ -164,7 +154,7 @@
if (hashp->VERSION != HASHVERSION &&
hashp->VERSION != OLDHASHVERSION)
RETURN_ERROR(EFTYPE, error1);
- if (hashp->hash(CHARKEY, sizeof(CHARKEY)) != hashp->H_CHARKEY)
+ if ((int32_t)hashp->hash(CHARKEY, sizeof(CHARKEY)) != hashp->H_CHARKEY)
RETURN_ERROR(EFTYPE, error1);
/*
* Figure out how many segments we need. Max_Bucket is the
@@ -173,7 +163,6 @@
*/
nsegs = (hashp->MAX_BUCKET + 1 + hashp->SGSIZE - 1) /
hashp->SGSIZE;
- hashp->nsegs = 0;
if (alloc_segs(hashp, nsegs))
/*
* If alloc_segs fails, table will have been destroyed
@@ -347,8 +336,7 @@
static int
init_htab(HTAB *hashp, int nelem)
{
- int nbuckets, nsegs;
- int l2;
+ int nbuckets, nsegs, l2;
/*
* Divide number of elements by the fill factor and determine a
@@ -428,6 +416,10 @@
for (i = 0; i < hashp->nmaps; i++)
if (hashp->mapp[i])
free(hashp->mapp[i]);
+ if (hashp->tmp_key)
+ free(hashp->tmp_key);
+ if (hashp->tmp_buf)
+ free(hashp->tmp_buf);
if (hashp->fp != -1)
(void)_close(hashp->fp);
@@ -495,8 +487,7 @@
whdrp = &whdr;
swap_header_copy(&hashp->hdr, whdrp);
#endif
- if ((lseek(fp, (off_t)0, SEEK_SET) == -1) ||
- ((wsize = _write(fp, whdrp, sizeof(HASHHDR))) == -1))
+ if ((wsize = pwrite(fp, whdrp, sizeof(HASHHDR), (off_t)0)) == -1)
return (-1);
else
if (wsize != sizeof(HASHHDR)) {
@@ -541,8 +532,7 @@
hashp = (HTAB *)dbp->internal;
if (flag && flag != R_NOOVERWRITE) {
- hashp->error = EINVAL;
- errno = EINVAL;
+ hashp->error = errno = EINVAL;
return (ERROR);
}
if ((hashp->flags & O_ACCMODE) == O_RDONLY) {
@@ -721,7 +711,7 @@
hashp->cndx = 1;
hashp->cpage = NULL;
}
-
+ next_bucket:
for (bp = NULL; !bp || !bp[0]; ) {
if (!(bufp = hashp->cpage)) {
for (bucket = hashp->cbucket;
@@ -736,12 +726,22 @@
break;
}
hashp->cbucket = bucket;
- if (hashp->cbucket > hashp->MAX_BUCKET) {
+ if ((u_int32_t)hashp->cbucket > hashp->MAX_BUCKET) {
hashp->cbucket = -1;
return (ABNORMAL);
}
- } else
+ } else {
bp = (u_int16_t *)hashp->cpage->page;
+ if (flag == R_NEXT) {
+ hashp->cndx += 2;
+ if (hashp->cndx > bp[0]) {
+ hashp->cpage = NULL;
+ hashp->cbucket++;
+ hashp->cndx = 1;
+ goto next_bucket;
+ }
+ }
+ }
#ifdef DEBUG
assert(bp);
@@ -765,17 +765,12 @@
if (__big_keydata(hashp, bufp, key, data, 1))
return (ERROR);
} else {
+ if (hashp->cpage == 0)
+ return (ERROR);
key->data = (u_char *)hashp->cpage->page + bp[ndx];
key->size = (ndx > 1 ? bp[ndx - 1] : hashp->BSIZE) - bp[ndx];
data->data = (u_char *)hashp->cpage->page + bp[ndx + 1];
data->size = bp[ndx] - bp[ndx + 1];
- ndx += 2;
- if (ndx > bp[0]) {
- hashp->cpage = NULL;
- hashp->cbucket++;
- hashp->cndx = 1;
- } else
- hashp->cndx = ndx;
}
return (SUCCESS);
}
@@ -858,7 +853,7 @@
u_int32_t
__call_hash(HTAB *hashp, char *k, int len)
{
- int n, bucket;
+ unsigned int n, bucket;
n = hashp->hash(k, len);
bucket = n & hashp->HIGH_MASK;
@@ -887,15 +882,18 @@
errno = save_errno;
return (-1);
}
+ hashp->nsegs = nsegs;
+ if (nsegs == 0)
+ return (0);
/* Allocate segments */
- if ((store =
- (SEGMENT)calloc(nsegs << hashp->SSHIFT, sizeof(SEGMENT))) == NULL) {
+ if ((store = (SEGMENT)calloc(nsegs << hashp->SSHIFT,
+ sizeof(SEGMENT))) == NULL) {
save_errno = errno;
(void)hdestroy(hashp);
errno = save_errno;
return (-1);
}
- for (i = 0; i < nsegs; i++, hashp->nsegs++)
+ for (i = 0; i < nsegs; i++)
hashp->dir[i] = &store[i << hashp->SSHIFT];
return (0);
}
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash.h#3 (text+ko) ====
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)hash.h 8.3 (Berkeley) 5/31/94
- * $FreeBSD: src/lib/libc/db/hash/hash.h,v 1.8 2009/03/04 01:17:05 delphij Exp $
+ * $FreeBSD: src/lib/libc/db/hash/hash.h,v 1.9 2009/03/28 05:45:29 delphij Exp $
*/
/* Operations */
@@ -71,11 +71,11 @@
int32_t ovfl_point; /* Where overflow pages are being
* allocated */
int32_t last_freed; /* Last overflow page freed */
- int32_t max_bucket; /* ID of Maximum bucket in use */
- int32_t high_mask; /* Mask to modulo into entire table */
- int32_t low_mask; /* Mask to modulo into lower half of
+ u_int32_t max_bucket; /* ID of Maximum bucket in use */
+ u_int32_t high_mask; /* Mask to modulo into entire table */
+ u_int32_t low_mask; /* Mask to modulo into lower half of
* table */
- int32_t ffactor; /* Fill factor */
+ u_int32_t ffactor; /* Fill factor */
int32_t nkeys; /* Number of keys in hash table */
int32_t hdrpages; /* Size of table header */
int32_t h_charkey; /* value of hash(CHARKEY) */
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_bigkey.c#3 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)hash_bigkey.c 8.3 (Berkeley) 5/31/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash_bigkey.c,v 1.8 2009/03/04 00:58:04 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash_bigkey.c,v 1.10 2009/03/28 06:47:05 delphij Exp $");
/*
* PACKAGE: hash
@@ -86,7 +86,8 @@
__big_insert(HTAB *hashp, BUFHEAD *bufp, const DBT *key, const DBT *val)
{
u_int16_t *p;
- int key_size, n, val_size;
+ int key_size, n;
+ unsigned int val_size;
u_int16_t space, move_bytes, off;
char *cp, *key_data, *val_data;
@@ -117,18 +118,30 @@
return (-1);
n = p[0];
if (!key_size) {
- if (FREESPACE(p)) {
- move_bytes = MIN(FREESPACE(p), val_size);
+ space = FREESPACE(p);
+ if (space) {
+ move_bytes = MIN(space, val_size);
+ /*
+ * If the data would fit exactly in the
+ * remaining space, we must overflow it to the
+ * next page; otherwise the invariant that the
+ * data must end on a page with FREESPACE
+ * non-zero would fail.
+ */
+ if (space == val_size && val_size == val->size)
+ goto toolarge;
off = OFFSET(p) - move_bytes;
- p[n] = off;
memmove(cp + off, val_data, move_bytes);
val_data += move_bytes;
val_size -= move_bytes;
+ p[n] = off;
p[n - 2] = FULL_KEY_DATA;
FREESPACE(p) = FREESPACE(p) - move_bytes;
OFFSET(p) = off;
- } else
+ } else {
+ toolarge:
p[n - 2] = FULL_KEY;
+ }
}
p = (u_int16_t *)bufp->page;
cp = bufp->page;
@@ -238,12 +251,12 @@
n -= 2;
bp[0] = n;
FREESPACE(bp) = hashp->BSIZE - PAGE_META(n);
- OFFSET(bp) = hashp->BSIZE - 1;
+ OFFSET(bp) = hashp->BSIZE;
bufp->flags |= BUF_MOD;
if (rbufp)
__free_ovflpage(hashp, rbufp);
- if (last_bfp != rbufp)
+ if (last_bfp && last_bfp != rbufp)
__free_ovflpage(hashp, last_bfp);
hashp->NKEYS--;
==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/db/hash/hash_buf.c#3 (text+ko) ====
@@ -34,7 +34,7 @@
static char sccsid[] = "@(#)hash_buf.c 8.5 (Berkeley) 7/15/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash_buf.c,v 1.9 2009/03/02 23:47:18 delphij Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/db/hash/hash_buf.c,v 1.12 2009/03/28 06:40:48 delphij Exp $");
/*
* PACKAGE: hash
@@ -57,6 +57,7 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#ifdef DEBUG
#include <assert.h>
@@ -163,24 +164,38 @@
oaddr = 0;
bp = LRU;
+
+ /* It is bad to overwrite the page under the cursor. */
+ if (bp == hashp->cpage) {
+ BUF_REMOVE(bp);
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list