diff options
Diffstat (limited to 'source4')
| -rw-r--r-- | source4/Makefile | 1 | ||||
| -rw-r--r-- | source4/configure.ac | 6 | ||||
| -rw-r--r-- | source4/lib/talloc/Makefile.in | 43 | ||||
| -rw-r--r-- | source4/lib/talloc/NEWS | 13 | ||||
| -rw-r--r-- | source4/lib/talloc/aclocal.m4 | 1 | ||||
| -rwxr-xr-x | source4/lib/talloc/autogen.sh | 14 | ||||
| -rwxr-xr-x | source4/lib/talloc/config.guess | 1464 | ||||
| -rw-r--r-- | source4/lib/talloc/config.mk | 7 | ||||
| -rwxr-xr-x | source4/lib/talloc/config.sub | 1577 | ||||
| -rw-r--r-- | source4/lib/talloc/configure.ac | 24 | ||||
| -rwxr-xr-x | source4/lib/talloc/install-sh | 238 | ||||
| -rw-r--r-- | source4/lib/talloc/libtalloc.m4 | 33 | ||||
| -rw-r--r-- | source4/lib/talloc/rules.mk | 18 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.3.xml | 738 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.c | 1732 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.h | 183 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.i | 31 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.mk | 37 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc.pc.in | 11 | ||||
| -rw-r--r-- | source4/lib/talloc/talloc_guide.txt | 685 | ||||
| -rw-r--r-- | source4/lib/talloc/testsuite.c | 1152 | ||||
| -rw-r--r-- | source4/lib/talloc/web/index.html | 46 | ||||
| -rw-r--r-- | source4/torture/local/config.mk | 2 | 
23 files changed, 5 insertions, 8051 deletions
diff --git a/source4/Makefile b/source4/Makefile index 546eb072d8..bdc6cce2f3 100644 --- a/source4/Makefile +++ b/source4/Makefile @@ -103,6 +103,7 @@ pyscriptsrcdir := $(srcdir)/scripting/python  kdcsrcdir := kdc  ntp_signdsrcdir := ntp_signd  wmisrcdir := lib/wmi +tallocsrcdir := ../talloc  include data.mk diff --git a/source4/configure.ac b/source4/configure.ac index d03092c6b6..c42458a5ff 100644 --- a/source4/configure.ac +++ b/source4/configure.ac @@ -41,8 +41,8 @@ AC_CONFIG_FILES(librpc/dcerpc_atsvc.pc)  SMB_EXT_LIB_FROM_PKGCONFIG(LIBTALLOC, talloc >= 1.2.0,  	[],  	[ -		m4_include(lib/talloc/libtalloc.m4) -		SMB_INCLUDE_MK(lib/talloc/config.mk) +		m4_include(../talloc/libtalloc.m4) +		SMB_INCLUDE_MK(../talloc/config.mk)  	]  ) @@ -159,7 +159,7 @@ then  	builddir_headers="-I\$(builddir)/include -I\$(builddir) -I\$(builddir)/lib ";  fi -CPPFLAGS="$builddir_headers-I\$(srcdir)/include -I\$(srcdir) -I\$(srcdir)/lib -I\$(srcdir)/lib/replace -I\$(srcdir)/lib/talloc -D_SAMBA_BUILD_=4 -DHAVE_CONFIG_H $CPPFLAGS" +CPPFLAGS="$builddir_headers-I\$(srcdir)/include -I\$(srcdir) -I\$(srcdir)/lib -I\$(srcdir)/lib/replace -I\$(srcdir)/../talloc -D_SAMBA_BUILD_=4 -DHAVE_CONFIG_H $CPPFLAGS"  SMB_WRITE_PERLVARS(build/smb_build/config.pm) diff --git a/source4/lib/talloc/Makefile.in b/source4/lib/talloc/Makefile.in deleted file mode 100644 index 07b8fd4ff0..0000000000 --- a/source4/lib/talloc/Makefile.in +++ /dev/null @@ -1,43 +0,0 @@ -#!gmake -# -prefix = @prefix@ -datarootdir = @datarootdir@ -exec_prefix = @exec_prefix@ -includedir = @includedir@ -libdir = @libdir@ -mandir = @mandir@ -VPATH = @srcdir@:@libreplacedir@ -srcdir = @srcdir@ -builddir = @builddir@ -XSLTPROC = @XSLTPROC@ -INSTALLCMD = @INSTALL@ -CC = @CC@ -CFLAGS = @CFLAGS@ -DHAVE_CONFIG_H= -I. -I@srcdir@ -EXTRA_TARGETS = @DOC_TARGET@ -PICFLAG = @PICFLAG@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -SHLIBEXT = @SHLIBEXT@ -SHLD = @SHLD@ -SHLD_FLAGS = @SHLD_FLAGS@ -tallocdir = @tallocdir@ - -LIBOBJ = $(TALLOC_OBJ) @LIBREPLACEOBJ@ - -all:: showflags $(EXTRA_TARGETS) - -include $(tallocdir)/rules.mk -include $(tallocdir)/talloc.mk - -$(TALLOC_SOLIB): $(LIBOBJ) -	$(SHLD) $(SHLD_FLAGS) -o $@ $(LIBOBJ) @SONAMEFLAG@$(TALLOC_SONAME) - -check: test - -installcheck:: test install - -distclean:: clean -	rm -f Makefile -	rm -f config.log config.status config.h config.cache - -realdistclean:: distclean -	rm -f configure config.h.in diff --git a/source4/lib/talloc/NEWS b/source4/lib/talloc/NEWS deleted file mode 100644 index e5b3aa0731..0000000000 --- a/source4/lib/talloc/NEWS +++ /dev/null @@ -1,13 +0,0 @@ -1.0.1	26 May 2007 - - BUGS -   -   * Set name of correctly when using talloc_append_string() (metze) - - LICENSE -    -   * Change license of files in lib/replace to LGPL (was GPL). (jelmer) - -1.0.0	30 April 2007 -  - Initial release. diff --git a/source4/lib/talloc/aclocal.m4 b/source4/lib/talloc/aclocal.m4 deleted file mode 100644 index 5605e476ba..0000000000 --- a/source4/lib/talloc/aclocal.m4 +++ /dev/null @@ -1 +0,0 @@ -m4_include(libreplace.m4) diff --git a/source4/lib/talloc/autogen.sh b/source4/lib/talloc/autogen.sh deleted file mode 100755 index bf84eeee19..0000000000 --- a/source4/lib/talloc/autogen.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -rm -rf autom4te.cache -rm -f configure config.h.in - -IPATHS="-I libreplace -I lib/replace -I ../libreplace -I ../replace" -autoconf $IPATHS || exit 1 -autoheader $IPATHS || exit 1 - -rm -rf autom4te.cache - -echo "Now run ./configure and then make." -exit 0 - diff --git a/source4/lib/talloc/config.guess b/source4/lib/talloc/config.guess deleted file mode 100755 index 354dbe175a..0000000000 --- a/source4/lib/talloc/config.guess +++ /dev/null @@ -1,1464 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-08-03' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see <http://www.gnu.org/licenses/>. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner <per@bothner.com>. -# Please send patches to <config-patches@gnu.org>.  Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub.  If it succeeds, it prints the system name on stdout, and -# exits with 0.  Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: -  -h, --help         print this help, then exit -  -t, --time-stamp   print date of last modification, then exit -  -v, --version      print version number, then exit - -Report bugs and patches to <config-patches@gnu.org>." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions.  There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do -  case $1 in -    --time-stamp | --time* | -t ) -       echo "$timestamp" ; exit ;; -    --version | -v ) -       echo "$version" ; exit ;; -    --help | --h* | -h ) -       echo "$usage"; exit ;; -    -- )     # Stop option processing -       shift; break ;; -    - )	# Use stdin as input. -       break ;; -    -* ) -       echo "$me: invalid option $1$help" >&2 -       exit 1 ;; -    * ) -       break ;; -  esac -done - -if test $# != 0; then -  echo "$me: too many arguments$help" >&2 -  exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,)    echo "int x;" > $dummy.c ; -	for c in cc gcc c89 c99 ; do -	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then -	     CC_FOR_BUILD="$c"; break ; -	  fi ; -	done ; -	if test x"$CC_FOR_BUILD" = x ; then -	  CC_FOR_BUILD=no_compiler_found ; -	fi -	;; - ,,*)   CC_FOR_BUILD=$CC ;; - ,*,*)  CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then -	PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -    *:NetBSD:*:*) -	# NetBSD (nbsd) targets should (where applicable) match one or -	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently -	# switched to ELF, *-*-netbsd* would select the old -	# object file format.  This provides both forward -	# compatibility and a consistent mechanism for selecting the -	# object file format. -	# -	# Note: NetBSD doesn't particularly care about the vendor -	# portion of the name.  We always set it to "unknown". -	sysctl="sysctl -n hw.machine_arch" -	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ -	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)` -	case "${UNAME_MACHINE_ARCH}" in -	    armeb) machine=armeb-unknown ;; -	    arm*) machine=arm-unknown ;; -	    sh3el) machine=shl-unknown ;; -	    sh3eb) machine=sh-unknown ;; -	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;; -	esac -	# The Operating System including object format, if it has switched -	# to ELF recently, or will in the future. -	case "${UNAME_MACHINE_ARCH}" in -	    arm*|i386|m68k|ns32k|sh3*|sparc|vax) -		eval $set_cc_for_build -		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ -			| grep __ELF__ >/dev/null -		then -		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). -		    # Return netbsd for either.  FIX? -		    os=netbsd -		else -		    os=netbsdelf -		fi -		;; -	    *) -	        os=netbsd -		;; -	esac -	# The OS release -	# Debian GNU/NetBSD machines have a different userland, and -	# thus, need a distinct triplet. However, they do not need -	# kernel version information, so it can be replaced with a -	# suitable tag, in the style of linux-gnu. -	case "${UNAME_VERSION}" in -	    Debian*) -		release='-gnu' -		;; -	    *) -		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` -		;; -	esac -	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: -	# contains redundant information, the shorter form: -	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. -	echo "${machine}-${os}${release}" -	exit ;; -    *:OpenBSD:*:*) -	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` -	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -	exit ;; -    *:ekkoBSD:*:*) -	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} -	exit ;; -    macppc:MirBSD:*:*) -	echo powerppc-unknown-mirbsd${UNAME_RELEASE} -	exit ;; -    *:MirBSD:*:*) -	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} -	exit ;; -    alpha:OSF1:*:*) -	case $UNAME_RELEASE in -	*4.0) -		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` -		;; -	*5.*) -	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` -		;; -	esac -	# According to Compaq, /usr/sbin/psrinfo has been available on -	# OSF/1 and Tru64 systems produced since 1995.  I hope that -	# covers most systems running today.  This code pipes the CPU -	# types through head -n 1, so we only detect the type of CPU 0. -	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1` -	case "$ALPHA_CPU_TYPE" in -	    "EV4 (21064)") -		UNAME_MACHINE="alpha" ;; -	    "EV4.5 (21064)") -		UNAME_MACHINE="alpha" ;; -	    "LCA4 (21066/21068)") -		UNAME_MACHINE="alpha" ;; -	    "EV5 (21164)") -		UNAME_MACHINE="alphaev5" ;; -	    "EV5.6 (21164A)") -		UNAME_MACHINE="alphaev56" ;; -	    "EV5.6 (21164PC)") -		UNAME_MACHINE="alphapca56" ;; -	    "EV5.7 (21164PC)") -		UNAME_MACHINE="alphapca57" ;; -	    "EV6 (21264)") -		UNAME_MACHINE="alphaev6" ;; -	    "EV6.7 (21264A)") -		UNAME_MACHINE="alphaev67" ;; -	    "EV6.8CB (21264C)") -		UNAME_MACHINE="alphaev68" ;; -	    "EV6.8AL (21264B)") -		UNAME_MACHINE="alphaev68" ;; -	    "EV6.8CX (21264D)") -		UNAME_MACHINE="alphaev68" ;; -	    "EV6.9A (21264/EV69A)") -		UNAME_MACHINE="alphaev69" ;; -	    "EV7 (21364)") -		UNAME_MACHINE="alphaev7" ;; -	    "EV7.9 (21364A)") -		UNAME_MACHINE="alphaev79" ;; -	esac -	# A Pn.n version is a patched version. -	# A Vn.n version is a released version. -	# A Tn.n version is a released field test version. -	# A Xn.n version is an unreleased experimental baselevel. -	# 1.2 uses "1.2" for uname -r. -	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -	exit ;; -    Alpha\ *:Windows_NT*:*) -	# How do we know it's Interix rather than the generic POSIX subsystem? -	# Should we change UNAME_MACHINE based on the output of uname instead -	# of the specific Alpha model? -	echo alpha-pc-interix -	exit ;; -    21064:Windows_NT:50:3) -	echo alpha-dec-winnt3.5 -	exit ;; -    Amiga*:UNIX_System_V:4.0:*) -	echo m68k-unknown-sysv4 -	exit ;; -    *:[Aa]miga[Oo][Ss]:*:*) -	echo ${UNAME_MACHINE}-unknown-amigaos -	exit ;; -    *:[Mm]orph[Oo][Ss]:*:*) -	echo ${UNAME_MACHINE}-unknown-morphos -	exit ;; -    *:OS/390:*:*) -	echo i370-ibm-openedition -	exit ;; -    *:z/VM:*:*) -	echo s390-ibm-zvmoe -	exit ;; -    *:OS400:*:*) -        echo powerpc-ibm-os400 -	exit ;; -    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) -	echo arm-acorn-riscix${UNAME_RELEASE} -	exit ;; -    arm:riscos:*:*|arm:RISCOS:*:*) -	echo arm-unknown-riscos -	exit ;; -    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) -	echo hppa1.1-hitachi-hiuxmpp -	exit ;; -    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) -	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. -	if test "`(/bin/universe) 2>/dev/null`" = att ; then -		echo pyramid-pyramid-sysv3 -	else -		echo pyramid-pyramid-bsd -	fi -	exit ;; -    NILE*:*:*:dcosx) -	echo pyramid-pyramid-svr4 -	exit ;; -    DRS?6000:unix:4.0:6*) -	echo sparc-icl-nx6 -	exit ;; -    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) -	case `/usr/bin/uname -p` in -	    sparc) echo sparc-icl-nx7; exit ;; -	esac ;; -    sun4H:SunOS:5.*:*) -	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -	exit ;; -    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) -	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -	exit ;; -    i86pc:SunOS:5.*:*) -	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -	exit ;; -    sun4*:SunOS:6*:*) -	# According to config.sub, this is the proper way to canonicalize -	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but -	# it's likely to be more like Solaris than SunOS4. -	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -	exit ;; -    sun4*:SunOS:*:*) -	case "`/usr/bin/arch -k`" in -	    Series*|S4*) -		UNAME_RELEASE=`uname -v` -		;; -	esac -	# Japanese Language versions have a version number like `4.1.3-JL'. -	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` -	exit ;; -    sun3*:SunOS:*:*) -	echo m68k-sun-sunos${UNAME_RELEASE} -	exit ;; -    sun*:*:4.2BSD:*) -	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` -	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 -	case "`/bin/arch`" in -	    sun3) -		echo m68k-sun-sunos${UNAME_RELEASE} -		;; -	    sun4) -		echo sparc-sun-sunos${UNAME_RELEASE} -		;; -	esac -	exit ;; -    aushp:SunOS:*:*) -	echo sparc-auspex-sunos${UNAME_RELEASE} -	exit ;; -    # The situation for MiNT is a little confusing.  The machine name -    # can be virtually everything (everything which is not -    # "atarist" or "atariste" at least should have a processor -    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT" -    # to the lowercase version "mint" (or "freemint").  Finally -    # the system name "TOS" denotes a system which is actually not -    # MiNT.  But MiNT is downward compatible to TOS, so this should -    # be no problem. -    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) -        echo m68k-atari-mint${UNAME_RELEASE} -	exit ;; -    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) -	echo m68k-atari-mint${UNAME_RELEASE} -        exit ;; -    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) -        echo m68k-atari-mint${UNAME_RELEASE} -	exit ;; -    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) -        echo m68k-milan-mint${UNAME_RELEASE} -        exit ;; -    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) -        echo m68k-hades-mint${UNAME_RELEASE} -        exit ;; -    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) -        echo m68k-unknown-mint${UNAME_RELEASE} -        exit ;; -    m68k:machten:*:*) -	echo m68k-apple-machten${UNAME_RELEASE} -	exit ;; -    powerpc:machten:*:*) -	echo powerpc-apple-machten${UNAME_RELEASE} -	exit ;; -    RISC*:Mach:*:*) -	echo mips-dec-mach_bsd4.3 -	exit ;; -    RISC*:ULTRIX:*:*) -	echo mips-dec-ultrix${UNAME_RELEASE} -	exit ;; -    VAX*:ULTRIX*:*:*) -	echo vax-dec-ultrix${UNAME_RELEASE} -	exit ;; -    2020:CLIX:*:* | 2430:CLIX:*:*) -	echo clipper-intergraph-clix${UNAME_RELEASE} -	exit ;; -    mips:*:*:UMIPS | mips:*:*:RISCos) -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -#ifdef __cplusplus -#include <stdio.h>  /* for printf() prototype */ -	int main (int argc, char *argv[]) { -#else -	int main (argc, argv) int argc; char *argv[]; { -#endif -	#if defined (host_mips) && defined (MIPSEB) -	#if defined (SYSTYPE_SYSV) -	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); -	#endif -	#if defined (SYSTYPE_SVR4) -	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); -	#endif -	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) -	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); -	#endif -	#endif -	  exit (-1); -	} -EOF -	$CC_FOR_BUILD -o $dummy $dummy.c && -	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && -	  SYSTEM_NAME=`$dummy $dummyarg` && -	    { echo "$SYSTEM_NAME"; exit; } -	echo mips-mips-riscos${UNAME_RELEASE} -	exit ;; -    Motorola:PowerMAX_OS:*:*) -	echo powerpc-motorola-powermax -	exit ;; -    Motorola:*:4.3:PL8-*) -	echo powerpc-harris-powermax -	exit ;; -    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) -	echo powerpc-harris-powermax -	exit ;; -    Night_Hawk:Power_UNIX:*:*) -	echo powerpc-harris-powerunix -	exit ;; -    m88k:CX/UX:7*:*) -	echo m88k-harris-cxux7 -	exit ;; -    m88k:*:4*:R4*) -	echo m88k-motorola-sysv4 -	exit ;; -    m88k:*:3*:R3*) -	echo m88k-motorola-sysv3 -	exit ;; -    AViiON:dgux:*:*) -        # DG/UX returns AViiON for all architectures -        UNAME_PROCESSOR=`/usr/bin/uname -p` -	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] -	then -	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ -	       [ ${TARGET_BINARY_INTERFACE}x = x ] -	    then -		echo m88k-dg-dgux${UNAME_RELEASE} -	    else -		echo m88k-dg-dguxbcs${UNAME_RELEASE} -	    fi -	else -	    echo i586-dg-dgux${UNAME_RELEASE} -	fi - 	exit ;; -    M88*:DolphinOS:*:*)	# DolphinOS (SVR3) -	echo m88k-dolphin-sysv3 -	exit ;; -    M88*:*:R3*:*) -	# Delta 88k system running SVR3 -	echo m88k-motorola-sysv3 -	exit ;; -    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) -	echo m88k-tektronix-sysv3 -	exit ;; -    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) -	echo m68k-tektronix-bsd -	exit ;; -    *:IRIX*:*:*) -	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` -	exit ;; -    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. -	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id -	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX ' -    i*86:AIX:*:*) -	echo i386-ibm-aix -	exit ;; -    ia64:AIX:*:*) -	if [ -x /usr/bin/oslevel ] ; then -		IBM_REV=`/usr/bin/oslevel` -	else -		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} -	fi -	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} -	exit ;; -    *:AIX:2:3) -	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then -		eval $set_cc_for_build -		sed 's/^		//' << EOF >$dummy.c -		#include <sys/systemcfg.h> - -		main() -			{ -			if (!__power_pc()) -				exit(1); -			puts("powerpc-ibm-aix3.2.5"); -			exit(0); -			} -EOF -		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` -		then -			echo "$SYSTEM_NAME" -		else -			echo rs6000-ibm-aix3.2.5 -		fi -	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then -		echo rs6000-ibm-aix3.2.4 -	else -		echo rs6000-ibm-aix3.2 -	fi -	exit ;; -    *:AIX:*:[45]) -	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` -	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then -		IBM_ARCH=rs6000 -	else -		IBM_ARCH=powerpc -	fi -	if [ -x /usr/bin/oslevel ] ; then -		IBM_REV=`/usr/bin/oslevel` -	else -		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} -	fi -	echo ${IBM_ARCH}-ibm-aix${IBM_REV} -	exit ;; -    *:AIX:*:*) -	echo rs6000-ibm-aix -	exit ;; -    ibmrt:4.4BSD:*|romp-ibm:BSD:*) -	echo romp-ibm-bsd4.4 -	exit ;; -    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and -	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to -	exit ;;                             # report: romp-ibm BSD 4.3 -    *:BOSX:*:*) -	echo rs6000-bull-bosx -	exit ;; -    DPX/2?00:B.O.S.:*:*) -	echo m68k-bull-sysv3 -	exit ;; -    9000/[34]??:4.3bsd:1.*:*) -	echo m68k-hp-bsd -	exit ;; -    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) -	echo m68k-hp-bsd4.4 -	exit ;; -    9000/[34678]??:HP-UX:*:*) -	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` -	case "${UNAME_MACHINE}" in -	    9000/31? )            HP_ARCH=m68000 ;; -	    9000/[34]?? )         HP_ARCH=m68k ;; -	    9000/[678][0-9][0-9]) -		if [ -x /usr/bin/getconf ]; then -		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` -                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -                    case "${sc_cpu_version}" in -                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -                      532)                      # CPU_PA_RISC2_0 -                        case "${sc_kernel_bits}" in -                          32) HP_ARCH="hppa2.0n" ;; -                          64) HP_ARCH="hppa2.0w" ;; -			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20 -                        esac ;; -                    esac -		fi -		if [ "${HP_ARCH}" = "" ]; then -		    eval $set_cc_for_build -		    sed 's/^              //' << EOF >$dummy.c - -              #define _HPUX_SOURCE -              #include <stdlib.h> -              #include <unistd.h> - -              int main () -              { -              #if defined(_SC_KERNEL_BITS) -                  long bits = sysconf(_SC_KERNEL_BITS); -              #endif -                  long cpu  = sysconf (_SC_CPU_VERSION); - -                  switch (cpu) -              	{ -              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -              	case CPU_PA_RISC2_0: -              #if defined(_SC_KERNEL_BITS) -              	    switch (bits) -              		{ -              		case 64: puts ("hppa2.0w"); break; -              		case 32: puts ("hppa2.0n"); break; -              		default: puts ("hppa2.0"); break; -              		} break; -              #else  /* !defined(_SC_KERNEL_BITS) */ -              	    puts ("hppa2.0"); break; -              #endif -              	default: puts ("hppa1.0"); break; -              	} -                  exit (0); -              } -EOF -		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` -		    test -z "$HP_ARCH" && HP_ARCH=hppa -		fi ;; -	esac -	if [ ${HP_ARCH} = "hppa2.0w" ] -	then -	    eval $set_cc_for_build - -	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating -	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler -	    # generating 64-bit code.  GNU and HP use different nomenclature: -	    # -	    # $ CC_FOR_BUILD=cc ./config.guess -	    # => hppa2.0w-hp-hpux11.23 -	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess -	    # => hppa64-hp-hpux11.23 - -	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | -		grep __LP64__ >/dev/null -	    then -		HP_ARCH="hppa2.0w" -	    else -		HP_ARCH="hppa64" -	    fi -	fi -	echo ${HP_ARCH}-hp-hpux${HPUX_REV} -	exit ;; -    ia64:HP-UX:*:*) -	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` -	echo ia64-hp-hpux${HPUX_REV} -	exit ;; -    3050*:HI-UX:*:*) -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#include <unistd.h> -	int -	main () -	{ -	  long cpu = sysconf (_SC_CPU_VERSION); -	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns -	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct -	     results, however.  */ -	  if (CPU_IS_PA_RISC (cpu)) -	    { -	      switch (cpu) -		{ -		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; -		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; -		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; -		  default: puts ("hppa-hitachi-hiuxwe2"); break; -		} -	    } -	  else if (CPU_IS_HP_MC68K (cpu)) -	    puts ("m68k-hitachi-hiuxwe2"); -	  else puts ("unknown-hitachi-hiuxwe2"); -	  exit (0); -	} -EOF -	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && -		{ echo "$SYSTEM_NAME"; exit; } -	echo unknown-hitachi-hiuxwe2 -	exit ;; -    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) -	echo hppa1.1-hp-bsd -	exit ;; -    9000/8??:4.3bsd:*:*) -	echo hppa1.0-hp-bsd -	exit ;; -    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) -	echo hppa1.0-hp-mpeix -	exit ;; -    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) -	echo hppa1.1-hp-osf -	exit ;; -    hp8??:OSF1:*:*) -	echo hppa1.0-hp-osf -	exit ;; -    i*86:OSF1:*:*) -	if [ -x /usr/sbin/sysversion ] ; then -	    echo ${UNAME_MACHINE}-unknown-osf1mk -	else -	    echo ${UNAME_MACHINE}-unknown-osf1 -	fi -	exit ;; -    parisc*:Lites*:*:*) -	echo hppa1.1-hp-lites -	exit ;; -    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) -	echo c1-convex-bsd -        exit ;; -    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) -	if getsysinfo -f scalar_acc -	then echo c32-convex-bsd -	else echo c2-convex-bsd -	fi -        exit ;; -    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) -	echo c34-convex-bsd -        exit ;; -    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) -	echo c38-convex-bsd -        exit ;; -    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) -	echo c4-convex-bsd -        exit ;; -    CRAY*Y-MP:*:*:*) -	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -	exit ;; -    CRAY*[A-Z]90:*:*:*) -	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ -	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -	      -e 's/\.[^.]*$/.X/' -	exit ;; -    CRAY*TS:*:*:*) -	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -	exit ;; -    CRAY*T3E:*:*:*) -	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -	exit ;; -    CRAY*SV1:*:*:*) -	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -	exit ;; -    *:UNICOS/mp:*:*) -	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -	exit ;; -    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) -	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -        exit ;; -    5000:UNIX_System_V:4.*:*) -        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` -        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -	exit ;; -    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) -	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} -	exit ;; -    sparc*:BSD/OS:*:*) -	echo sparc-unknown-bsdi${UNAME_RELEASE} -	exit ;; -    *:BSD/OS:*:*) -	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} -	exit ;; -    *:FreeBSD:*:*) -	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` -	exit ;; -    i*:CYGWIN*:*) -	echo ${UNAME_MACHINE}-pc-cygwin -	exit ;; -    i*:MINGW*:*) -	echo ${UNAME_MACHINE}-pc-mingw32 -	exit ;; -    i*:windows32*:*) -    	# uname -m includes "-pc" on this system. -    	echo ${UNAME_MACHINE}-mingw32 -	exit ;; -    i*:PW*:*) -	echo ${UNAME_MACHINE}-pc-pw32 -	exit ;; -    x86:Interix*:[34]*) -	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' -	exit ;; -    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) -	echo i${UNAME_MACHINE}-pc-mks -	exit ;; -    i*:Windows_NT*:* | Pentium*:Windows_NT*:*) -	# How do we know it's Interix rather than the generic POSIX subsystem? -	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we -	# UNAME_MACHINE based on the output of uname instead of i386? -	echo i586-pc-interix -	exit ;; -    i*:UWIN*:*) -	echo ${UNAME_MACHINE}-pc-uwin -	exit ;; -    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) -	echo x86_64-unknown-cygwin -	exit ;; -    p*:CYGWIN*:*) -	echo powerpcle-unknown-cygwin -	exit ;; -    prep*:SunOS:5.*:*) -	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -	exit ;; -    *:GNU:*:*) -	# the GNU system -	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -	exit ;; -    *:GNU/*:*:*) -	# other systems with GNU libc and userland -	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu -	exit ;; -    i*86:Minix:*:*) -	echo ${UNAME_MACHINE}-pc-minix -	exit ;; -    arm*:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    cris:Linux:*:*) -	echo cris-axis-linux-gnu -	exit ;; -    crisv32:Linux:*:*) -	echo crisv32-axis-linux-gnu -	exit ;; -    frv:Linux:*:*) -    	echo frv-unknown-linux-gnu -	exit ;; -    ia64:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    m32r*:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    m68*:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    mips:Linux:*:*) -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#undef CPU -	#undef mips -	#undef mipsel -	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -	CPU=mipsel -	#else -	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -	CPU=mips -	#else -	CPU= -	#endif -	#endif -EOF -	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } -	;; -    mips64:Linux:*:*) -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#undef CPU -	#undef mips64 -	#undef mips64el -	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -	CPU=mips64el -	#else -	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -	CPU=mips64 -	#else -	CPU= -	#endif -	#endif -EOF -	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } -	;; -    or32:Linux:*:*) -	echo or32-unknown-linux-gnu -	exit ;; -    ppc:Linux:*:*) -	echo powerpc-unknown-linux-gnu -	exit ;; -    ppc64:Linux:*:*) -	echo powerpc64-unknown-linux-gnu -	exit ;; -    alpha:Linux:*:*) -	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -	  EV5)   UNAME_MACHINE=alphaev5 ;; -	  EV56)  UNAME_MACHINE=alphaev56 ;; -	  PCA56) UNAME_MACHINE=alphapca56 ;; -	  PCA57) UNAME_MACHINE=alphapca56 ;; -	  EV6)   UNAME_MACHINE=alphaev6 ;; -	  EV67)  UNAME_MACHINE=alphaev67 ;; -	  EV68*) UNAME_MACHINE=alphaev68 ;; -        esac -	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null -	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi -	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} -	exit ;; -    parisc:Linux:*:* | hppa:Linux:*:*) -	# Look for CPU level -	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in -	  PA7*) echo hppa1.1-unknown-linux-gnu ;; -	  PA8*) echo hppa2.0-unknown-linux-gnu ;; -	  *)    echo hppa-unknown-linux-gnu ;; -	esac -	exit ;; -    parisc64:Linux:*:* | hppa64:Linux:*:*) -	echo hppa64-unknown-linux-gnu -	exit ;; -    s390:Linux:*:* | s390x:Linux:*:*) -	echo ${UNAME_MACHINE}-ibm-linux -	exit ;; -    sh64*:Linux:*:*) -    	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    sh*:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    sparc:Linux:*:* | sparc64:Linux:*:*) -	echo ${UNAME_MACHINE}-unknown-linux-gnu -	exit ;; -    x86_64:Linux:*:*) -	echo x86_64-unknown-linux-gnu -	exit ;; -    i*86:Linux:*:*) -	# The BFD linker knows what the default object file format is, so -	# first see if it will tell us. cd to the root directory to prevent -	# problems with other programs or directories called `ld' in the path. -	# Set LC_ALL=C to ensure ld outputs messages in English. -	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ -			 | sed -ne '/supported targets:/!d -				    s/[ 	][ 	]*/ /g -				    s/.*supported targets: *// -				    s/ .*// -				    p'` -        case "$ld_supported_targets" in -	  elf32-i386) -		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" -		;; -	  a.out-i386-linux) -		echo "${UNAME_MACHINE}-pc-linux-gnuaout" -		exit ;; -	  coff-i386) -		echo "${UNAME_MACHINE}-pc-linux-gnucoff" -		exit ;; -	  "") -		# Either a pre-BFD a.out linker (linux-gnuoldld) or -		# one that does not give us useful --help. -		echo "${UNAME_MACHINE}-pc-linux-gnuoldld" -		exit ;; -	esac -	# Determine whether the default compiler is a.out or elf -	eval $set_cc_for_build -	sed 's/^	//' << EOF >$dummy.c -	#include <features.h> -	#ifdef __ELF__ -	# ifdef __GLIBC__ -	#  if __GLIBC__ >= 2 -	LIBC=gnu -	#  else -	LIBC=gnulibc1 -	#  endif -	# else -	LIBC=gnulibc1 -	# endif -	#else -	#ifdef __INTEL_COMPILER -	LIBC=gnu -	#else -	LIBC=gnuaout -	#endif -	#endif -	#ifdef __dietlibc__ -	LIBC=dietlibc -	#endif -EOF -	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` -	test x"${LIBC}" != x && { -		echo "${UNAME_MACHINE}-pc-linux-${LIBC}" -		exit -	} -	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } -	;; -    i*86:DYNIX/ptx:4*:*) -	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. -	# earlier versions are messed up and put the nodename in both -	# sysname and nodename. -	echo i386-sequent-sysv4 -	exit ;; -    i*86:UNIX_SV:4.2MP:2.*) -        # Unixware is an offshoot of SVR4, but it has its own version -        # number series starting with 2... -        # I am not positive that other SVR4 systems won't match this, -	# I just have to hope.  -- rms. -        # Use sysv4.2uw... so that sysv4* matches it. -	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} -	exit ;; -    i*86:OS/2:*:*) -	# If we were able to find `uname', then EMX Unix compatibility -	# is probably installed. -	echo ${UNAME_MACHINE}-pc-os2-emx -	exit ;; -    i*86:XTS-300:*:STOP) -	echo ${UNAME_MACHINE}-unknown-stop -	exit ;; -    i*86:atheos:*:*) -	echo ${UNAME_MACHINE}-unknown-atheos -	exit ;; -    i*86:syllable:*:*) -	echo ${UNAME_MACHINE}-pc-syllable -	exit ;; -    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) -	echo i386-unknown-lynxos${UNAME_RELEASE} -	exit ;; -    i*86:*DOS:*:*) -	echo ${UNAME_MACHINE}-pc-msdosdjgpp -	exit ;; -    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) -	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` -	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then -		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} -	else -		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} -	fi -	exit ;; -    i*86:*:5:[678]*) -    	# UnixWare 7.x, OpenUNIX and OpenServer 6. -	case `/bin/uname -X | grep "^Machine"` in -	    *486*)	     UNAME_MACHINE=i486 ;; -	    *Pentium)	     UNAME_MACHINE=i586 ;; -	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;; -	esac -	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} -	exit ;; -    i*86:*:3.2:*) -	if test -f /usr/options/cb.name; then -		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` -		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL -	elif /bin/uname -X 2>/dev/null >/dev/null ; then -		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` -		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 -		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ -			&& UNAME_MACHINE=i586 -		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ -			&& UNAME_MACHINE=i686 -		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ -			&& UNAME_MACHINE=i686 -		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL -	else -		echo ${UNAME_MACHINE}-pc-sysv32 -	fi -	exit ;; -    pc:*:*:*) -	# Left here for compatibility: -        # uname -m prints for DJGPP always 'pc', but it prints nothing about -        # the processor, so we play safe by assuming i386. -	echo i386-pc-msdosdjgpp -        exit ;; -    Intel:Mach:3*:*) -	echo i386-pc-mach3 -	exit ;; -    paragon:*:*:*) -	echo i860-intel-osf1 -	exit ;; -    i860:*:4.*:*) # i860-SVR4 -	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then -	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 -	else # Add other i860-SVR4 vendors below as they are discovered. -	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4 -	fi -	exit ;; -    mini*:CTIX:SYS*5:*) -	# "miniframe" -	echo m68010-convergent-sysv -	exit ;; -    mc68k:UNIX:SYSTEM5:3.51m) -	echo m68k-convergent-sysv -	exit ;; -    M680?0:D-NIX:5.3:*) -	echo m68k-diab-dnix -	exit ;; -    M68*:*:R3V[5678]*:*) -	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; -    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) -	OS_REL='' -	test -r /etc/.relid \ -	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` -	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; } -	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ -	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; -    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) -        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -          && { echo i486-ncr-sysv4; exit; } ;; -    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) -	echo m68k-unknown-lynxos${UNAME_RELEASE} -	exit ;; -    mc68030:UNIX_System_V:4.*:*) -	echo m68k-atari-sysv4 -	exit ;; -    TSUNAMI:LynxOS:2.*:*) -	echo sparc-unknown-lynxos${UNAME_RELEASE} -	exit ;; -    rs6000:LynxOS:2.*:*) -	echo rs6000-unknown-lynxos${UNAME_RELEASE} -	exit ;; -    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) -	echo powerpc-unknown-lynxos${UNAME_RELEASE} -	exit ;; -    SM[BE]S:UNIX_SV:*:*) -	echo mips-dde-sysv${UNAME_RELEASE} -	exit ;; -    RM*:ReliantUNIX-*:*:*) -	echo mips-sni-sysv4 -	exit ;; -    RM*:SINIX-*:*:*) -	echo mips-sni-sysv4 -	exit ;; -    *:SINIX-*:*:*) -	if uname -p 2>/dev/null >/dev/null ; then -		UNAME_MACHINE=`(uname -p) 2>/dev/null` -		echo ${UNAME_MACHINE}-sni-sysv4 -	else -		echo ns32k-sni-sysv -	fi -	exit ;; -    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -                      # says <Richard.M.Bartel@ccMail.Census.GOV> -        echo i586-unisys-sysv4 -        exit ;; -    *:UNIX_System_V:4*:FTX*) -	# From Gerald Hewes <hewes@openmarket.com>. -	# How about differentiating between stratus architectures? -djm -	echo hppa1.1-stratus-sysv4 -	exit ;; -    *:*:*:FTX*) -	# From seanf@swdc.stratus.com. -	echo i860-stratus-sysv4 -	exit ;; -    i*86:VOS:*:*) -	# From Paul.Green@stratus.com. -	echo ${UNAME_MACHINE}-stratus-vos -	exit ;; -    *:VOS:*:*) -	# From Paul.Green@stratus.com. -	echo hppa1.1-stratus-vos -	exit ;; -    mc68*:A/UX:*:*) -	echo m68k-apple-aux${UNAME_RELEASE} -	exit ;; -    news*:NEWS-OS:6*:*) -	echo mips-sony-newsos6 -	exit ;; -    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) -	if [ -d /usr/nec ]; then -	        echo mips-nec-sysv${UNAME_RELEASE} -	else -	        echo mips-unknown-sysv${UNAME_RELEASE} -	fi -        exit ;; -    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only. -	echo powerpc-be-beos -	exit ;; -    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only. -	echo powerpc-apple-beos -	exit ;; -    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible. -	echo i586-pc-beos -	exit ;; -    SX-4:SUPER-UX:*:*) -	echo sx4-nec-superux${UNAME_RELEASE} -	exit ;; -    SX-5:SUPER-UX:*:*) -	echo sx5-nec-superux${UNAME_RELEASE} -	exit ;; -    SX-6:SUPER-UX:*:*) -	echo sx6-nec-superux${UNAME_RELEASE} -	exit ;; -    Power*:Rhapsody:*:*) -	echo powerpc-apple-rhapsody${UNAME_RELEASE} -	exit ;; -    *:Rhapsody:*:*) -	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} -	exit ;; -    *:Darwin:*:*) -	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown -	case $UNAME_PROCESSOR in -	    *86) UNAME_PROCESSOR=i686 ;; -	    unknown) UNAME_PROCESSOR=powerpc ;; -	esac -	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} -	exit ;; -    *:procnto*:*:* | *:QNX:[0123456789]*:*) -	UNAME_PROCESSOR=`uname -p` -	if test "$UNAME_PROCESSOR" = "x86"; then -		UNAME_PROCESSOR=i386 -		UNAME_MACHINE=pc -	fi -	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} -	exit ;; -    *:QNX:*:4*) -	echo i386-pc-qnx -	exit ;; -    NSE-?:NONSTOP_KERNEL:*:*) -	echo nse-tandem-nsk${UNAME_RELEASE} -	exit ;; -    NSR-?:NONSTOP_KERNEL:*:*) -	echo nsr-tandem-nsk${UNAME_RELEASE} -	exit ;; -    *:NonStop-UX:*:*) -	echo mips-compaq-nonstopux -	exit ;; -    BS2000:POSIX*:*:*) -	echo bs2000-siemens-sysv -	exit ;; -    DS/*:UNIX_System_V:*:*) -	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} -	exit ;; -    *:Plan9:*:*) -	# "uname -m" is not consistent, so use $cputype instead. 386 -	# is converted to i386 for consistency with other x86 -	# operating systems. -	if test "$cputype" = "386"; then -	    UNAME_MACHINE=i386 -	else -	    UNAME_MACHINE="$cputype" -	fi -	echo ${UNAME_MACHINE}-unknown-plan9 -	exit ;; -    *:TOPS-10:*:*) -	echo pdp10-unknown-tops10 -	exit ;; -    *:TENEX:*:*) -	echo pdp10-unknown-tenex -	exit ;; -    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) -	echo pdp10-dec-tops20 -	exit ;; -    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) -	echo pdp10-xkl-tops20 -	exit ;; -    *:TOPS-20:*:*) -	echo pdp10-unknown-tops20 -	exit ;; -    *:ITS:*:*) -	echo pdp10-unknown-its -	exit ;; -    SEI:*:*:SEIUX) -        echo mips-sei-seiux${UNAME_RELEASE} -	exit ;; -    *:DragonFly:*:*) -	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` -	exit ;; -    *:*VMS:*:*) -    	UNAME_MACHINE=`(uname -p) 2>/dev/null` -	case "${UNAME_MACHINE}" in -	    A*) echo alpha-dec-vms ; exit ;; -	    I*) echo ia64-dec-vms ; exit ;; -	    V*) echo vax-dec-vms ; exit ;; -	esac ;; -    *:XENIX:*:SysV) -	echo i386-pc-xenix -	exit ;; -    i*86:skyos:*:*) -	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' -	exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c <<EOF -#ifdef _SEQUENT_ -# include <sys/types.h> -# include <sys/utsname.h> -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) -  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed, -     I don't know....  */ -  printf ("mips-sony-bsd\n"); exit (0); -#else -#include <sys/param.h> -  printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 -          "4" -#else -	  "" -#endif -         ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) -  printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) -  printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif -  int version; -  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; -  if (version < 4) -    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); -  else -    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); -  exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) -  printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) -  printf ("ns32k-encore-mach\n"); exit (0); -#else -  printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) -  printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) -  printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) -  printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) -    struct utsname un; - -    uname(&un); - -    if (strncmp(un.version, "V2", 2) == 0) { -	printf ("i386-sequent-ptx2\n"); exit (0); -    } -    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ -	printf ("i386-sequent-ptx1\n"); exit (0); -    } -    printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -#  include <sys/param.h> -#  if defined (BSD) -#   if BSD == 43 -      printf ("vax-dec-bsd4.3\n"); exit (0); -#   else -#    if BSD == 199006 -      printf ("vax-dec-bsd4.3reno\n"); exit (0); -#    else -      printf ("vax-dec-bsd\n"); exit (0); -#    endif -#   endif -#  else -    printf ("vax-dec-bsd\n"); exit (0); -#  endif -# else -    printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) -  printf ("i860-alliant-bsd\n"); exit (0); -#endif - -  exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && -	{ echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then -    case `getsysinfo -f cpu_type` in -    c1*) -	echo c1-convex-bsd -	exit ;; -    c2*) -	if getsysinfo -f scalar_acc -	then echo c32-convex-bsd -	else echo c2-convex-bsd -	fi -	exit ;; -    c34*) -	echo c34-convex-bsd -	exit ;; -    c38*) -	echo c38-convex-bsd -	exit ;; -    c4*) -	echo c4-convex-bsd -	exit ;; -    esac -fi - -cat >&2 <<EOF -$0: unable to guess system type - -This script, last modified $timestamp, has failed to recognize -the operating system you are using. It is advised that you -download the most up to date version of the config scripts from - -  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess -and -  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub - -If the version you run ($0) is already up to date, please -send the following data and any information you think might be -pertinent to <config-patches@gnu.org> in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X     = `(/bin/uname -X) 2>/dev/null` - -hostinfo               = `(hostinfo) 2>/dev/null` -/bin/universe          = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch              = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM  = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/source4/lib/talloc/config.mk b/source4/lib/talloc/config.mk deleted file mode 100644 index c13e1b79ab..0000000000 --- a/source4/lib/talloc/config.mk +++ /dev/null @@ -1,7 +0,0 @@ -[LIBRARY::LIBTALLOC] -OUTPUT_TYPE = MERGED_OBJ -CFLAGS = -Ilib/talloc - -LIBTALLOC_OBJ_FILES = lib/talloc/talloc.o - -MANPAGES += $(tallocdir)/talloc.3 diff --git a/source4/lib/talloc/config.sub b/source4/lib/talloc/config.sub deleted file mode 100755 index 23cd6fd75c..0000000000 --- a/source4/lib/talloc/config.sub +++ /dev/null @@ -1,1577 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-07-08' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine.  It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see <http://www.gnu.org/licenses/>. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to <config-patches@gnu.org>.  Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support.  The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS -       $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: -  -h, --help         print this help, then exit -  -t, --time-stamp   print date of last modification, then exit -  -v, --version      print version number, then exit - -Report bugs and patches to <config-patches@gnu.org>." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions.  There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do -  case $1 in -    --time-stamp | --time* | -t ) -       echo "$timestamp" ; exit ;; -    --version | -v ) -       echo "$version" ; exit ;; -    --help | --h* | -h ) -       echo "$usage"; exit ;; -    -- )     # Stop option processing -       shift; break ;; -    - )	# Use stdin as input. -       break ;; -    -* ) -       echo "$me: invalid option $1$help" -       exit 1 ;; - -    *local*) -       # First pass through any local machine types. -       echo $1 -       exit ;; - -    * ) -       break ;; -  esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 -    exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 -    exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in -  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ -  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) -    os=-$maybe_os -    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` -    ;; -  *) -    basic_machine=`echo $1 | sed 's/-[^-]*$//'` -    if [ $basic_machine != $1 ] -    then os=`echo $1 | sed 's/.*-/-/'` -    else os=; fi -    ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work.  We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in -	-sun*os*) -		# Prevent following clause from handling this invalid input. -		;; -	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -	-apple | -axis | -knuth | -cray) -		os= -		basic_machine=$1 -		;; -	-sim | -cisco | -oki | -wec | -winbond) -		os= -		basic_machine=$1 -		;; -	-scout) -		;; -	-wrs) -		os=-vxworks -		basic_machine=$1 -		;; -	-chorusos*) -		os=-chorusos -		basic_machine=$1 -		;; - 	-chorusrdb) - 		os=-chorusrdb -		basic_machine=$1 - 		;; -	-hiux*) -		os=-hiuxwe2 -		;; -	-sco5) -		os=-sco3.2v5 -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-sco4) -		os=-sco3.2v4 -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-sco3.2.[4-9]*) -		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-sco3.2v[4-9]*) -		# Don't forget version if it is 3.2v4 or newer. -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-sco*) -		os=-sco3.2v2 -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-udk*) -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-isc) -		os=-isc2.2 -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-clix*) -		basic_machine=clipper-intergraph -		;; -	-isc*) -		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -		;; -	-lynx*) -		os=-lynxos -		;; -	-ptx*) -		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` -		;; -	-windowsnt*) -		os=`echo $os | sed -e 's/windowsnt/winnt/'` -		;; -	-psos*) -		os=-psos -		;; -	-mint | -mint[0-9]*) -		basic_machine=m68k-atari -		os=-mint -		;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in -	# Recognize the basic CPU types without company name. -	# Some are omitted here because they have special meanings below. -	1750a | 580 \ -	| a29k \ -	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ -	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ -	| am33_2.0 \ -	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ -	| bfin \ -	| c4x | clipper \ -	| d10v | d30v | dlx | dsp16xx \ -	| fr30 | frv \ -	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ -	| i370 | i860 | i960 | ia64 \ -	| ip2k | iq2000 \ -	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ -	| mips | mipsbe | mipseb | mipsel | mipsle \ -	| mips16 \ -	| mips64 | mips64el \ -	| mips64vr | mips64vrel \ -	| mips64orion | mips64orionel \ -	| mips64vr4100 | mips64vr4100el \ -	| mips64vr4300 | mips64vr4300el \ -	| mips64vr5000 | mips64vr5000el \ -	| mips64vr5900 | mips64vr5900el \ -	| mipsisa32 | mipsisa32el \ -	| mipsisa32r2 | mipsisa32r2el \ -	| mipsisa64 | mipsisa64el \ -	| mipsisa64r2 | mipsisa64r2el \ -	| mipsisa64sb1 | mipsisa64sb1el \ -	| mipsisa64sr71k | mipsisa64sr71kel \ -	| mipstx39 | mipstx39el \ -	| mn10200 | mn10300 \ -	| ms1 \ -	| msp430 \ -	| ns16k | ns32k \ -	| or32 \ -	| pdp10 | pdp11 | pj | pjl \ -	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ -	| pyramid \ -	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ -	| sh64 | sh64le \ -	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ -	| sparcv8 | sparcv9 | sparcv9b \ -	| strongarm \ -	| tahoe | thumb | tic4x | tic80 | tron \ -	| v850 | v850e \ -	| we32k \ -	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ -	| z8k) -		basic_machine=$basic_machine-unknown -		;; -	m32c) -		basic_machine=$basic_machine-unknown -		;; -	m6811 | m68hc11 | m6812 | m68hc12) -		# Motorola 68HC11/12. -		basic_machine=$basic_machine-unknown -		os=-none -		;; -	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) -		;; - -	# We use `pc' rather than `unknown' -	# because (1) that's what they normally are, and -	# (2) the word "unknown" tends to confuse beginning users. -	i*86 | x86_64) -	  basic_machine=$basic_machine-pc -	  ;; -	# Object if more than one company name word. -	*-*-*) -		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 -		exit 1 -		;; -	# Recognize the basic CPU types with company name. -	580-* \ -	| a29k-* \ -	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ -	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ -	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \ -	| avr-* \ -	| bfin-* | bs2000-* \ -	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ -	| clipper-* | craynv-* | cydra-* \ -	| d10v-* | d30v-* | dlx-* \ -	| elxsi-* \ -	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ -	| h8300-* | h8500-* \ -	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ -	| i*86-* | i860-* | i960-* | ia64-* \ -	| ip2k-* | iq2000-* \ -	| m32r-* | m32rle-* \ -	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -	| m88110-* | m88k-* | maxq-* | mcore-* \ -	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ -	| mips16-* \ -	| mips64-* | mips64el-* \ -	| mips64vr-* | mips64vrel-* \ -	| mips64orion-* | mips64orionel-* \ -	| mips64vr4100-* | mips64vr4100el-* \ -	| mips64vr4300-* | mips64vr4300el-* \ -	| mips64vr5000-* | mips64vr5000el-* \ -	| mips64vr5900-* | mips64vr5900el-* \ -	| mipsisa32-* | mipsisa32el-* \ -	| mipsisa32r2-* | mipsisa32r2el-* \ -	| mipsisa64-* | mipsisa64el-* \ -	| mipsisa64r2-* | mipsisa64r2el-* \ -	| mipsisa64sb1-* | mipsisa64sb1el-* \ -	| mipsisa64sr71k-* | mipsisa64sr71kel-* \ -	| mipstx39-* | mipstx39el-* \ -	| mmix-* \ -	| ms1-* \ -	| msp430-* \ -	| none-* | np1-* | ns16k-* | ns32k-* \ -	| orion-* \ -	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ -	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ -	| pyramid-* \ -	| romp-* | rs6000-* \ -	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ -	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ -	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ -	| sparclite-* \ -	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ -	| tahoe-* | thumb-* \ -	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ -	| tron-* \ -	| v850-* | v850e-* | vax-* \ -	| we32k-* \ -	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ -	| xstormy16-* | xtensa-* \ -	| ymp-* \ -	| z8k-*) -		;; -	m32c-*) -		;; -	# Recognize the various machine names and aliases which stand -	# for a CPU type and a company and sometimes even an OS. -	386bsd) -		basic_machine=i386-unknown -		os=-bsd -		;; -	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) -		basic_machine=m68000-att -		;; -	3b*) -		basic_machine=we32k-att -		;; -	a29khif) -		basic_machine=a29k-amd -		os=-udi -		;; -    	abacus) -		basic_machine=abacus-unknown -		;; -	adobe68k) -		basic_machine=m68010-adobe -		os=-scout -		;; -	alliant | fx80) -		basic_machine=fx80-alliant -		;; -	altos | altos3068) -		basic_machine=m68k-altos -		;; -	am29k) -		basic_machine=a29k-none -		os=-bsd -		;; -	amd64) -		basic_machine=x86_64-pc -		;; -	amd64-*) -		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	amdahl) -		basic_machine=580-amdahl -		os=-sysv -		;; -	amiga | amiga-*) -		basic_machine=m68k-unknown -		;; -	amigaos | amigados) -		basic_machine=m68k-unknown -		os=-amigaos -		;; -	amigaunix | amix) -		basic_machine=m68k-unknown -		os=-sysv4 -		;; -	apollo68) -		basic_machine=m68k-apollo -		os=-sysv -		;; -	apollo68bsd) -		basic_machine=m68k-apollo -		os=-bsd -		;; -	aux) -		basic_machine=m68k-apple -		os=-aux -		;; -	balance) -		basic_machine=ns32k-sequent -		os=-dynix -		;; -	c90) -		basic_machine=c90-cray -		os=-unicos -		;; -	convex-c1) -		basic_machine=c1-convex -		os=-bsd -		;; -	convex-c2) -		basic_machine=c2-convex -		os=-bsd -		;; -	convex-c32) -		basic_machine=c32-convex -		os=-bsd -		;; -	convex-c34) -		basic_machine=c34-convex -		os=-bsd -		;; -	convex-c38) -		basic_machine=c38-convex -		os=-bsd -		;; -	cray | j90) -		basic_machine=j90-cray -		os=-unicos -		;; -	craynv) -		basic_machine=craynv-cray -		os=-unicosmp -		;; -	cr16c) -		basic_machine=cr16c-unknown -		os=-elf -		;; -	crds | unos) -		basic_machine=m68k-crds -		;; -	crisv32 | crisv32-* | etraxfs*) -		basic_machine=crisv32-axis -		;; -	cris | cris-* | etrax*) -		basic_machine=cris-axis -		;; -	crx) -		basic_machine=crx-unknown -		os=-elf -		;; -	da30 | da30-*) -		basic_machine=m68k-da30 -		;; -	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) -		basic_machine=mips-dec -		;; -	decsystem10* | dec10*) -		basic_machine=pdp10-dec -		os=-tops10 -		;; -	decsystem20* | dec20*) -		basic_machine=pdp10-dec -		os=-tops20 -		;; -	delta | 3300 | motorola-3300 | motorola-delta \ -	      | 3300-motorola | delta-motorola) -		basic_machine=m68k-motorola -		;; -	delta88) -		basic_machine=m88k-motorola -		os=-sysv3 -		;; -	djgpp) -		basic_machine=i586-pc -		os=-msdosdjgpp -		;; -	dpx20 | dpx20-*) -		basic_machine=rs6000-bull -		os=-bosx -		;; -	dpx2* | dpx2*-bull) -		basic_machine=m68k-bull -		os=-sysv3 -		;; -	ebmon29k) -		basic_machine=a29k-amd -		os=-ebmon -		;; -	elxsi) -		basic_machine=elxsi-elxsi -		os=-bsd -		;; -	encore | umax | mmax) -		basic_machine=ns32k-encore -		;; -	es1800 | OSE68k | ose68k | ose | OSE) -		basic_machine=m68k-ericsson -		os=-ose -		;; -	fx2800) -		basic_machine=i860-alliant -		;; -	genix) -		basic_machine=ns32k-ns -		;; -	gmicro) -		basic_machine=tron-gmicro -		os=-sysv -		;; -	go32) -		basic_machine=i386-pc -		os=-go32 -		;; -	h3050r* | hiux*) -		basic_machine=hppa1.1-hitachi -		os=-hiuxwe2 -		;; -	h8300hms) -		basic_machine=h8300-hitachi -		os=-hms -		;; -	h8300xray) -		basic_machine=h8300-hitachi -		os=-xray -		;; -	h8500hms) -		basic_machine=h8500-hitachi -		os=-hms -		;; -	harris) -		basic_machine=m88k-harris -		os=-sysv3 -		;; -	hp300-*) -		basic_machine=m68k-hp -		;; -	hp300bsd) -		basic_machine=m68k-hp -		os=-bsd -		;; -	hp300hpux) -		basic_machine=m68k-hp -		os=-hpux -		;; -	hp3k9[0-9][0-9] | hp9[0-9][0-9]) -		basic_machine=hppa1.0-hp -		;; -	hp9k2[0-9][0-9] | hp9k31[0-9]) -		basic_machine=m68000-hp -		;; -	hp9k3[2-9][0-9]) -		basic_machine=m68k-hp -		;; -	hp9k6[0-9][0-9] | hp6[0-9][0-9]) -		basic_machine=hppa1.0-hp -		;; -	hp9k7[0-79][0-9] | hp7[0-79][0-9]) -		basic_machine=hppa1.1-hp -		;; -	hp9k78[0-9] | hp78[0-9]) -		# FIXME: really hppa2.0-hp -		basic_machine=hppa1.1-hp -		;; -	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) -		# FIXME: really hppa2.0-hp -		basic_machine=hppa1.1-hp -		;; -	hp9k8[0-9][13679] | hp8[0-9][13679]) -		basic_machine=hppa1.1-hp -		;; -	hp9k8[0-9][0-9] | hp8[0-9][0-9]) -		basic_machine=hppa1.0-hp -		;; -	hppa-next) -		os=-nextstep3 -		;; -	hppaosf) -		basic_machine=hppa1.1-hp -		os=-osf -		;; -	hppro) -		basic_machine=hppa1.1-hp -		os=-proelf -		;; -	i370-ibm* | ibm*) -		basic_machine=i370-ibm -		;; -# I'm not sure what "Sysv32" means.  Should this be sysv3.2? -	i*86v32) -		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` -		os=-sysv32 -		;; -	i*86v4*) -		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` -		os=-sysv4 -		;; -	i*86v) -		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` -		os=-sysv -		;; -	i*86sol2) -		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` -		os=-solaris2 -		;; -	i386mach) -		basic_machine=i386-mach -		os=-mach -		;; -	i386-vsta | vsta) -		basic_machine=i386-unknown -		os=-vsta -		;; -	iris | iris4d) -		basic_machine=mips-sgi -		case $os in -		    -irix*) -			;; -		    *) -			os=-irix4 -			;; -		esac -		;; -	isi68 | isi) -		basic_machine=m68k-isi -		os=-sysv -		;; -	m88k-omron*) -		basic_machine=m88k-omron -		;; -	magnum | m3230) -		basic_machine=mips-mips -		os=-sysv -		;; -	merlin) -		basic_machine=ns32k-utek -		os=-sysv -		;; -	mingw32) -		basic_machine=i386-pc -		os=-mingw32 -		;; -	miniframe) -		basic_machine=m68000-convergent -		;; -	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) -		basic_machine=m68k-atari -		os=-mint -		;; -	mips3*-*) -		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` -		;; -	mips3*) -		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown -		;; -	monitor) -		basic_machine=m68k-rom68k -		os=-coff -		;; -	morphos) -		basic_machine=powerpc-unknown -		os=-morphos -		;; -	msdos) -		basic_machine=i386-pc -		os=-msdos -		;; -	mvs) -		basic_machine=i370-ibm -		os=-mvs -		;; -	ncr3000) -		basic_machine=i486-ncr -		os=-sysv4 -		;; -	netbsd386) -		basic_machine=i386-unknown -		os=-netbsd -		;; -	netwinder) -		basic_machine=armv4l-rebel -		os=-linux -		;; -	news | news700 | news800 | news900) -		basic_machine=m68k-sony -		os=-newsos -		;; -	news1000) -		basic_machine=m68030-sony -		os=-newsos -		;; -	news-3600 | risc-news) -		basic_machine=mips-sony -		os=-newsos -		;; -	necv70) -		basic_machine=v70-nec -		os=-sysv -		;; -	next | m*-next ) -		basic_machine=m68k-next -		case $os in -		    -nextstep* ) -			;; -		    -ns2*) -		      os=-nextstep2 -			;; -		    *) -		      os=-nextstep3 -			;; -		esac -		;; -	nh3000) -		basic_machine=m68k-harris -		os=-cxux -		;; -	nh[45]000) -		basic_machine=m88k-harris -		os=-cxux -		;; -	nindy960) -		basic_machine=i960-intel -		os=-nindy -		;; -	mon960) -		basic_machine=i960-intel -		os=-mon960 -		;; -	nonstopux) -		basic_machine=mips-compaq -		os=-nonstopux -		;; -	np1) -		basic_machine=np1-gould -		;; -	nsr-tandem) -		basic_machine=nsr-tandem -		;; -	op50n-* | op60c-*) -		basic_machine=hppa1.1-oki -		os=-proelf -		;; -	openrisc | openrisc-*) -		basic_machine=or32-unknown -		;; -	os400) -		basic_machine=powerpc-ibm -		os=-os400 -		;; -	OSE68000 | ose68000) -		basic_machine=m68000-ericsson -		os=-ose -		;; -	os68k) -		basic_machine=m68k-none -		os=-os68k -		;; -	pa-hitachi) -		basic_machine=hppa1.1-hitachi -		os=-hiuxwe2 -		;; -	paragon) -		basic_machine=i860-intel -		os=-osf -		;; -	pbd) -		basic_machine=sparc-tti -		;; -	pbb) -		basic_machine=m68k-tti -		;; -	pc532 | pc532-*) -		basic_machine=ns32k-pc532 -		;; -	pentium | p5 | k5 | k6 | nexgen | viac3) -		basic_machine=i586-pc -		;; -	pentiumpro | p6 | 6x86 | athlon | athlon_*) -		basic_machine=i686-pc -		;; -	pentiumii | pentium2 | pentiumiii | pentium3) -		basic_machine=i686-pc -		;; -	pentium4) -		basic_machine=i786-pc -		;; -	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) -		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	pentiumpro-* | p6-* | 6x86-* | athlon-*) -		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) -		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	pentium4-*) -		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	pn) -		basic_machine=pn-gould -		;; -	power)	basic_machine=power-ibm -		;; -	ppc)	basic_machine=powerpc-unknown -		;; -	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	ppcle | powerpclittle | ppc-le | powerpc-little) -		basic_machine=powerpcle-unknown -		;; -	ppcle-* | powerpclittle-*) -		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	ppc64)	basic_machine=powerpc64-unknown -		;; -	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	ppc64le | powerpc64little | ppc64-le | powerpc64-little) -		basic_machine=powerpc64le-unknown -		;; -	ppc64le-* | powerpc64little-*) -		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` -		;; -	ps2) -		basic_machine=i386-ibm -		;; -	pw32) -		basic_machine=i586-unknown -		os=-pw32 -		;; -	rom68k) -		basic_machine=m68k-rom68k -		os=-coff -		;; -	rm[46]00) -		basic_machine=mips-siemens -		;; -	rtpc | rtpc-*) -		basic_machine=romp-ibm -		;; -	s390 | s390-*) -		basic_machine=s390-ibm -		;; -	s390x | s390x-*) -		basic_machine=s390x-ibm -		;; -	sa29200) -		basic_machine=a29k-amd -		os=-udi -		;; -	sb1) -		basic_machine=mipsisa64sb1-unknown -		;; -	sb1el) -		basic_machine=mipsisa64sb1el-unknown -		;; -	sei) -		basic_machine=mips-sei -		os=-seiux -		;; -	sequent) -		basic_machine=i386-sequent -		;; -	sh) -		basic_machine=sh-hitachi -		os=-hms -		;; -	sh64) -		basic_machine=sh64-unknown -		;; -	sparclite-wrs | simso-wrs) -		basic_machine=sparclite-wrs -		os=-vxworks -		;; -	sps7) -		basic_machine=m68k-bull -		os=-sysv2 -		;; -	spur) -		basic_machine=spur-unknown -		;; -	st2000) -		basic_machine=m68k-tandem -		;; -	stratus) -		basic_machine=i860-stratus -		os=-sysv4 -		;; -	sun2) -		basic_machine=m68000-sun -		;; -	sun2os3) -		basic_machine=m68000-sun -		os=-sunos3 -		;; -	sun2os4) -		basic_machine=m68000-sun -		os=-sunos4 -		;; -	sun3os3) -		basic_machine=m68k-sun -		os=-sunos3 -		;; -	sun3os4) -		basic_machine=m68k-sun -		os=-sunos4 -		;; -	sun4os3) -		basic_machine=sparc-sun -		os=-sunos3 -		;; -	sun4os4) -		basic_machine=sparc-sun -		os=-sunos4 -		;; -	sun4sol2) -		basic_machine=sparc-sun -		os=-solaris2 -		;; -	sun3 | sun3-*) -		basic_machine=m68k-sun -		;; -	sun4) -		basic_machine=sparc-sun -		;; -	sun386 | sun386i | roadrunner) -		basic_machine=i386-sun -		;; -	sv1) -		basic_machine=sv1-cray -		os=-unicos -		;; -	symmetry) -		basic_machine=i386-sequent -		os=-dynix -		;; -	t3e) -		basic_machine=alphaev5-cray -		os=-unicos -		;; -	t90) -		basic_machine=t90-cray -		os=-unicos -		;; -	tic54x | c54x*) -		basic_machine=tic54x-unknown -		os=-coff -		;; -	tic55x | c55x*) -		basic_machine=tic55x-unknown -		os=-coff -		;; -	tic6x | c6x*) -		basic_machine=tic6x-unknown -		os=-coff -		;; -	tx39) -		basic_machine=mipstx39-unknown -		;; -	tx39el) -		basic_machine=mipstx39el-unknown -		;; -	toad1) -		basic_machine=pdp10-xkl -		os=-tops20 -		;; -	tower | tower-32) -		basic_machine=m68k-ncr -		;; -	tpf) -		basic_machine=s390x-ibm -		os=-tpf -		;; -	udi29k) -		basic_machine=a29k-amd -		os=-udi -		;; -	ultra3) -		basic_machine=a29k-nyu -		os=-sym1 -		;; -	v810 | necv810) -		basic_machine=v810-nec -		os=-none -		;; -	vaxv) -		basic_machine=vax-dec -		os=-sysv -		;; -	vms) -		basic_machine=vax-dec -		os=-vms -		;; -	vpp*|vx|vx-*) -		basic_machine=f301-fujitsu -		;; -	vxworks960) -		basic_machine=i960-wrs -		os=-vxworks -		;; -	vxworks68) -		basic_machine=m68k-wrs -		os=-vxworks -		;; -	vxworks29k) -		basic_machine=a29k-wrs -		os=-vxworks -		;; -	w65*) -		basic_machine=w65-wdc -		os=-none -		;; -	w89k-*) -		basic_machine=hppa1.1-winbond -		os=-proelf -		;; -	xbox) -		basic_machine=i686-pc -		os=-mingw32 -		;; -	xps | xps100) -		basic_machine=xps100-honeywell -		;; -	ymp) -		basic_machine=ymp-cray -		os=-unicos -		;; -	z8k-*-coff) -		basic_machine=z8k-unknown -		os=-sim -		;; -	none) -		basic_machine=none-none -		os=-none -		;; - -# Here we handle the default manufacturer of certain CPU types.  It is in -# some cases the only manufacturer, in others, it is the most popular. -	w89k) -		basic_machine=hppa1.1-winbond -		;; -	op50n) -		basic_machine=hppa1.1-oki -		;; -	op60c) -		basic_machine=hppa1.1-oki -		;; -	romp) -		basic_machine=romp-ibm -		;; -	mmix) -		basic_machine=mmix-knuth -		;; -	rs6000) -		basic_machine=rs6000-ibm -		;; -	vax) -		basic_machine=vax-dec -		;; -	pdp10) -		# there are many clones, so DEC is not a safe bet -		basic_machine=pdp10-unknown -		;; -	pdp11) -		basic_machine=pdp11-dec -		;; -	we32k) -		basic_machine=we32k-att -		;; -	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) -		basic_machine=sh-unknown -		;; -	sparc | sparcv8 | sparcv9 | sparcv9b) -		basic_machine=sparc-sun -		;; -	cydra) -		basic_machine=cydra-cydrome -		;; -	orion) -		basic_machine=orion-highlevel -		;; -	orion105) -		basic_machine=clipper-highlevel -		;; -	mac | mpw | mac-mpw) -		basic_machine=m68k-apple -		;; -	pmac | pmac-mpw) -		basic_machine=powerpc-apple -		;; -	*-unknown) -		# Make sure to match an already-canonicalized machine name. -		;; -	*) -		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 -		exit 1 -		;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in -	*-digital*) -		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` -		;; -	*-commodore*) -		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` -		;; -	*) -		;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in -        # First match some system type aliases -        # that might get confused with valid system types. -	# -solaris* is a basic system type, with this one exception. -	-solaris1 | -solaris1.*) -		os=`echo $os | sed -e 's|solaris1|sunos4|'` -		;; -	-solaris) -		os=-solaris2 -		;; -	-svr4*) -		os=-sysv4 -		;; -	-unixware*) -		os=-sysv4.2uw -		;; -	-gnu/linux*) -		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` -		;; -	# First accept the basic system types. -	# The portable systems comes first. -	# Each alternative MUST END IN A *, to match a version number. -	# -sysv* is not here because it comes later, after sysvr4. -	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ -	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ -	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ -	      | -aos* \ -	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ -	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ -	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ -	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ -	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ -	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ -	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ -	      | -chorusos* | -chorusrdb* \ -	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ -	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ -	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ -	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ -	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ -	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ -	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ -	      | -skyos* | -haiku*) -	# Remember, each alternative MUST END IN *, to match a version number. -		;; -	-qnx*) -		case $basic_machine in -		    x86-* | i*86-*) -			;; -		    *) -			os=-nto$os -			;; -		esac -		;; -	-nto-qnx*) -		;; -	-nto*) -		os=`echo $os | sed -e 's|nto|nto-qnx|'` -		;; -	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ -	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) -		;; -	-mac*) -		os=`echo $os | sed -e 's|mac|macos|'` -		;; -	-linux-dietlibc) -		os=-linux-dietlibc -		;; -	-linux*) -		os=`echo $os | sed -e 's|linux|linux-gnu|'` -		;; -	-sunos5*) -		os=`echo $os | sed -e 's|sunos5|solaris2|'` -		;; -	-sunos6*) -		os=`echo $os | sed -e 's|sunos6|solaris3|'` -		;; -	-opened*) -		os=-openedition -		;; -        -os400*) -		os=-os400 -		;; -	-wince*) -		os=-wince -		;; -	-osfrose*) -		os=-osfrose -		;; -	-osf*) -		os=-osf -		;; -	-utek*) -		os=-bsd -		;; -	-dynix*) -		os=-bsd -		;; -	-acis*) -		os=-aos -		;; -	-atheos*) -		os=-atheos -		;; -	-syllable*) -		os=-syllable -		;; -	-386bsd) -		os=-bsd -		;; -	-ctix* | -uts*) -		os=-sysv -		;; -	-nova*) -		os=-rtmk-nova -		;; -	-ns2 ) -		os=-nextstep2 -		;; -	-nsk*) -		os=-nsk -		;; -	# Preserve the version number of sinix5. -	-sinix5.*) -		os=`echo $os | sed -e 's|sinix|sysv|'` -		;; -	-sinix*) -		os=-sysv4 -		;; -        -tpf*) -		os=-tpf -		;; -	-triton*) -		os=-sysv3 -		;; -	-oss*) -		os=-sysv3 -		;; -	-svr4) -		os=-sysv4 -		;; -	-svr3) -		os=-sysv3 -		;; -	-sysvr4) -		os=-sysv4 -		;; -	# This must come after -sysvr4. -	-sysv*) -		;; -	-ose*) -		os=-ose -		;; -	-es1800*) -		os=-ose -		;; -	-xenix) -		os=-xenix -		;; -	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) -		os=-mint -		;; -	-aros*) -		os=-aros -		;; -	-kaos*) -		os=-kaos -		;; -	-zvmoe) -		os=-zvmoe -		;; -	-none) -		;; -	*) -		# Get rid of the `-' at the beginning of $os. -		os=`echo $os | sed 's/[^-]*-//'` -		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 -		exit 1 -		;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system.  Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in -	*-acorn) -		os=-riscix1.2 -		;; -	arm*-rebel) -		os=-linux -		;; -	arm*-semi) -		os=-aout -		;; -    c4x-* | tic4x-*) -        os=-coff -        ;; -	# This must come before the *-dec entry. -	pdp10-*) -		os=-tops20 -		;; -	pdp11-*) -		os=-none -		;; -	*-dec | vax-*) -		os=-ultrix4.2 -		;; -	m68*-apollo) -		os=-domain -		;; -	i386-sun) -		os=-sunos4.0.2 -		;; -	m68000-sun) -		os=-sunos3 -		# This also exists in the configure program, but was not the -		# default. -		# os=-sunos4 -		;; -	m68*-cisco) -		os=-aout -		;; -	mips*-cisco) -		os=-elf -		;; -	mips*-*) -		os=-elf -		;; -	or32-*) -		os=-coff -		;; -	*-tti)	# must be before sparc entry or we get the wrong os. -		os=-sysv3 -		;; -	sparc-* | *-sun) -		os=-sunos4.1.1 -		;; -	*-be) -		os=-beos -		;; -	*-haiku) -		os=-haiku -		;; -	*-ibm) -		os=-aix -		;; -    	*-knuth) -		os=-mmixware -		;; -	*-wec) -		os=-proelf -		;; -	*-winbond) -		os=-proelf -		;; -	*-oki) -		os=-proelf -		;; -	*-hp) -		os=-hpux -		;; -	*-hitachi) -		os=-hiux -		;; -	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) -		os=-sysv -		;; -	*-cbm) -		os=-amigaos -		;; -	*-dg) -		os=-dgux -		;; -	*-dolphin) -		os=-sysv3 -		;; -	m68k-ccur) -		os=-rtu -		;; -	m88k-omron*) -		os=-luna -		;; -	*-next ) -		os=-nextstep -		;; -	*-sequent) -		os=-ptx -		;; -	*-crds) -		os=-unos -		;; -	*-ns) -		os=-genix -		;; -	i370-*) -		os=-mvs -		;; -	*-next) -		os=-nextstep3 -		;; -	*-gould) -		os=-sysv -		;; -	*-highlevel) -		os=-bsd -		;; -	*-encore) -		os=-bsd -		;; -	*-sgi) -		os=-irix -		;; -	*-siemens) -		os=-sysv4 -		;; -	*-masscomp) -		os=-rtu -		;; -	f30[01]-fujitsu | f700-fujitsu) -		os=-uxpv -		;; -	*-rom68k) -		os=-coff -		;; -	*-*bug) -		os=-coff -		;; -	*-apple) -		os=-macos -		;; -	*-atari*) -		os=-mint -		;; -	*) -		os=-none -		;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer.  We pick the logical manufacturer. -vendor=unknown -case $basic_machine in -	*-unknown) -		case $os in -			-riscix*) -				vendor=acorn -				;; -			-sunos*) -				vendor=sun -				;; -			-aix*) -				vendor=ibm -				;; -			-beos*) -				vendor=be -				;; -			-hpux*) -				vendor=hp -				;; -			-mpeix*) -				vendor=hp -				;; -			-hiux*) -				vendor=hitachi -				;; -			-unos*) -				vendor=crds -				;; -			-dgux*) -				vendor=dg -				;; -			-luna*) -				vendor=omron -				;; -			-genix*) -				vendor=ns -				;; -			-mvs* | -opened*) -				vendor=ibm -				;; -			-os400*) -				vendor=ibm -				;; -			-ptx*) -				vendor=sequent -				;; -			-tpf*) -				vendor=ibm -				;; -			-vxsim* | -vxworks* | -windiss*) -				vendor=wrs -				;; -			-aux*) -				vendor=apple -				;; -			-hms*) -				vendor=hitachi -				;; -			-mpw* | -macos*) -				vendor=apple -				;; -			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) -				vendor=atari -				;; -			-vos*) -				vendor=stratus -				;; -		esac -		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` -		;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/source4/lib/talloc/configure.ac b/source4/lib/talloc/configure.ac deleted file mode 100644 index 4719aa04b5..0000000000 --- a/source4/lib/talloc/configure.ac +++ /dev/null @@ -1,24 +0,0 @@ -AC_PREREQ(2.50) -AC_INIT(talloc, 1.2.0) -AC_CONFIG_SRCDIR([talloc.c]) -AC_SUBST(datarootdir) -AC_CONFIG_HEADER(config.h) - -AC_LIBREPLACE_ALL_CHECKS - -m4_include(libtalloc.m4) - -AC_PATH_PROG(XSLTPROC,xsltproc) -DOC_TARGET="" -if test -n "$XSLTPROC"; then -	DOC_TARGET=doc -fi -AC_SUBST(DOC_TARGET) - -AC_LD_PICFLAG -AC_LD_SHLIBEXT -AC_LD_SONAMEFLAG -AC_LIBREPLACE_SHLD -AC_LIBREPLACE_SHLD_FLAGS - -AC_OUTPUT(Makefile talloc.pc) diff --git a/source4/lib/talloc/install-sh b/source4/lib/talloc/install-sh deleted file mode 100755 index 58719246f0..0000000000 --- a/source4/lib/talloc/install-sh +++ /dev/null @@ -1,238 +0,0 @@ -#! /bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do -    case $1 in -	-c) instcmd="$cpprog" -	    shift -	    continue;; - -	-d) dir_arg=true -	    shift -	    continue;; - -	-m) chmodcmd="$chmodprog $2" -	    shift -	    shift -	    continue;; - -	-o) chowncmd="$chownprog $2" -	    shift -	    shift -	    continue;; - -	-g) chgrpcmd="$chgrpprog $2" -	    shift -	    shift -	    continue;; - -	-s) stripcmd="$stripprog" -	    shift -	    continue;; - -	-t=*) transformarg=`echo $1 | sed 's/-t=//'` -	    shift -	    continue;; - -	-b=*) transformbasename=`echo $1 | sed 's/-b=//'` -	    shift -	    continue;; - -	*)  if [ x"$src" = x ] -	    then -		src=$1 -	    else -		# this colon is to work around a 386BSD /bin/sh bug -		: -		dst=$1 -	    fi -	    shift -	    continue;; -    esac -done - -if [ x"$src" = x ] -then -	echo "install:	no input file specified" -	exit 1 -else -	true -fi - -if [ x"$dir_arg" != x ]; then -	dst=$src -	src="" -	 -	if [ -d $dst ]; then -		instcmd=: -	else -		instcmd=mkdir -	fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad  -# if $src (and thus $dsttmp) contains '*'. - -	if [ -f $src -o -d $src ] -	then -		true -	else -		echo "install:  $src does not exist" -		exit 1 -	fi -	 -	if [ x"$dst" = x ] -	then -		echo "install:	no destination specified" -		exit 1 -	else -		true -	fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - -	if [ -d $dst ] -	then -		dst="$dst"/`basename $src` -	else -		true -	fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -#  this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS='	 -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do -	pathcomp="${pathcomp}${1}" -	shift - -	if [ ! -d "${pathcomp}" ] ; -        then -		$mkdirprog "${pathcomp}" -	else -		true -	fi - -	pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then -	$doit $instcmd $dst && - -	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && -	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && -	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && -	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - -	if [ x"$transformarg" = x ]  -	then -		dstfile=`basename $dst` -	else -		dstfile=`basename $dst $transformbasename |  -			sed $transformarg`$transformbasename -	fi - -# don't allow the sed command to completely eliminate the filename - -	if [ x"$dstfile" = x ]  -	then -		dstfile=`basename $dst` -	else -		true -	fi - -# Make a temp file name in the proper directory. - -	dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - -	$doit $instcmd $src $dsttmp && - -	trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing.  If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - -	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && -	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && -	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && -	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - -	$doit $rmcmd -f $dstdir/$dstfile && -	$doit $mvcmd $dsttmp $dstdir/$dstfile  - -fi && - - -exit 0 diff --git a/source4/lib/talloc/libtalloc.m4 b/source4/lib/talloc/libtalloc.m4 deleted file mode 100644 index fd2b4b22cd..0000000000 --- a/source4/lib/talloc/libtalloc.m4 +++ /dev/null @@ -1,33 +0,0 @@ -dnl find the talloc sources. This is meant to work both for  -dnl talloc standalone builds, and builds of packages using talloc -tallocdir="" -tallocpaths=". lib/talloc talloc ../talloc" -for d in $tallocpaths; do -	if test -f "$srcdir/$d/talloc.c"; then -		tallocdir="$d" -		AC_SUBST(tallocdir) -		break; -	fi -done -if test x"$tallocdir" = "x"; then -   AC_MSG_ERROR([cannot find talloc source in $tallocpaths]) -fi -TALLOC_OBJ="talloc.o" -AC_SUBST(TALLOC_OBJ) - -TALLOC_CFLAGS="-I$srcdir/$tallocdir" -AC_SUBST(TALLOC_CFLAGS) - -TALLOC_LIBS="" -AC_SUBST(TALLOC_LIBS) - -AC_CHECK_SIZEOF(size_t,cross) -AC_CHECK_SIZEOF(void *,cross) - -if test $ac_cv_sizeof_size_t -lt $ac_cv_sizeof_void_p; then -	AC_WARN([size_t cannot represent the amount of used memory of a process]) -	AC_WARN([please report this to <samba-technical@samba.org>]) -	AC_WARN([sizeof(size_t) = $ac_cv_sizeof_size_t]) -	AC_WARN([sizeof(void *) = $ac_cv_sizeof_void_p]) -	AC_ERROR([sizeof(size_t) < sizeof(void *)]) -fi diff --git a/source4/lib/talloc/rules.mk b/source4/lib/talloc/rules.mk deleted file mode 100644 index 6cee126529..0000000000 --- a/source4/lib/talloc/rules.mk +++ /dev/null @@ -1,18 +0,0 @@ -.SUFFIXES: .c .o .3 .3.xml .xml .html - -showflags:: -	@echo 'talloc will be compiled with flags:' -	@echo '  CFLAGS = $(CFLAGS)' -	@echo '  LIBS = $(LIBS)' - -.c.o: -	$(CC) $(PICFLAG) -o $@ -c $< $(CFLAGS) - -.3.xml.3: -	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< - -.xml.html: -	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< - -distclean:: -	rm -f *~ */*~ diff --git a/source4/lib/talloc/talloc.3.xml b/source4/lib/talloc/talloc.3.xml deleted file mode 100644 index 67de15bfc8..0000000000 --- a/source4/lib/talloc/talloc.3.xml +++ /dev/null @@ -1,738 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> -<refentry> -  <refmeta> -    <refentrytitle>talloc</refentrytitle> -    <manvolnum>3</manvolnum> -  </refmeta> -  <refnamediv> -    <refname>talloc</refname> -<refpurpose>hierarchical reference counted memory pool system with destructors</refpurpose> -  </refnamediv> -  <refsynopsisdiv> -<synopsis>#include <talloc/talloc.h></synopsis> -  </refsynopsisdiv> -  <refsect1><title>DESCRIPTION</title> -    <para> -      If you are used to talloc from Samba3 then please read this -      carefully, as talloc has changed a lot. -    </para> -    <para> -      The new talloc is a hierarchical, reference counted memory pool -      system with destructors.	Quite a mouthful really, but not too bad -      once you get used to it. -    </para> -    <para> -      Perhaps the biggest change from Samba3 is that there is no -      distinction between a "talloc context" and a "talloc pointer".  Any -      pointer returned from talloc() is itself a valid talloc context.  -      This means you can do this: -    </para> -    <programlisting> -    struct foo *X = talloc(mem_ctx, struct foo); -    X->name = talloc_strdup(X, "foo"); -    </programlisting> -    <para> -      and the pointer <literal role="code">X->name</literal> -      would be a "child" of the talloc context <literal -      role="code">X</literal> which is itself a child of -      <literal role="code">mem_ctx</literal>.  So if you do -      <literal role="code">talloc_free(mem_ctx)</literal> then -      it is all destroyed, whereas if you do <literal -      role="code">talloc_free(X)</literal> then just <literal -      role="code">X</literal> and <literal -      role="code">X->name</literal> are destroyed, and if -      you do <literal -      role="code">talloc_free(X->name)</literal> then just -      the name element of <literal role="code">X</literal> is -      destroyed. -    </para> -    <para> -      If you think about this, then what this effectively gives you is an -      n-ary tree, where you can free any part of the tree with -      talloc_free(). -    </para> -    <para> -      If you find this confusing, then I suggest you run the <literal -      role="code">testsuite</literal> program to watch talloc -      in action.  You may also like to add your own tests to <literal -      role="code">testsuite.c</literal> to clarify how some -      particular situation is handled. -    </para> -  </refsect1> -  <refsect1><title>TALLOC API</title> -    <para> -      The following is a complete guide to the talloc API. Read it all at -      least twice. -    </para> -    <refsect2><title>(type *)talloc(const void *ctx, type);</title> -        <para> -	  The talloc() macro is the core of the talloc library.  It takes a -	  memory <emphasis role="italic">ctx</emphasis> and a <emphasis -	  role="italic">type</emphasis>, and returns a pointer to a new -	  area of memory of the given <emphasis -	  role="italic">type</emphasis>. -        </para> -        <para> -	  The returned pointer is itself a talloc context, so you can use -	  it as the <emphasis role="italic">ctx</emphasis> argument to more -	  calls to talloc() if you wish. -        </para> -        <para> -	  The returned pointer is a "child" of the supplied context.  This -	  means that if you talloc_free() the <emphasis -	  role="italic">ctx</emphasis> then the new child disappears as -	  well.  Alternatively you can free just the child. -        </para> -        <para> -	  The <emphasis role="italic">ctx</emphasis> argument to talloc() -	  can be NULL, in which case a new top level context is created. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_size(const void *ctx, size_t size);</title> -        <para> -	  The function talloc_size() should be used when you don't have a -	  convenient type to pass to talloc().	Unlike talloc(), it is not -	  type safe (as it returns a void *), so you are on your own for -	  type checking. -        </para> -    </refsect2> -    <refsect2><title>(typeof(ptr)) talloc_ptrtype(const void *ctx, ptr);</title> -        <para> -	  The talloc_ptrtype() macro should be used when you have a pointer and -	  want to allocate memory to point at with this pointer. When compiling -	  with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size() -	  and talloc_get_name() will return the current location in the source file. -	  and not the type. -        </para> -    </refsect2> -    <refsect2><title>int talloc_free(void *ptr);</title> -        <para> -	  The talloc_free() function frees a piece of talloc memory, and -	  all its children.  You can call talloc_free() on any pointer -	  returned by talloc(). -        </para> -        <para> -	  The return value of talloc_free() indicates success or failure, -	  with 0 returned for success and -1 for failure.  The only -	  possible failure condition is if <emphasis -	  role="italic">ptr</emphasis> had a destructor attached to it and -	  the destructor returned -1.  See <link -	  linkend="talloc_set_destructor"><quote>talloc_set_destructor()</quote></link> -	  for details on destructors. -        </para> -        <para> -	  If this pointer has an additional parent when talloc_free() is -	  called then the memory is not actually released, but instead the -	  most recently established parent is destroyed.  See <link -	  linkend="talloc_reference"><quote>talloc_reference()</quote></link> -	  for details on establishing additional parents. -        </para> -        <para> -	  For more control on which parent is removed, see <link -	  linkend="talloc_unlink"><quote>talloc_unlink()</quote></link>. -        </para> -        <para> -	  talloc_free() operates recursively on its children. -        </para> -    </refsect2> -    <refsect2 id="talloc_reference"><title>void *talloc_reference(const void *ctx, const void *ptr);</title> -        <para> -	  The talloc_reference() function makes <emphasis -	  role="italic">ctx</emphasis> an additional parent of <emphasis -	  role="italic">ptr</emphasis>. -        </para> -        <para> -	  The return value of talloc_reference() is always the original -	  pointer <emphasis role="italic">ptr</emphasis>, unless talloc ran -	  out of memory in creating the reference in which case it will -	  return NULL (each additional reference consumes around 48 bytes -	  of memory on intel x86 platforms). -        </para> -        <para> -	  If <emphasis role="italic">ptr</emphasis> is NULL, then the -	  function is a no-op, and simply returns NULL. -        </para> -        <para> -	  After creating a reference you can free it in one of the -	  following ways: -        </para> -      <para> -        <itemizedlist> -          <listitem> -            <para> -	      you can talloc_free() any parent of the original pointer.  -	      That will reduce the number of parents of this pointer by 1, -	      and will cause this pointer to be freed if it runs out of -	      parents. -            </para> -          </listitem> -          <listitem> -            <para> -	      you can talloc_free() the pointer itself.  That will destroy -	      the most recently established parent to the pointer and leave -	      the pointer as a child of its current parent. -            </para> -          </listitem> -        </itemizedlist> -      </para> -      <para> -	For more control on which parent to remove, see <link -	linkend="talloc_unlink"><quote>talloc_unlink()</quote></link>. -      </para> -    </refsect2> -    <refsect2 id="talloc_unlink"><title>int talloc_unlink(const void *ctx, const void *ptr);</title> -        <para> -	  The talloc_unlink() function removes a specific parent from -	  <emphasis role="italic">ptr</emphasis>. The <emphasis -	  role="italic">ctx</emphasis> passed must either be a context used -	  in talloc_reference() with this pointer, or must be a direct -	  parent of ptr. -        </para> -        <para> -	  Note that if the parent has already been removed using -	  talloc_free() then this function will fail and will return -1.  -	  Likewise, if <emphasis role="italic">ptr</emphasis> is NULL, then -	  the function will make no modifications and return -1. -        </para> -        <para> -	  Usually you can just use talloc_free() instead of -	  talloc_unlink(), but sometimes it is useful to have the -	  additional control on which parent is removed. -        </para> -    </refsect2> -    <refsect2 id="talloc_set_destructor"><title>void talloc_set_destructor(const void *ptr, int (*destructor)(void *));</title> -        <para> -	  The function talloc_set_destructor() sets the <emphasis -	  role="italic">destructor</emphasis> for the pointer <emphasis -	  role="italic">ptr</emphasis>.  A <emphasis -	  role="italic">destructor</emphasis> is a function that is called -	  when the memory used by a pointer is about to be released.  The -	  destructor receives <emphasis role="italic">ptr</emphasis> as an -	  argument, and should return 0 for success and -1 for failure. -        </para> -        <para> -	  The <emphasis role="italic">destructor</emphasis> can do anything -	  it wants to, including freeing other pieces of memory.  A common -	  use for destructors is to clean up operating system resources -	  (such as open file descriptors) contained in the structure the -	  destructor is placed on. -        </para> -        <para> -	  You can only place one destructor on a pointer.  If you need more -	  than one destructor then you can create a zero-length child of -	  the pointer and place an additional destructor on that. -        </para> -        <para> -	  To remove a destructor call talloc_set_destructor() with NULL for -	  the destructor. -        </para> -        <para> -	  If your destructor attempts to talloc_free() the pointer that it -	  is the destructor for then talloc_free() will return -1 and the -	  free will be ignored.  This would be a pointless operation -	  anyway, as the destructor is only called when the memory is just -	  about to go away. -        </para> -    </refsect2> -    <refsect2><title>int talloc_increase_ref_count(const void *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  The talloc_increase_ref_count(<emphasis -	  role="italic">ptr</emphasis>) function is exactly equivalent to: -        </para> -        <programlisting>talloc_reference(NULL, ptr);</programlisting> -        <para> -	  You can use either syntax, depending on which you think is -	  clearer in your code. -        </para> -        <para> -	  It returns 0 on success and -1 on failure. -        </para> -    </refsect2> -    <refsect2><title>size_t talloc_reference_count(const void *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  Return the number of references to the pointer. -        </para> -    </refsect2> -    <refsect2 id="talloc_set_name"><title>void talloc_set_name(const void *ptr, const char *fmt, ...);</title> -        <para> -	  Each talloc pointer has a "name".  The name is used principally -	  for debugging purposes, although it is also possible to set and -	  get the name on a pointer in as a way of "marking" pointers in -	  your code. -        </para> -        <para> -	  The main use for names on pointer is for "talloc reports".  See -	  <link -	  linkend="talloc_report"><quote>talloc_report_depth_cb()</quote></link>, -	  <link -	  linkend="talloc_report"><quote>talloc_report_depth_file()</quote></link>, -	  <link -	  linkend="talloc_report"><quote>talloc_report()</quote></link> -	  <link -	  linkend="talloc_report"><quote>talloc_report()</quote></link> -	  and <link -	  linkend="talloc_report_full"><quote>talloc_report_full()</quote></link> -	  for details.	Also see <link -	  linkend="talloc_enable_leak_report"><quote>talloc_enable_leak_report()</quote></link> -	  and <link -	  linkend="talloc_enable_leak_report_full"><quote>talloc_enable_leak_report_full()</quote></link>. -        </para> -        <para> -	  The talloc_set_name() function allocates memory as a child of the -	  pointer.  It is logically equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...));</programlisting> -        <para> -	  Note that multiple calls to talloc_set_name() will allocate more -	  memory without releasing the name.  All of the memory is released -	  when the ptr is freed using talloc_free(). -        </para> -    </refsect2> -    <refsect2><title>void talloc_set_name_const(const void *<emphasis role="italic">ptr</emphasis>, const char *<emphasis role="italic">name</emphasis>);</title> -        <para> -	  The function talloc_set_name_const() is just like -	  talloc_set_name(), but it takes a string constant, and is much -	  faster.  It is extensively used by the "auto naming" macros, such -	  as talloc_p(). -        </para> -        <para> -	  This function does not allocate any memory.  It just copies the -	  supplied pointer into the internal representation of the talloc -	  ptr. This means you must not pass a <emphasis -	  role="italic">name</emphasis> pointer to memory that will -	  disappear before <emphasis role="italic">ptr</emphasis> is freed -	  with talloc_free(). -        </para> -    </refsect2> -    <refsect2><title>void *talloc_named(const void *<emphasis role="italic">ctx</emphasis>, size_t <emphasis role="italic">size</emphasis>, const char *<emphasis role="italic">fmt</emphasis>, ...);</title> -        <para> -	  The talloc_named() function creates a named talloc pointer.  It -	  is equivalent to: -        </para> -        <programlisting>ptr = talloc_size(ctx, size); -talloc_set_name(ptr, fmt, ....);</programlisting> -    </refsect2> -    <refsect2><title>void *talloc_named_const(const void *<emphasis role="italic">ctx</emphasis>, size_t <emphasis role="italic">size</emphasis>, const char *<emphasis role="italic">name</emphasis>);</title> -        <para> -	  This is equivalent to: -        </para> -        <programlisting>ptr = talloc_size(ctx, size); -talloc_set_name_const(ptr, name);</programlisting> -    </refsect2> -    <refsect2><title>const char *talloc_get_name(const void *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  This returns the current name for the given talloc pointer, -	  <emphasis role="italic">ptr</emphasis>. See <link -	  linkend="talloc_set_name"><quote>talloc_set_name()</quote></link> -	  for details. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_init(const char *<emphasis role="italic">fmt</emphasis>, ...);</title> -        <para> -	  This function creates a zero length named talloc context as a top -	  level context.  It is equivalent to: -        </para> -        <programlisting>talloc_named(NULL, 0, fmt, ...);</programlisting> -    </refsect2> -    <refsect2><title>void *talloc_new(void *<emphasis role="italic">ctx</emphasis>);</title> -        <para> -	  This is a utility macro that creates a new memory context hanging -	  off an exiting context, automatically naming it "talloc_new: -	  __location__" where __location__ is the source line it is called -	  from.  It is particularly useful for creating a new temporary -	  working context. -        </para> -    </refsect2> -    <refsect2><title>(<emphasis role="italic">type</emphasis> *)talloc_realloc(const void *<emphasis role="italic">ctx</emphasis>, void *<emphasis role="italic">ptr</emphasis>, <emphasis role="italic">type</emphasis>, <emphasis role="italic">count</emphasis>);</title> -        <para> -	  The talloc_realloc() macro changes the size of a talloc pointer.  -	  It has the following equivalences: -        </para> -        <programlisting>talloc_realloc(ctx, NULL, type, 1) ==> talloc(ctx, type); -talloc_realloc(ctx, ptr, type, 0)  ==> talloc_free(ptr);</programlisting> -        <para> -	  The <emphasis role="italic">ctx</emphasis> argument is only used -	  if <emphasis role="italic">ptr</emphasis> is not NULL, otherwise -	  it is ignored. -        </para> -        <para> -	  talloc_realloc() returns the new pointer, or NULL on failure.  -	  The call will fail either due to a lack of memory, or because the -	  pointer has more than one parent (see <link -	  linkend="talloc_reference"><quote>talloc_reference()</quote></link>). -        </para> -    </refsect2> -    <refsect2><title>void *talloc_realloc_size(const void *ctx, void *ptr, size_t size);</title> -        <para> -	  the talloc_realloc_size() function is useful when the type is not -	  known so the type-safe talloc_realloc() cannot be used. -        </para> -    </refsect2> -    <refsect2><title>TYPE *talloc_steal(const void *<emphasis role="italic">new_ctx</emphasis>, const TYPE *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  The talloc_steal() function changes the parent context of a -	  talloc pointer.  It is typically used when the context that the -	  pointer is currently a child of is going to be freed and you wish -	  to keep the memory for a longer time. -        </para> -        <para> -	  The talloc_steal() function returns the pointer that you pass it. -	   It does not have any failure modes. -        </para> -        <para> -	  NOTE: It is possible to produce loops in the parent/child -	  relationship if you are not careful with talloc_steal().  No -	  guarantees are provided as to your sanity or the safety of your -	  data if you do this. -        </para> -    </refsect2> -    <refsect2><title>TYPE *talloc_move(const void *<emphasis role="italic">new_ctx</emphasis>, TYPE **<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  The talloc_move() function is a wrapper around -	  talloc_steal() which zeros the source pointer after the -	  move. This avoids a potential source of bugs where a -	  programmer leaves a pointer in two structures, and uses the -	  pointer from the old structure after it has been moved to a -	  new one. -        </para> -    </refsect2> -    <refsect2><title>size_t talloc_total_size(const void *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  The talloc_total_size() function returns the total size in bytes -	  used by this pointer and all child pointers.	Mostly useful for -	  debugging. -        </para> -        <para> -	  Passing NULL is allowed, but it will only give a meaningful -	  result if talloc_enable_leak_report() or -	  talloc_enable_leak_report_full() has been called. -        </para> -    </refsect2> -    <refsect2><title>size_t talloc_total_blocks(const void *<emphasis role="italic">ptr</emphasis>);</title> -        <para> -	  The talloc_total_blocks() function returns the total memory block -	  count used by this pointer and all child pointers.  Mostly useful -	  for debugging. -        </para> -        <para> -	  Passing NULL is allowed, but it will only give a meaningful -	  result if talloc_enable_leak_report() or -	  talloc_enable_leak_report_full() has been called. -        </para> -    </refsect2> -    <refsect2 id="talloc_report"><title>void talloc_report(const void *ptr, FILE *f);</title> -        <para> -	  The talloc_report() function prints a summary report of all -	  memory used by <emphasis role="italic">ptr</emphasis>.  One line -	  of report is printed for each immediate child of ptr, showing the -	  total memory and number of blocks used by that child. -        </para> -        <para> -	  You can pass NULL for the pointer, in which case a report is -	  printed for the top level memory context, but only if -	  talloc_enable_leak_report() or talloc_enable_leak_report_full() -	  has been called. -        </para> -    </refsect2> -    <refsect2 id="talloc_report_full"><title>void talloc_report_full(const void *<emphasis role="italic">ptr</emphasis>, FILE *<emphasis role="italic">f</emphasis>);</title> -        <para> -	  This provides a more detailed report than talloc_report().  It -	  will recursively print the entire tree of memory referenced by -	  the pointer. References in the tree are shown by giving the name -	  of the pointer that is referenced. -        </para> -        <para> -	  You can pass NULL for the pointer, in which case a report is -	  printed for the top level memory context, but only if -	  talloc_enable_leak_report() or talloc_enable_leak_report_full() -	  has been called. -        </para> -    </refsect2> -    <refsect2 id="talloc_report_depth_cb"> -     <funcsynopsis><funcprototype> -      <funcdef>void <function>talloc_report_depth_cb</function></funcdef> -      <paramdef><parameter>const void *ptr</parameter></paramdef> -      <paramdef><parameter>int depth</parameter></paramdef> -      <paramdef><parameter>int max_depth</parameter></paramdef> -      <paramdef><parameter>void (*callback)(const void *ptr, int depth, int max_depth, int is_ref, void *priv)</parameter></paramdef> -      <paramdef><parameter>void *priv</parameter></paramdef> -     </funcprototype></funcsynopsis> -        <para> -	  This provides a more flexible reports than talloc_report(). It -	  will recursively call the callback for the entire tree of memory -	  referenced by the pointer. References in the tree are passed with -	  <emphasis role="italic">is_ref = 1</emphasis> and the pointer that is referenced. -        </para> -        <para> -	  You can pass NULL for the pointer, in which case a report is -	  printed for the top level memory context, but only if -	  talloc_enable_leak_report() or talloc_enable_leak_report_full() -	  has been called. -        </para> -        <para> -	  The recursion is stopped when depth >= max_depth. -	  max_depth = -1 means only stop at leaf nodes. -        </para> -    </refsect2> -    <refsect2 id="talloc_report_depth_file"> -     <funcsynopsis><funcprototype> -      <funcdef>void <function>talloc_report_depth_file</function></funcdef> -      <paramdef><parameter>const void *ptr</parameter></paramdef> -      <paramdef><parameter>int depth</parameter></paramdef> -      <paramdef><parameter>int max_depth</parameter></paramdef> -      <paramdef><parameter>FILE *f</parameter></paramdef> -     </funcprototype></funcsynopsis> -        <para> -	  This provides a more flexible reports than talloc_report(). It -	  will let you specify the depth and max_depth. -        </para> -    </refsect2> -    <refsect2 id="talloc_enable_leak_report"><title>void talloc_enable_leak_report(void);</title> -        <para> -	  This enables calling of talloc_report(NULL, stderr) when the -	  program exits.  In Samba4 this is enabled by using the -	  --leak-report command line option. -        </para> -        <para> -	  For it to be useful, this function must be called before any -	  other talloc function as it establishes a "null context" that -	  acts as the top of the tree.	If you don't call this function -	  first then passing NULL to talloc_report() or -	  talloc_report_full() won't give you the full tree printout. -        </para> -        <para> -	  Here is a typical talloc report: -        </para> -        <screen format="linespecific">talloc report on 'null_context' (total 267 bytes in 15 blocks) -libcli/auth/spnego_parse.c:55  contains   31 bytes in   2 blocks -libcli/auth/spnego_parse.c:55  contains   31 bytes in   2 blocks -iconv(UTF8,CP850)              contains   42 bytes in   2 blocks -libcli/auth/spnego_parse.c:55  contains   31 bytes in   2 blocks -iconv(CP850,UTF8)              contains   42 bytes in   2 blocks -iconv(UTF8,UTF-16LE)           contains   45 bytes in   2 blocks -iconv(UTF-16LE,UTF8)           contains   45 bytes in   2 blocks -      </screen> -    </refsect2> -    <refsect2 id="talloc_enable_leak_report_full"><title>void talloc_enable_leak_report_full(void);</title> -        <para> -	  This enables calling of talloc_report_full(NULL, stderr) when the -	  program exits.  In Samba4 this is enabled by using the -	  --leak-report-full command line option. -        </para> -        <para> -	  For it to be useful, this function must be called before any -	  other talloc function as it establishes a "null context" that -	  acts as the top of the tree.	If you don't call this function -	  first then passing NULL to talloc_report() or -	  talloc_report_full() won't give you the full tree printout. -        </para> -        <para> -	  Here is a typical full report: -        </para> -        <screen format="linespecific">full talloc report on 'root' (total 18 bytes in 8 blocks) -p1               contains     18 bytes in   7 blocks (ref 0) -    r1               contains     13 bytes in   2 blocks (ref 0) -        reference to: p2 -    p2               contains      1 bytes in   1 blocks (ref 1) -    x3               contains      1 bytes in   1 blocks (ref 0) -    x2               contains      1 bytes in   1 blocks (ref 0) -    x1               contains      1 bytes in   1 blocks (ref 0) -      </screen> -    </refsect2> -    <refsect2><title>(<emphasis role="italic">type</emphasis> *)talloc_zero(const void *<emphasis role="italic">ctx</emphasis>, <emphasis role="italic">type</emphasis>);</title> -        <para> -	  The talloc_zero() macro is equivalent to: -        </para> -        <programlisting>ptr = talloc(ctx, type); -if (ptr) memset(ptr, 0, sizeof(type));</programlisting> -    </refsect2> -    <refsect2><title>void *talloc_zero_size(const void *<emphasis role="italic">ctx</emphasis>, size_t <emphasis role="italic">size</emphasis>)</title> -        <para> -	  The talloc_zero_size() function is useful when you don't have a -	  known type. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_memdup(const void *<emphasis role="italic">ctx</emphasis>, const void *<emphasis role="italic">p</emphasis>, size_t size);</title> -        <para> -	  The talloc_memdup() function is equivalent to: -        </para> -        <programlisting>ptr = talloc_size(ctx, size); -if (ptr) memcpy(ptr, p, size);</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_strdup(const void *<emphasis role="italic">ctx</emphasis>, const char *<emphasis role="italic">p</emphasis>);</title> -        <para> -	  The talloc_strdup() function is equivalent to: -        </para> -        <programlisting>ptr = talloc_size(ctx, strlen(p)+1); -if (ptr) memcpy(ptr, p, strlen(p)+1);</programlisting> -        <para> -	  This function sets the name of the new pointer to the passed -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_strndup(const void *<emphasis role="italic">t</emphasis>, const char *<emphasis role="italic">p</emphasis>, size_t <emphasis role="italic">n</emphasis>);</title> -        <para> -	  The talloc_strndup() function is the talloc equivalent of the C -	  library function strndup(3). -        </para> -        <para> -	  This function sets the name of the new pointer to the passed -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_append_string(const void *<emphasis role="italic">t</emphasis>, char *<emphasis role="italic">orig</emphasis>, const char *<emphasis role="italic">append</emphasis>);</title> -        <para> -	  The talloc_append_string() function appends the given formatted -	  string to the given string. -        </para> -        <para> -	  This function sets the name of the new pointer to the new -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_vasprintf(const void *<emphasis role="italic">t</emphasis>, const char *<emphasis role="italic">fmt</emphasis>, va_list <emphasis role="italic">ap</emphasis>);</title> -        <para> -	  The talloc_vasprintf() function is the talloc equivalent of the C -	  library function vasprintf(3). -        </para> -        <para> -	  This function sets the name of the new pointer to the new -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_asprintf(const void *<emphasis role="italic">t</emphasis>, const char *<emphasis role="italic">fmt</emphasis>, ...);</title> -        <para> -	  The talloc_asprintf() function is the talloc equivalent of the C -	  library function asprintf(3). -        </para> -        <para> -	  This function sets the name of the new pointer to the passed -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>char *talloc_asprintf_append(char *s, const char *fmt, ...);</title> -        <para> -	  The talloc_asprintf_append() function appends the given formatted -	  string to the given string. -        </para> -        <para> -	  This function sets the name of the new pointer to the new -	  string. This is equivalent to: -        </para> -        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting> -    </refsect2> -    <refsect2><title>(type *)talloc_array(const void *ctx, type, uint_t count);</title> -        <para> -	  The talloc_array() macro is equivalent to: -        </para> -        <programlisting>(type *)talloc_size(ctx, sizeof(type) * count);</programlisting> -        <para> -	  except that it provides integer overflow protection for the -	  multiply, returning NULL if the multiply overflows. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_array_size(const void *ctx, size_t size, uint_t count);</title> -        <para> -	  The talloc_array_size() function is useful when the type is not -	  known. It operates in the same way as talloc_array(), but takes a -	  size instead of a type. -        </para> -    </refsect2> -    <refsect2><title>(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, uint_t count);</title> -        <para> -	  The talloc_ptrtype() macro should be used when you have a pointer to an array -	  and want to allocate memory of an array to point at with this pointer. When compiling -	  with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_array_size() -	  and talloc_get_name() will return the current location in the source file. -	  and not the type. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size)</title> -        <para> -	  This is a non-macro version of talloc_realloc(), which is useful -	  as libraries sometimes want a realloc function pointer.  A -	  realloc(3) implementation encapsulates the functionality of -	  malloc(3), free(3) and realloc(3) in one call, which is why it is -	  useful to be able to pass around a single function pointer. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_autofree_context(void);</title> -        <para> -	  This is a handy utility function that returns a talloc context -	  which will be automatically freed on program exit.  This can be -	  used to reduce the noise in memory leak reports. -        </para> -    </refsect2> -    <refsect2><title>void *talloc_check_name(const void *ptr, const char *name);</title> -        <para> -	  This function checks if a pointer has the specified <emphasis -	  role="italic">name</emphasis>.  If it does then the pointer is -	  returned.  It it doesn't then NULL is returned. -        </para> -    </refsect2> -    <refsect2><title>(type *)talloc_get_type(const void *ptr, type);</title> -        <para> -	  This macro allows you to do type checking on talloc pointers.  It -	  is particularly useful for void* private pointers.  It is -	  equivalent to this: -        </para> -        <programlisting>(type *)talloc_check_name(ptr, #type)</programlisting> -    </refsect2> -    <refsect2><title>talloc_set_type(const void *ptr, type);</title> -        <para> -	  This macro allows you to force the name of a pointer to be a -	  particular <emphasis>type</emphasis>.  This can be -	  used in conjunction with talloc_get_type() to do type checking on -	  void* pointers. -        </para> -        <para> -	  It is equivalent to this: -        </para> -        <programlisting>talloc_set_name_const(ptr, #type)</programlisting> -    </refsect2> -  </refsect1> -  <refsect1><title>PERFORMANCE</title> -    <para> -      All the additional features of talloc(3) over malloc(3) do come at a -      price.  We have a simple performance test in Samba4 that measures -      talloc() versus malloc() performance, and it seems that talloc() is -      about 10% slower than malloc() on my x86 Debian Linux box.  For -      Samba, the great reduction in code complexity that we get by using -      talloc makes this worthwhile, especially as the total overhead of -      talloc/malloc in Samba is already quite small. -    </para> -  </refsect1> -  <refsect1><title>SEE ALSO</title> -    <para> -      malloc(3), strndup(3), vasprintf(3), asprintf(3),  -      <ulink url="http://talloc.samba.org/"/> -    </para> -  </refsect1> -  <refsect1><title>COPYRIGHT/LICENSE</title> -    <para> -      Copyright (C) Andrew Tridgell 2004 -    </para> -    <para> -      This program is free software; you can redistribute it and/or modify -      it under the terms of the GNU General Public License as published by -      the Free Software Foundation; either version 3 of the License, or (at -      your option) any later version. -    </para> -    <para> -      This program is distributed in the hope that it will be useful, but -      WITHOUT ANY WARRANTY; without even the implied warranty of -      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -      General Public License for more details. -    </para> -    <para> -      You should have received a copy of the GNU General Public License -      along with this program; if not, see http://www.gnu.org/licenses/. -    </para> -  </refsect1> -</refentry> diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c deleted file mode 100644 index 1f7e52439f..0000000000 --- a/source4/lib/talloc/talloc.c +++ /dev/null @@ -1,1732 +0,0 @@ -/*  -   Samba Unix SMB/CIFS implementation. - -   Samba trivial allocation library - new interface - -   NOTE: Please read talloc_guide.txt for full documentation - -   Copyright (C) Andrew Tridgell 2004 -   Copyright (C) Stefan Metzmacher 2006 -    -     ** NOTE! The following LGPL license applies to the talloc -     ** library. This does NOT imply that all of Samba is released -     ** under the LGPL -    -   This library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 3 of the License, or (at your option) any later version. - -   This library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with this library; if not, see <http://www.gnu.org/licenses/>. -*/ - -/* -  inspired by http://swapped.cc/halloc/ -*/ - -#ifdef _SAMBA_BUILD_ -#include "version.h" -#if (SAMBA_VERSION_MAJOR<4) -#include "includes.h" -/* This is to circumvent SAMBA3's paranoid malloc checker. Here in this file - * we trust ourselves... */ -#ifdef malloc -#undef malloc -#endif -#ifdef realloc -#undef realloc -#endif -#define _TALLOC_SAMBA3 -#endif /* (SAMBA_VERSION_MAJOR<4) */ -#endif /* _SAMBA_BUILD_ */ - -#ifndef _TALLOC_SAMBA3 -#include "replace.h" -#include "talloc.h" -#endif /* not _TALLOC_SAMBA3 */ - -/* use this to force every realloc to change the pointer, to stress test -   code that might not cope */ -#define ALWAYS_REALLOC 0 - - -#define MAX_TALLOC_SIZE 0x10000000 -#define TALLOC_MAGIC 0xe814ec70 -#define TALLOC_FLAG_FREE 0x01 -#define TALLOC_FLAG_LOOP 0x02 -#define TALLOC_FLAG_POOL 0x04		/* This is a talloc pool */ -#define TALLOC_FLAG_POOLMEM 0x08	/* This is allocated in a pool */ -#define TALLOC_MAGIC_REFERENCE ((const char *)1) - -/* by default we abort when given a bad pointer (such as when talloc_free() is called  -   on a pointer that came from malloc() */ -#ifndef TALLOC_ABORT -#define TALLOC_ABORT(reason) abort() -#endif - -#ifndef discard_const_p -#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T) -# define discard_const_p(type, ptr) ((type *)((intptr_t)(ptr))) -#else -# define discard_const_p(type, ptr) ((type *)(ptr)) -#endif -#endif - -/* these macros gain us a few percent of speed on gcc */ -#if (__GNUC__ >= 3) -/* the strange !! is to ensure that __builtin_expect() takes either 0 or 1 -   as its first argument */ -#ifndef likely -#define likely(x)   __builtin_expect(!!(x), 1) -#endif -#ifndef unlikely -#define unlikely(x) __builtin_expect(!!(x), 0) -#endif -#else -#ifndef likely -#define likely(x) (x) -#endif -#ifndef unlikely -#define unlikely(x) (x) -#endif -#endif - -/* this null_context is only used if talloc_enable_leak_report() or -   talloc_enable_leak_report_full() is called, otherwise it remains -   NULL -*/ -static void *null_context; -static void *autofree_context; - -struct talloc_reference_handle { -	struct talloc_reference_handle *next, *prev; -	void *ptr; -}; - -typedef int (*talloc_destructor_t)(void *); - -struct talloc_chunk { -	struct talloc_chunk *next, *prev; -	struct talloc_chunk *parent, *child; -	struct talloc_reference_handle *refs; -	talloc_destructor_t destructor; -	const char *name; -	size_t size; -	unsigned flags; - -	/* -	 * "pool" has dual use: -	 * -	 * For the talloc pool itself (i.e. TALLOC_FLAG_POOL is set), "pool" -	 * marks the end of the currently allocated area. -	 * -	 * For members of the pool (i.e. TALLOC_FLAG_POOLMEM is set), "pool" -	 * is a pointer to the struct talloc_chunk of the pool that it was -	 * allocated from. This way children can quickly find the pool to chew -	 * from. -	 */ -	void *pool; -}; - -/* 16 byte alignment seems to keep everyone happy */ -#define TC_HDR_SIZE ((sizeof(struct talloc_chunk)+15)&~15) -#define TC_PTR_FROM_CHUNK(tc) ((void *)(TC_HDR_SIZE + (char*)tc)) - -static void talloc_abort_double_free(void) -{ -	TALLOC_ABORT("Bad talloc magic value - double free");  -} - -static void talloc_abort_unknown_value(void) -{ -	TALLOC_ABORT("Bad talloc magic value - unknown value");  -} - -/* panic if we get a bad magic value */ -static inline struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr) -{ -	const char *pp = (const char *)ptr; -	struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, pp - TC_HDR_SIZE); -	if (unlikely((tc->flags & (TALLOC_FLAG_FREE | ~0xF)) != TALLOC_MAGIC)) {  -		if (tc->flags & TALLOC_FLAG_FREE) { -			talloc_abort_double_free(); -		} else { -			talloc_abort_unknown_value(); -		} -	} -	return tc; -} - -/* hook into the front of the list */ -#define _TLIST_ADD(list, p) \ -do { \ -        if (!(list)) { \ -		(list) = (p); \ -		(p)->next = (p)->prev = NULL; \ -	} else { \ -		(list)->prev = (p); \ -		(p)->next = (list); \ -		(p)->prev = NULL; \ -		(list) = (p); \ -	}\ -} while (0) - -/* remove an element from a list - element doesn't have to be in list. */ -#define _TLIST_REMOVE(list, p) \ -do { \ -	if ((p) == (list)) { \ -		(list) = (p)->next; \ -		if (list) (list)->prev = NULL; \ -	} else { \ -		if ((p)->prev) (p)->prev->next = (p)->next; \ -		if ((p)->next) (p)->next->prev = (p)->prev; \ -	} \ -	if ((p) && ((p) != (list))) (p)->next = (p)->prev = NULL; \ -} while (0) - - -/* -  return the parent chunk of a pointer -*/ -static inline struct talloc_chunk *talloc_parent_chunk(const void *ptr) -{ -	struct talloc_chunk *tc; - -	if (unlikely(ptr == NULL)) { -		return NULL; -	} - -	tc = talloc_chunk_from_ptr(ptr); -	while (tc->prev) tc=tc->prev; - -	return tc->parent; -} - -void *talloc_parent(const void *ptr) -{ -	struct talloc_chunk *tc = talloc_parent_chunk(ptr); -	return tc? TC_PTR_FROM_CHUNK(tc) : NULL; -} - -/* -  find parents name -*/ -const char *talloc_parent_name(const void *ptr) -{ -	struct talloc_chunk *tc = talloc_parent_chunk(ptr); -	return tc? tc->name : NULL; -} - -/* -  A pool carries an in-pool object count count in the first 16 bytes. -  bytes. This is done to support talloc_steal() to a parent outside of the -  pool. The count includes the pool itself, so a talloc_free() on a pool will -  only destroy the pool if the count has dropped to zero. A talloc_free() of a -  pool member will reduce the count, and eventually also call free(3) on the -  pool memory. - -  The object count is not put into "struct talloc_chunk" because it is only -  relevant for talloc pools and the alignment to 16 bytes would increase the -  memory footprint of each talloc chunk by those 16 bytes. -*/ - -#define TALLOC_POOL_HDR_SIZE 16 - -static unsigned int *talloc_pool_objectcount(struct talloc_chunk *tc) -{ -	return (unsigned int *)((char *)tc + sizeof(struct talloc_chunk)); -} - -/* -  Allocate from a pool -*/ - -static struct talloc_chunk *talloc_alloc_pool(struct talloc_chunk *parent, -					      size_t size) -{ -	struct talloc_chunk *pool_ctx = NULL; -	size_t space_left; -	struct talloc_chunk *result; -	size_t chunk_size; - -	if (parent == NULL) { -		return NULL; -	} - -	if (parent->flags & TALLOC_FLAG_POOL) { -		pool_ctx = parent; -	} -	else if (parent->flags & TALLOC_FLAG_POOLMEM) { -		pool_ctx = (struct talloc_chunk *)parent->pool; -	} - -	if (pool_ctx == NULL) { -		return NULL; -	} - -	space_left = ((char *)pool_ctx + TC_HDR_SIZE + pool_ctx->size) -		- ((char *)pool_ctx->pool); - -	/* -	 * Align size to 16 bytes -	 */ -	chunk_size = ((size + 15) & ~15); - -	if (space_left < chunk_size) { -		return NULL; -	} - -	result = (struct talloc_chunk *)pool_ctx->pool; - -#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED) -	VALGRIND_MAKE_MEM_UNDEFINED(result, size); -#endif - -	pool_ctx->pool = (void *)((char *)result + chunk_size); - -	result->flags = TALLOC_MAGIC | TALLOC_FLAG_POOLMEM; -	result->pool = pool_ctx; - -	*talloc_pool_objectcount(pool_ctx) += 1; - -	return result; -} - -/*  -   Allocate a bit of memory as a child of an existing pointer -*/ -static inline void *__talloc(const void *context, size_t size) -{ -	struct talloc_chunk *tc = NULL; - -	if (unlikely(context == NULL)) { -		context = null_context; -	} - -	if (unlikely(size >= MAX_TALLOC_SIZE)) { -		return NULL; -	} - -	if (context != NULL) { -		tc = talloc_alloc_pool(talloc_chunk_from_ptr(context), -				       TC_HDR_SIZE+size); -	} - -	if (tc == NULL) { -		tc = (struct talloc_chunk *)malloc(TC_HDR_SIZE+size); -		if (unlikely(tc == NULL)) return NULL; -		tc->flags = TALLOC_MAGIC; -		tc->pool  = NULL; -	} - -	tc->size = size; -	tc->destructor = NULL; -	tc->child = NULL; -	tc->name = NULL; -	tc->refs = NULL; - -	if (likely(context)) { -		struct talloc_chunk *parent = talloc_chunk_from_ptr(context); - -		if (parent->child) { -			parent->child->parent = NULL; -			tc->next = parent->child; -			tc->next->prev = tc; -		} else { -			tc->next = NULL; -		} -		tc->parent = parent; -		tc->prev = NULL; -		parent->child = tc; -	} else { -		tc->next = tc->prev = tc->parent = NULL; -	} - -	return TC_PTR_FROM_CHUNK(tc); -} - -/* - * Create a talloc pool - */ - -void *talloc_pool(const void *context, size_t size) -{ -	void *result = __talloc(context, size + TALLOC_POOL_HDR_SIZE); -	struct talloc_chunk *tc; - -	if (unlikely(result == NULL)) { -		return NULL; -	} - -	tc = talloc_chunk_from_ptr(result); - -	tc->flags |= TALLOC_FLAG_POOL; -	tc->pool = (char *)result + TALLOC_POOL_HDR_SIZE; - -	*talloc_pool_objectcount(tc) = 1; - -#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS) -	VALGRIND_MAKE_MEM_NOACCESS(tc->pool, size); -#endif - -	return result; -} - -/* -  setup a destructor to be called on free of a pointer -  the destructor should return 0 on success, or -1 on failure. -  if the destructor fails then the free is failed, and the memory can -  be continued to be used -*/ -void _talloc_set_destructor(const void *ptr, int (*destructor)(void *)) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	tc->destructor = destructor; -} - -/* -  increase the reference count on a piece of memory.  -*/ -int talloc_increase_ref_count(const void *ptr) -{ -	if (unlikely(!talloc_reference(null_context, ptr))) { -		return -1; -	} -	return 0; -} - -/* -  helper for talloc_reference() - -  this is referenced by a function pointer and should not be inline -*/ -static int talloc_reference_destructor(struct talloc_reference_handle *handle) -{ -	struct talloc_chunk *ptr_tc = talloc_chunk_from_ptr(handle->ptr); -	_TLIST_REMOVE(ptr_tc->refs, handle); -	return 0; -} - -/* -   more efficient way to add a name to a pointer - the name must point to a  -   true string constant -*/ -static inline void _talloc_set_name_const(const void *ptr, const char *name) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	tc->name = name; -} - -/* -  internal talloc_named_const() -*/ -static inline void *_talloc_named_const(const void *context, size_t size, const char *name) -{ -	void *ptr; - -	ptr = __talloc(context, size); -	if (unlikely(ptr == NULL)) { -		return NULL; -	} - -	_talloc_set_name_const(ptr, name); - -	return ptr; -} - -/* -  make a secondary reference to a pointer, hanging off the given context. -  the pointer remains valid until both the original caller and this given -  context are freed. -   -  the major use for this is when two different structures need to reference the  -  same underlying data, and you want to be able to free the two instances separately, -  and in either order -*/ -void *_talloc_reference(const void *context, const void *ptr) -{ -	struct talloc_chunk *tc; -	struct talloc_reference_handle *handle; -	if (unlikely(ptr == NULL)) return NULL; - -	tc = talloc_chunk_from_ptr(ptr); -	handle = (struct talloc_reference_handle *)_talloc_named_const(context, -						   sizeof(struct talloc_reference_handle), -						   TALLOC_MAGIC_REFERENCE); -	if (unlikely(handle == NULL)) return NULL; - -	/* note that we hang the destructor off the handle, not the -	   main context as that allows the caller to still setup their -	   own destructor on the context if they want to */ -	talloc_set_destructor(handle, talloc_reference_destructor); -	handle->ptr = discard_const_p(void, ptr); -	_TLIST_ADD(tc->refs, handle); -	return handle->ptr; -} - - -/*  -   internal talloc_free call -*/ -static inline int _talloc_free(void *ptr) -{ -	struct talloc_chunk *tc; - -	if (unlikely(ptr == NULL)) { -		return -1; -	} - -	tc = talloc_chunk_from_ptr(ptr); - -	if (unlikely(tc->refs)) { -		int is_child; -		/* check this is a reference from a child or grantchild -		 * back to it's parent or grantparent -		 * -		 * in that case we need to remove the reference and -		 * call another instance of talloc_free() on the current -		 * pointer. -		 */ -		is_child = talloc_is_parent(tc->refs, ptr); -		_talloc_free(tc->refs); -		if (is_child) { -			return _talloc_free(ptr); -		} -		return -1; -	} - -	if (unlikely(tc->flags & TALLOC_FLAG_LOOP)) { -		/* we have a free loop - stop looping */ -		return 0; -	} - -	if (unlikely(tc->destructor)) { -		talloc_destructor_t d = tc->destructor; -		if (d == (talloc_destructor_t)-1) { -			return -1; -		} -		tc->destructor = (talloc_destructor_t)-1; -		if (d(ptr) == -1) { -			tc->destructor = d; -			return -1; -		} -		tc->destructor = NULL; -	} - -	if (tc->parent) { -		_TLIST_REMOVE(tc->parent->child, tc); -		if (tc->parent->child) { -			tc->parent->child->parent = tc->parent; -		} -	} else { -		if (tc->prev) tc->prev->next = tc->next; -		if (tc->next) tc->next->prev = tc->prev; -	} - -	tc->flags |= TALLOC_FLAG_LOOP; - -	while (tc->child) { -		/* we need to work out who will own an abandoned child -		   if it cannot be freed. In priority order, the first -		   choice is owner of any remaining reference to this -		   pointer, the second choice is our parent, and the -		   final choice is the null context. */ -		void *child = TC_PTR_FROM_CHUNK(tc->child); -		const void *new_parent = null_context; -		if (unlikely(tc->child->refs)) { -			struct talloc_chunk *p = talloc_parent_chunk(tc->child->refs); -			if (p) new_parent = TC_PTR_FROM_CHUNK(p); -		} -		if (unlikely(_talloc_free(child) == -1)) { -			if (new_parent == null_context) { -				struct talloc_chunk *p = talloc_parent_chunk(ptr); -				if (p) new_parent = TC_PTR_FROM_CHUNK(p); -			} -			talloc_steal(new_parent, child); -		} -	} - -	tc->flags |= TALLOC_FLAG_FREE; - -	if (tc->flags & (TALLOC_FLAG_POOL|TALLOC_FLAG_POOLMEM)) { -		struct talloc_chunk *pool; -		unsigned int *pool_object_count; - -		pool = (tc->flags & TALLOC_FLAG_POOL) -			? tc : (struct talloc_chunk *)tc->pool; - -		pool_object_count = talloc_pool_objectcount(pool); - -		if (*pool_object_count == 0) { -			TALLOC_ABORT("Pool object count zero!"); -		} - -		*pool_object_count -= 1; - -		if (*pool_object_count == 0) { -			free(pool); -		} -	} -	else { -		free(tc); -	} -	return 0; -} - -/*  -   move a lump of memory from one talloc context to another return the -   ptr on success, or NULL if it could not be transferred. -   passing NULL as ptr will always return NULL with no side effects. -*/ -void *_talloc_steal(const void *new_ctx, const void *ptr) -{ -	struct talloc_chunk *tc, *new_tc; - -	if (unlikely(!ptr)) { -		return NULL; -	} - -	if (unlikely(new_ctx == NULL)) { -		new_ctx = null_context; -	} - -	tc = talloc_chunk_from_ptr(ptr); - -	if (unlikely(new_ctx == NULL)) { -		if (tc->parent) { -			_TLIST_REMOVE(tc->parent->child, tc); -			if (tc->parent->child) { -				tc->parent->child->parent = tc->parent; -			} -		} else { -			if (tc->prev) tc->prev->next = tc->next; -			if (tc->next) tc->next->prev = tc->prev; -		} -		 -		tc->parent = tc->next = tc->prev = NULL; -		return discard_const_p(void, ptr); -	} - -	new_tc = talloc_chunk_from_ptr(new_ctx); - -	if (unlikely(tc == new_tc || tc->parent == new_tc)) { -		return discard_const_p(void, ptr); -	} - -	if (tc->parent) { -		_TLIST_REMOVE(tc->parent->child, tc); -		if (tc->parent->child) { -			tc->parent->child->parent = tc->parent; -		} -	} else { -		if (tc->prev) tc->prev->next = tc->next; -		if (tc->next) tc->next->prev = tc->prev; -	} - -	tc->parent = new_tc; -	if (new_tc->child) new_tc->child->parent = NULL; -	_TLIST_ADD(new_tc->child, tc); - -	return discard_const_p(void, ptr); -} - - - -/* -  remove a secondary reference to a pointer. This undo's what -  talloc_reference() has done. The context and pointer arguments -  must match those given to a talloc_reference() -*/ -static inline int talloc_unreference(const void *context, const void *ptr) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	struct talloc_reference_handle *h; - -	if (unlikely(context == NULL)) { -		context = null_context; -	} - -	for (h=tc->refs;h;h=h->next) { -		struct talloc_chunk *p = talloc_parent_chunk(h); -		if (p == NULL) { -			if (context == NULL) break; -		} else if (TC_PTR_FROM_CHUNK(p) == context) { -			break; -		} -	} -	if (h == NULL) { -		return -1; -	} - -	return _talloc_free(h); -} - -/* -  remove a specific parent context from a pointer. This is a more -  controlled varient of talloc_free() -*/ -int talloc_unlink(const void *context, void *ptr) -{ -	struct talloc_chunk *tc_p, *new_p; -	void *new_parent; - -	if (ptr == NULL) { -		return -1; -	} - -	if (context == NULL) { -		context = null_context; -	} - -	if (talloc_unreference(context, ptr) == 0) { -		return 0; -	} - -	if (context == NULL) { -		if (talloc_parent_chunk(ptr) != NULL) { -			return -1; -		} -	} else { -		if (talloc_chunk_from_ptr(context) != talloc_parent_chunk(ptr)) { -			return -1; -		} -	} -	 -	tc_p = talloc_chunk_from_ptr(ptr); - -	if (tc_p->refs == NULL) { -		return _talloc_free(ptr); -	} - -	new_p = talloc_parent_chunk(tc_p->refs); -	if (new_p) { -		new_parent = TC_PTR_FROM_CHUNK(new_p); -	} else { -		new_parent = NULL; -	} - -	if (talloc_unreference(new_parent, ptr) != 0) { -		return -1; -	} - -	talloc_steal(new_parent, ptr); - -	return 0; -} - -/* -  add a name to an existing pointer - va_list version -*/ -static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); - -static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	tc->name = talloc_vasprintf(ptr, fmt, ap); -	if (likely(tc->name)) { -		_talloc_set_name_const(tc->name, ".name"); -	} -	return tc->name; -} - -/* -  add a name to an existing pointer -*/ -const char *talloc_set_name(const void *ptr, const char *fmt, ...) -{ -	const char *name; -	va_list ap; -	va_start(ap, fmt); -	name = talloc_set_name_v(ptr, fmt, ap); -	va_end(ap); -	return name; -} - - -/* -  create a named talloc pointer. Any talloc pointer can be named, and -  talloc_named() operates just like talloc() except that it allows you -  to name the pointer. -*/ -void *talloc_named(const void *context, size_t size, const char *fmt, ...) -{ -	va_list ap; -	void *ptr; -	const char *name; - -	ptr = __talloc(context, size); -	if (unlikely(ptr == NULL)) return NULL; - -	va_start(ap, fmt); -	name = talloc_set_name_v(ptr, fmt, ap); -	va_end(ap); - -	if (unlikely(name == NULL)) { -		_talloc_free(ptr); -		return NULL; -	} - -	return ptr; -} - -/* -  return the name of a talloc ptr, or "UNNAMED" -*/ -const char *talloc_get_name(const void *ptr) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	if (unlikely(tc->name == TALLOC_MAGIC_REFERENCE)) { -		return ".reference"; -	} -	if (likely(tc->name)) { -		return tc->name; -	} -	return "UNNAMED"; -} - - -/* -  check if a pointer has the given name. If it does, return the pointer, -  otherwise return NULL -*/ -void *talloc_check_name(const void *ptr, const char *name) -{ -	const char *pname; -	if (unlikely(ptr == NULL)) return NULL; -	pname = talloc_get_name(ptr); -	if (likely(pname == name || strcmp(pname, name) == 0)) { -		return discard_const_p(void, ptr); -	} -	return NULL; -} - - -/* -  this is for compatibility with older versions of talloc -*/ -void *talloc_init(const char *fmt, ...) -{ -	va_list ap; -	void *ptr; -	const char *name; - -	/* -	 * samba3 expects talloc_report_depth_cb(NULL, ...) -	 * reports all talloc'ed memory, so we need to enable -	 * null_tracking -	 */ -	talloc_enable_null_tracking(); - -	ptr = __talloc(NULL, 0); -	if (unlikely(ptr == NULL)) return NULL; - -	va_start(ap, fmt); -	name = talloc_set_name_v(ptr, fmt, ap); -	va_end(ap); - -	if (unlikely(name == NULL)) { -		_talloc_free(ptr); -		return NULL; -	} - -	return ptr; -} - -/* -  this is a replacement for the Samba3 talloc_destroy_pool functionality. It -  should probably not be used in new code. It's in here to keep the talloc -  code consistent across Samba 3 and 4. -*/ -void talloc_free_children(void *ptr) -{ -	struct talloc_chunk *tc; - -	if (unlikely(ptr == NULL)) { -		return; -	} - -	tc = talloc_chunk_from_ptr(ptr); - -	while (tc->child) { -		/* we need to work out who will own an abandoned child -		   if it cannot be freed. In priority order, the first -		   choice is owner of any remaining reference to this -		   pointer, the second choice is our parent, and the -		   final choice is the null context. */ -		void *child = TC_PTR_FROM_CHUNK(tc->child); -		const void *new_parent = null_context; -		if (unlikely(tc->child->refs)) { -			struct talloc_chunk *p = talloc_parent_chunk(tc->child->refs); -			if (p) new_parent = TC_PTR_FROM_CHUNK(p); -		} -		if (unlikely(_talloc_free(child) == -1)) { -			if (new_parent == null_context) { -				struct talloc_chunk *p = talloc_parent_chunk(ptr); -				if (p) new_parent = TC_PTR_FROM_CHUNK(p); -			} -			talloc_steal(new_parent, child); -		} -	} - -	if ((tc->flags & TALLOC_FLAG_POOL) -	    && (*talloc_pool_objectcount(tc) == 1)) { -		tc->pool = ((char *)tc + TC_HDR_SIZE + TALLOC_POOL_HDR_SIZE); -#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS) -		VALGRIND_MAKE_MEM_NOACCESS( -			tc->pool, tc->size - TALLOC_POOL_HDR_SIZE); -#endif -	} -} - -/*  -   Allocate a bit of memory as a child of an existing pointer -*/ -void *_talloc(const void *context, size_t size) -{ -	return __talloc(context, size); -} - -/* -  externally callable talloc_set_name_const() -*/ -void talloc_set_name_const(const void *ptr, const char *name) -{ -	_talloc_set_name_const(ptr, name); -} - -/* -  create a named talloc pointer. Any talloc pointer can be named, and -  talloc_named() operates just like talloc() except that it allows you -  to name the pointer. -*/ -void *talloc_named_const(const void *context, size_t size, const char *name) -{ -	return _talloc_named_const(context, size, name); -} - -/*  -   free a talloc pointer. This also frees all child pointers of this  -   pointer recursively - -   return 0 if the memory is actually freed, otherwise -1. The memory -   will not be freed if the ref_count is > 1 or the destructor (if -   any) returns non-zero -*/ -int talloc_free(void *ptr) -{ -	return _talloc_free(ptr); -} - - - -/* -  A talloc version of realloc. The context argument is only used if -  ptr is NULL -*/ -void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name) -{ -	struct talloc_chunk *tc; -	void *new_ptr; -	bool malloced = false; - -	/* size zero is equivalent to free() */ -	if (unlikely(size == 0)) { -		_talloc_free(ptr); -		return NULL; -	} - -	if (unlikely(size >= MAX_TALLOC_SIZE)) { -		return NULL; -	} - -	/* realloc(NULL) is equivalent to malloc() */ -	if (ptr == NULL) { -		return _talloc_named_const(context, size, name); -	} - -	tc = talloc_chunk_from_ptr(ptr); - -	/* don't allow realloc on referenced pointers */ -	if (unlikely(tc->refs)) { -		return NULL; -	} - -	/* don't shrink if we have less than 1k to gain */ -	if ((size < tc->size) && ((tc->size - size) < 1024)) { -		tc->size = size; -		return ptr; -	} - -	/* by resetting magic we catch users of the old memory */ -	tc->flags |= TALLOC_FLAG_FREE; - -#if ALWAYS_REALLOC -	new_ptr = malloc(size + TC_HDR_SIZE); -	if (new_ptr) { -		memcpy(new_ptr, tc, tc->size + TC_HDR_SIZE); -		free(tc); -	} -#else -	if (tc->flags & TALLOC_FLAG_POOLMEM) { - -		new_ptr = talloc_alloc_pool(tc, size + TC_HDR_SIZE); -		*talloc_pool_objectcount((struct talloc_chunk *) -					 (tc->pool)) -= 1; - -		if (new_ptr == NULL) { -			new_ptr = malloc(TC_HDR_SIZE+size); -			malloced = true; -		} - -		if (new_ptr) { -			memcpy(new_ptr, tc, MIN(tc->size,size) + TC_HDR_SIZE); -		} -	} -	else { -		new_ptr = realloc(tc, size + TC_HDR_SIZE); -	} -#endif -	if (unlikely(!new_ptr)) {	 -		tc->flags &= ~TALLOC_FLAG_FREE;  -		return NULL;  -	} - -	tc = (struct talloc_chunk *)new_ptr; -	tc->flags &= ~TALLOC_FLAG_FREE; -	if (malloced) { -		tc->flags &= ~TALLOC_FLAG_POOLMEM; -	} -	if (tc->parent) { -		tc->parent->child = tc; -	} -	if (tc->child) { -		tc->child->parent = tc; -	} - -	if (tc->prev) { -		tc->prev->next = tc; -	} -	if (tc->next) { -		tc->next->prev = tc; -	} - -	tc->size = size; -	_talloc_set_name_const(TC_PTR_FROM_CHUNK(tc), name); - -	return TC_PTR_FROM_CHUNK(tc); -} - -/* -  a wrapper around talloc_steal() for situations where you are moving a pointer -  between two structures, and want the old pointer to be set to NULL -*/ -void *_talloc_move(const void *new_ctx, const void *_pptr) -{ -	const void **pptr = discard_const_p(const void *,_pptr); -	void *ret = _talloc_steal(new_ctx, *pptr); -	(*pptr) = NULL; -	return ret; -} - -/* -  return the total size of a talloc pool (subtree) -*/ -size_t talloc_total_size(const void *ptr) -{ -	size_t total = 0; -	struct talloc_chunk *c, *tc; - -	if (ptr == NULL) { -		ptr = null_context; -	} -	if (ptr == NULL) { -		return 0; -	} - -	tc = talloc_chunk_from_ptr(ptr); - -	if (tc->flags & TALLOC_FLAG_LOOP) { -		return 0; -	} - -	tc->flags |= TALLOC_FLAG_LOOP; - -	total = tc->size; -	for (c=tc->child;c;c=c->next) { -		total += talloc_total_size(TC_PTR_FROM_CHUNK(c)); -	} - -	tc->flags &= ~TALLOC_FLAG_LOOP; - -	return total; -} - -/* -  return the total number of blocks in a talloc pool (subtree) -*/ -size_t talloc_total_blocks(const void *ptr) -{ -	size_t total = 0; -	struct talloc_chunk *c, *tc = talloc_chunk_from_ptr(ptr); - -	if (tc->flags & TALLOC_FLAG_LOOP) { -		return 0; -	} - -	tc->flags |= TALLOC_FLAG_LOOP; - -	total++; -	for (c=tc->child;c;c=c->next) { -		total += talloc_total_blocks(TC_PTR_FROM_CHUNK(c)); -	} - -	tc->flags &= ~TALLOC_FLAG_LOOP; - -	return total; -} - -/* -  return the number of external references to a pointer -*/ -size_t talloc_reference_count(const void *ptr) -{ -	struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); -	struct talloc_reference_handle *h; -	size_t ret = 0; - -	for (h=tc->refs;h;h=h->next) { -		ret++; -	} -	return ret; -} - -/* -  report on memory usage by all children of a pointer, giving a full tree view -*/ -void talloc_report_depth_cb(const void *ptr, int depth, int max_depth, -			    void (*callback)(const void *ptr, -			  		     int depth, int max_depth, -					     int is_ref, -					     void *private_data), -			    void *private_data) -{ -	struct talloc_chunk *c, *tc; - -	if (ptr == NULL) { -		ptr = null_context; -	} -	if (ptr == NULL) return; - -	tc = talloc_chunk_from_ptr(ptr); - -	if (tc->flags & TALLOC_FLAG_LOOP) { -		return; -	} - -	callback(ptr, depth, max_depth, 0, private_data); - -	if (max_depth >= 0 && depth >= max_depth) { -		return; -	} - -	tc->flags |= TALLOC_FLAG_LOOP; -	for (c=tc->child;c;c=c->next) { -		if (c->name == TALLOC_MAGIC_REFERENCE) { -			struct talloc_reference_handle *h = (struct talloc_reference_handle *)TC_PTR_FROM_CHUNK(c); -			callback(h->ptr, depth + 1, max_depth, 1, private_data); -		} else { -			talloc_report_depth_cb(TC_PTR_FROM_CHUNK(c), depth + 1, max_depth, callback, private_data); -		} -	} -	tc->flags &= ~TALLOC_FLAG_LOOP; -} - -static void talloc_report_depth_FILE_helper(const void *ptr, int depth, int max_depth, int is_ref, void *_f) -{ -	const char *name = talloc_get_name(ptr); -	FILE *f = (FILE *)_f; - -	if (is_ref) { -		fprintf(f, "%*sreference to: %s\n", depth*4, "", name); -		return; -	} - -	if (depth == 0) { -		fprintf(f,"%stalloc report on '%s' (total %6lu bytes in %3lu blocks)\n",  -			(max_depth < 0 ? "full " :""), name, -			(unsigned long)talloc_total_size(ptr), -			(unsigned long)talloc_total_blocks(ptr)); -		return; -	} - -	fprintf(f, "%*s%-30s contains %6lu bytes in %3lu blocks (ref %d) %p\n",  -		depth*4, "", -		name, -		(unsigned long)talloc_total_size(ptr), -		(unsigned long)talloc_total_blocks(ptr), -		(int)talloc_reference_count(ptr), ptr); - -#if 0 -	fprintf(f, "content: "); -	if (talloc_total_size(ptr)) { -		int tot = talloc_total_size(ptr); -		int i; - -		for (i = 0; i < tot; i++) { -			if ((((char *)ptr)[i] > 31) && (((char *)ptr)[i] < 126)) { -				fprintf(f, "%c", ((char *)ptr)[i]); -			} else { -				fprintf(f, "~%02x", ((char *)ptr)[i]); -			} -		} -	} -	fprintf(f, "\n"); -#endif -} - -/* -  report on memory usage by all children of a pointer, giving a full tree view -*/ -void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f) -{ -	talloc_report_depth_cb(ptr, depth, max_depth, talloc_report_depth_FILE_helper, f); -	fflush(f); -} - -/* -  report on memory usage by all children of a pointer, giving a full tree view -*/ -void talloc_report_full(const void *ptr, FILE *f) -{ -	talloc_report_depth_file(ptr, 0, -1, f); -} - -/* -  report on memory usage by all children of a pointer -*/ -void talloc_report(const void *ptr, FILE *f) -{ -	talloc_report_depth_file(ptr, 0, 1, f); -} - -/* -  report on any memory hanging off the null context -*/ -static void talloc_report_null(void) -{ -	if (talloc_total_size(null_context) != 0) { -		talloc_report(null_context, stderr); -	} -} - -/* -  report on any memory hanging off the null context -*/ -static void talloc_report_null_full(void) -{ -	if (talloc_total_size(null_context) != 0) { -		talloc_report_full(null_context, stderr); -	} -} - -/* -  enable tracking of the NULL context -*/ -void talloc_enable_null_tracking(void) -{ -	if (null_context == NULL) { -		null_context = _talloc_named_const(NULL, 0, "null_context"); -	} -} - -/* -  disable tracking of the NULL context -*/ -void talloc_disable_null_tracking(void) -{ -	_talloc_free(null_context); -	null_context = NULL; -} - -/* -  enable leak reporting on exit -*/ -void talloc_enable_leak_report(void) -{ -	talloc_enable_null_tracking(); -	atexit(talloc_report_null); -} - -/* -  enable full leak reporting on exit -*/ -void talloc_enable_leak_report_full(void) -{ -	talloc_enable_null_tracking(); -	atexit(talloc_report_null_full); -} - -/*  -   talloc and zero memory.  -*/ -void *_talloc_zero(const void *ctx, size_t size, const char *name) -{ -	void *p = _talloc_named_const(ctx, size, name); - -	if (p) { -		memset(p, '\0', size); -	} - -	return p; -} - -/* -  memdup with a talloc.  -*/ -void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name) -{ -	void *newp = _talloc_named_const(t, size, name); - -	if (likely(newp)) { -		memcpy(newp, p, size); -	} - -	return newp; -} - -static inline char *__talloc_strlendup(const void *t, const char *p, size_t len) -{ -	char *ret; - -	ret = (char *)__talloc(t, len + 1); -	if (unlikely(!ret)) return NULL; - -	memcpy(ret, p, len); -	ret[len] = 0; - -	_talloc_set_name_const(ret, ret); -	return ret; -} - -/* -  strdup with a talloc -*/ -char *talloc_strdup(const void *t, const char *p) -{ -	if (unlikely(!p)) return NULL; -	return __talloc_strlendup(t, p, strlen(p)); -} - -/* -  strndup with a talloc -*/ -char *talloc_strndup(const void *t, const char *p, size_t n) -{ -	if (unlikely(!p)) return NULL; -	return __talloc_strlendup(t, p, strnlen(p, n)); -} - -static inline char *__talloc_strlendup_append(char *s, size_t slen, -					      const char *a, size_t alen) -{ -	char *ret; - -	ret = talloc_realloc(NULL, s, char, slen + alen + 1); -	if (unlikely(!ret)) return NULL; - -	/* append the string and the trailing \0 */ -	memcpy(&ret[slen], a, alen); -	ret[slen+alen] = 0; - -	_talloc_set_name_const(ret, ret); -	return ret; -} - -/* - * Appends at the end of the string. - */ -char *talloc_strdup_append(char *s, const char *a) -{ -	if (unlikely(!s)) { -		return talloc_strdup(NULL, a); -	} - -	if (unlikely(!a)) { -		return s; -	} - -	return __talloc_strlendup_append(s, strlen(s), a, strlen(a)); -} - -/* - * Appends at the end of the talloc'ed buffer, - * not the end of the string. - */ -char *talloc_strdup_append_buffer(char *s, const char *a) -{ -	size_t slen; - -	if (unlikely(!s)) { -		return talloc_strdup(NULL, a); -	} - -	if (unlikely(!a)) { -		return s; -	} - -	slen = talloc_get_size(s); -	if (likely(slen > 0)) { -		slen--; -	} - -	return __talloc_strlendup_append(s, slen, a, strlen(a)); -} - -/* - * Appends at the end of the string. - */ -char *talloc_strndup_append(char *s, const char *a, size_t n) -{ -	if (unlikely(!s)) { -		return talloc_strdup(NULL, a); -	} - -	if (unlikely(!a)) { -		return s; -	} - -	return __talloc_strlendup_append(s, strlen(s), a, strnlen(a, n)); -} - -/* - * Appends at the end of the talloc'ed buffer, - * not the end of the string. - */ -char *talloc_strndup_append_buffer(char *s, const char *a, size_t n) -{ -	size_t slen; - -	if (unlikely(!s)) { -		return talloc_strdup(NULL, a); -	} - -	if (unlikely(!a)) { -		return s; -	} - -	slen = talloc_get_size(s); -	if (likely(slen > 0)) { -		slen--; -	} - -	return __talloc_strlendup_append(s, slen, a, strnlen(a, n)); -} - -#ifndef HAVE_VA_COPY -#ifdef HAVE___VA_COPY -#define va_copy(dest, src) __va_copy(dest, src) -#else -#define va_copy(dest, src) (dest) = (src) -#endif -#endif - -char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) -{ -	int len; -	char *ret; -	va_list ap2; -	char c; - -	/* this call looks strange, but it makes it work on older solaris boxes */ -	va_copy(ap2, ap); -	len = vsnprintf(&c, 1, fmt, ap2); -	va_end(ap2); -	if (unlikely(len < 0)) { -		return NULL; -	} - -	ret = (char *)__talloc(t, len+1); -	if (unlikely(!ret)) return NULL; - -	va_copy(ap2, ap); -	vsnprintf(ret, len+1, fmt, ap2); -	va_end(ap2); - -	_talloc_set_name_const(ret, ret); -	return ret; -} - - -/* -  Perform string formatting, and return a pointer to newly allocated -  memory holding the result, inside a memory pool. - */ -char *talloc_asprintf(const void *t, const char *fmt, ...) -{ -	va_list ap; -	char *ret; - -	va_start(ap, fmt); -	ret = talloc_vasprintf(t, fmt, ap); -	va_end(ap); -	return ret; -} - -static inline char *__talloc_vaslenprintf_append(char *s, size_t slen, -						 const char *fmt, va_list ap) -						 PRINTF_ATTRIBUTE(3,0); - -static inline char *__talloc_vaslenprintf_append(char *s, size_t slen, -						 const char *fmt, va_list ap) -{ -	ssize_t alen; -	va_list ap2; -	char c; - -	va_copy(ap2, ap); -	alen = vsnprintf(&c, 1, fmt, ap2); -	va_end(ap2); - -	if (alen <= 0) { -		/* Either the vsnprintf failed or the format resulted in -		 * no characters being formatted. In the former case, we -		 * ought to return NULL, in the latter we ought to return -		 * the original string. Most current callers of this -		 * function expect it to never return NULL. -		 */ -		return s; -	} - -	s = talloc_realloc(NULL, s, char, slen + alen + 1); -	if (!s) return NULL; - -	va_copy(ap2, ap); -	vsnprintf(s + slen, alen + 1, fmt, ap2); -	va_end(ap2); - -	_talloc_set_name_const(s, s); -	return s; -} - -/** - * Realloc @p s to append the formatted result of @p fmt and @p ap, - * and return @p s, which may have moved.  Good for gradually - * accumulating output into a string buffer. Appends at the end - * of the string. - **/ -char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) -{ -	if (unlikely(!s)) { -		return talloc_vasprintf(NULL, fmt, ap); -	} - -	return __talloc_vaslenprintf_append(s, strlen(s), fmt, ap); -} - -/** - * Realloc @p s to append the formatted result of @p fmt and @p ap, - * and return @p s, which may have moved. Always appends at the - * end of the talloc'ed buffer, not the end of the string. - **/ -char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) -{ -	size_t slen; - -	if (unlikely(!s)) { -		return talloc_vasprintf(NULL, fmt, ap); -	} - -	slen = talloc_get_size(s); -	if (likely(slen > 0)) { -		slen--; -	} - -	return __talloc_vaslenprintf_append(s, slen, fmt, ap); -} - -/* -  Realloc @p s to append the formatted result of @p fmt and return @p -  s, which may have moved.  Good for gradually accumulating output -  into a string buffer. - */ -char *talloc_asprintf_append(char *s, const char *fmt, ...) -{ -	va_list ap; - -	va_start(ap, fmt); -	s = talloc_vasprintf_append(s, fmt, ap); -	va_end(ap); -	return s; -} - -/* -  Realloc @p s to append the formatted result of @p fmt and return @p -  s, which may have moved.  Good for gradually accumulating output -  into a buffer. - */ -char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) -{ -	va_list ap; - -	va_start(ap, fmt); -	s = talloc_vasprintf_append_buffer(s, fmt, ap); -	va_end(ap); -	return s; -} - -/* -  alloc an array, checking for integer overflow in the array size -*/ -void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name) -{ -	if (count >= MAX_TALLOC_SIZE/el_size) { -		return NULL; -	} -	return _talloc_named_const(ctx, el_size * count, name); -} - -/* -  alloc an zero array, checking for integer overflow in the array size -*/ -void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name) -{ -	if (count >= MAX_TALLOC_SIZE/el_size) { -		return NULL; -	} -	return _talloc_zero(ctx, el_size * count, name); -} - -/* -  realloc an array, checking for integer overflow in the array size -*/ -void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name) -{ -	if (count >= MAX_TALLOC_SIZE/el_size) { -		return NULL; -	} -	return _talloc_realloc(ctx, ptr, el_size * count, name); -} - -/* -  a function version of talloc_realloc(), so it can be passed as a function pointer -  to libraries that want a realloc function (a realloc function encapsulates -  all the basic capabilities of an allocation library, which is why this is useful) -*/ -void *talloc_realloc_fn(const void *context, void *ptr, size_t size) -{ -	return _talloc_realloc(context, ptr, size, NULL); -} - - -static int talloc_autofree_destructor(void *ptr) -{ -	autofree_context = NULL; -	return 0; -} - -static void talloc_autofree(void) -{ -	_talloc_free(autofree_context); -} - -/* -  return a context which will be auto-freed on exit -  this is useful for reducing the noise in leak reports -*/ -void *talloc_autofree_context(void) -{ -	if (autofree_context == NULL) { -		autofree_context = _talloc_named_const(NULL, 0, "autofree_context"); -		talloc_set_destructor(autofree_context, talloc_autofree_destructor); -		atexit(talloc_autofree); -	} -	return autofree_context; -} - -size_t talloc_get_size(const void *context) -{ -	struct talloc_chunk *tc; - -	if (context == NULL) -		return 0; - -	tc = talloc_chunk_from_ptr(context); - -	return tc->size; -} - -/* -  find a parent of this context that has the given name, if any -*/ -void *talloc_find_parent_byname(const void *context, const char *name) -{ -	struct talloc_chunk *tc; - -	if (context == NULL) { -		return NULL; -	} - -	tc = talloc_chunk_from_ptr(context); -	while (tc) { -		if (tc->name && strcmp(tc->name, name) == 0) { -			return TC_PTR_FROM_CHUNK(tc); -		} -		while (tc && tc->prev) tc = tc->prev; -		if (tc) { -			tc = tc->parent; -		} -	} -	return NULL; -} - -/* -  show the parentage of a context -*/ -void talloc_show_parents(const void *context, FILE *file) -{ -	struct talloc_chunk *tc; - -	if (context == NULL) { -		fprintf(file, "talloc no parents for NULL\n"); -		return; -	} - -	tc = talloc_chunk_from_ptr(context); -	fprintf(file, "talloc parents of '%s'\n", talloc_get_name(context)); -	while (tc) { -		fprintf(file, "\t'%s'\n", talloc_get_name(TC_PTR_FROM_CHUNK(tc))); -		while (tc && tc->prev) tc = tc->prev; -		if (tc) { -			tc = tc->parent; -		} -	} -	fflush(file); -} - -/* -  return 1 if ptr is a parent of context -*/ -int talloc_is_parent(const void *context, const void *ptr) -{ -	struct talloc_chunk *tc; - -	if (context == NULL) { -		return 0; -	} - -	tc = talloc_chunk_from_ptr(context); -	while (tc) { -		if (TC_PTR_FROM_CHUNK(tc) == ptr) return 1; -		while (tc && tc->prev) tc = tc->prev; -		if (tc) { -			tc = tc->parent; -		} -	} -	return 0; -} diff --git a/source4/lib/talloc/talloc.h b/source4/lib/talloc/talloc.h deleted file mode 100644 index 5431971655..0000000000 --- a/source4/lib/talloc/talloc.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef _TALLOC_H_ -#define _TALLOC_H_ -/*  -   Unix SMB/CIFS implementation. -   Samba temporary memory allocation functions - -   Copyright (C) Andrew Tridgell 2004-2005 -   Copyright (C) Stefan Metzmacher 2006 -    -     ** NOTE! The following LGPL license applies to the talloc -     ** library. This does NOT imply that all of Samba is released -     ** under the LGPL -    -   This library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 3 of the License, or (at your option) any later version. - -   This library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with this library; if not, see <http://www.gnu.org/licenses/>. -*/ - -#include <stdlib.h> -#include <stdio.h> -#include <stdarg.h> - -/* this is only needed for compatibility with the old talloc */ -typedef void TALLOC_CTX; - -/* -  this uses a little trick to allow __LINE__ to be stringified -*/ -#ifndef __location__ -#define __TALLOC_STRING_LINE1__(s)    #s -#define __TALLOC_STRING_LINE2__(s)   __TALLOC_STRING_LINE1__(s) -#define __TALLOC_STRING_LINE3__  __TALLOC_STRING_LINE2__(__LINE__) -#define __location__ __FILE__ ":" __TALLOC_STRING_LINE3__ -#endif - -#ifndef TALLOC_DEPRECATED -#define TALLOC_DEPRECATED 0 -#endif - -#ifndef PRINTF_ATTRIBUTE -#if (__GNUC__ >= 3) -/** Use gcc attribute to check printf fns.  a1 is the 1-based index of - * the parameter containing the format, and a2 the index of the first - * argument. Note that some gcc 2.x versions don't handle this - * properly **/ -#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2))) -#else -#define PRINTF_ATTRIBUTE(a1, a2) -#endif -#endif - -/* try to make talloc_set_destructor() and talloc_steal() type safe, -   if we have a recent gcc */ -#if (__GNUC__ >= 3) -#define _TALLOC_TYPEOF(ptr) __typeof__(ptr) -#define talloc_set_destructor(ptr, function)				      \ -	do {								      \ -		int (*_talloc_destructor_fn)(_TALLOC_TYPEOF(ptr)) = (function);	      \ -		_talloc_set_destructor((ptr), (int (*)(void *))_talloc_destructor_fn); \ -	} while(0) -/* this extremely strange macro is to avoid some braindamaged warning -   stupidity in gcc 4.1.x */ -#define talloc_steal(ctx, ptr) ({ _TALLOC_TYPEOF(ptr) __talloc_steal_ret = (_TALLOC_TYPEOF(ptr))_talloc_steal((ctx),(ptr)); __talloc_steal_ret; }) -#else -#define talloc_set_destructor(ptr, function) \ -	_talloc_set_destructor((ptr), (int (*)(void *))(function)) -#define _TALLOC_TYPEOF(ptr) void * -#define talloc_steal(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_steal((ctx),(ptr)) -#endif - -#define talloc_reference(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_reference((ctx),(ptr)) -#define talloc_move(ctx, ptr) (_TALLOC_TYPEOF(*(ptr)))_talloc_move((ctx),(void *)(ptr)) - -/* useful macros for creating type checked pointers */ -#define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type) -#define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__) -#define talloc_ptrtype(ctx, ptr) (_TALLOC_TYPEOF(ptr))talloc_size(ctx, sizeof(*(ptr))) - -#define talloc_new(ctx) talloc_named_const(ctx, 0, "talloc_new: " __location__) - -#define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type) -#define talloc_zero_size(ctx, size) _talloc_zero(ctx, size, __location__) - -#define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type) -#define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type) -#define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__) -#define talloc_array_ptrtype(ctx, ptr, count) (_TALLOC_TYPEOF(ptr))talloc_array_size(ctx, sizeof(*(ptr)), count) - -#define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, #type) -#define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__) - -#define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__) - -#define talloc_set_type(ptr, type) talloc_set_name_const(ptr, #type) -#define talloc_get_type(ptr, type) (type *)talloc_check_name(ptr, #type) - -#define talloc_find_parent_bytype(ptr, type) (type *)talloc_find_parent_byname(ptr, #type) - -#if TALLOC_DEPRECATED -#define talloc_zero_p(ctx, type) talloc_zero(ctx, type) -#define talloc_p(ctx, type) talloc(ctx, type) -#define talloc_array_p(ctx, type, count) talloc_array(ctx, type, count) -#define talloc_realloc_p(ctx, p, type, count) talloc_realloc(ctx, p, type, count) -#define talloc_destroy(ctx) talloc_free(ctx) -#define talloc_append_string(c, s, a) (s?talloc_strdup_append(s,a):talloc_strdup(c, a)) -#endif - -/* The following definitions come from talloc.c  */ -void *_talloc(const void *context, size_t size); -void *talloc_pool(const void *context, size_t size); -void _talloc_set_destructor(const void *ptr, int (*destructor)(void *)); -int talloc_increase_ref_count(const void *ptr); -size_t talloc_reference_count(const void *ptr); -void *_talloc_reference(const void *context, const void *ptr); -int talloc_unlink(const void *context, void *ptr); -const char *talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); -void talloc_set_name_const(const void *ptr, const char *name); -void *talloc_named(const void *context, size_t size,  -		   const char *fmt, ...) PRINTF_ATTRIBUTE(3,4); -void *talloc_named_const(const void *context, size_t size, const char *name); -const char *talloc_get_name(const void *ptr); -void *talloc_check_name(const void *ptr, const char *name); -void *talloc_parent(const void *ptr); -const char *talloc_parent_name(const void *ptr); -void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2); -int talloc_free(void *ptr); -void talloc_free_children(void *ptr); -void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name); -void *_talloc_steal(const void *new_ctx, const void *ptr); -void *_talloc_move(const void *new_ctx, const void *pptr); -size_t talloc_total_size(const void *ptr); -size_t talloc_total_blocks(const void *ptr); -void talloc_report_depth_cb(const void *ptr, int depth, int max_depth, -			    void (*callback)(const void *ptr, -			  		     int depth, int max_depth, -					     int is_ref, -					     void *private_data), -			    void *private_data); -void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f); -void talloc_report_full(const void *ptr, FILE *f); -void talloc_report(const void *ptr, FILE *f); -void talloc_enable_null_tracking(void); -void talloc_disable_null_tracking(void); -void talloc_enable_leak_report(void); -void talloc_enable_leak_report_full(void); -void *_talloc_zero(const void *ctx, size_t size, const char *name); -void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name); -void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name); -void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name); -void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name); -void *talloc_realloc_fn(const void *context, void *ptr, size_t size); -void *talloc_autofree_context(void); -size_t talloc_get_size(const void *ctx); -void *talloc_find_parent_byname(const void *ctx, const char *name); -void talloc_show_parents(const void *context, FILE *file); -int talloc_is_parent(const void *context, const void *ptr); - -char *talloc_strdup(const void *t, const char *p); -char *talloc_strdup_append(char *s, const char *a); -char *talloc_strdup_append_buffer(char *s, const char *a); - -char *talloc_strndup(const void *t, const char *p, size_t n); -char *talloc_strndup_append(char *s, const char *a, size_t n); -char *talloc_strndup_append_buffer(char *s, const char *a, size_t n); - -char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); -char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); -char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); - -char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); -char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); -char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); - -#endif diff --git a/source4/lib/talloc/talloc.i b/source4/lib/talloc/talloc.i deleted file mode 100644 index a9afb97ed7..0000000000 --- a/source4/lib/talloc/talloc.i +++ /dev/null @@ -1,31 +0,0 @@ -/*  -   Unix SMB/CIFS implementation. -   Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007 -    -   This program is free software; you can redistribute it and/or modify -   it under the terms of the GNU General Public License as published by -   the Free Software Foundation; either version 3 of the License, or -   (at your option) any later version. -    -   This program is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. -    -   You should have received a copy of the GNU General Public License -   along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - -/* Don't expose talloc contexts in Python code. Python does reference  -   counting for us, so just create a new top-level talloc context. - */ -%typemap(in, numinputs=0, noblock=1) TALLOC_CTX * { -    $1 = NULL; -} - -%define %talloctype(TYPE) -%nodefaultctor TYPE; -%extend TYPE { -    ~TYPE() { talloc_free($self); } -} -%enddef diff --git a/source4/lib/talloc/talloc.mk b/source4/lib/talloc/talloc.mk deleted file mode 100644 index e1fe88c84b..0000000000 --- a/source4/lib/talloc/talloc.mk +++ /dev/null @@ -1,37 +0,0 @@ -TALLOC_OBJ = $(tallocdir)/talloc.o  - -TALLOC_SOLIB = libtalloc.$(SHLIBEXT).$(PACKAGE_VERSION) -TALLOC_SONAME = libtalloc.$(SHLIBEXT).1 - -all:: libtalloc.a $(TALLOC_SOLIB) testsuite - -testsuite:: $(LIBOBJ) testsuite.o -	$(CC) $(CFLAGS) -o testsuite testsuite.o $(LIBOBJ) $(LIBS) - -libtalloc.a: $(LIBOBJ) -	ar -rv $@ $(LIBOBJ) -	@-ranlib $@ - -install:: all  -	${INSTALLCMD} -d $(DESTDIR)$(libdir) -	${INSTALLCMD} -d $(DESTDIR)$(libdir)/pkgconfig -	${INSTALLCMD} -m 755 libtalloc.a $(DESTDIR)$(libdir) -	${INSTALLCMD} -m 755 $(TALLOC_SOLIB) $(DESTDIR)$(libdir) -	${INSTALLCMD} -d $(DESTDIR)${includedir} -	${INSTALLCMD} -m 644 $(srcdir)/talloc.h $(DESTDIR)$(includedir) -	${INSTALLCMD} -m 644 talloc.pc $(DESTDIR)$(libdir)/pkgconfig -	if [ -f talloc.3 ];then ${INSTALLCMD} -d $(DESTDIR)$(mandir)/man3; fi -	if [ -f talloc.3 ];then ${INSTALLCMD} -m 644 talloc.3 $(DESTDIR)$(mandir)/man3; fi -	which swig >/dev/null 2>&1 && ${INSTALLCMD} -d $(DESTDIR)`swig -swiglib` || true -	which swig >/dev/null 2>&1 && ${INSTALLCMD} -m 644 talloc.i $(DESTDIR)`swig -swiglib` || true - -doc:: talloc.3 talloc.3.html - -clean:: -	rm -f *~ $(LIBOBJ) $(TALLOC_SOLIB) libtalloc.a testsuite testsuite.o *.gc?? talloc.3 talloc.3.html - -test:: testsuite -	./testsuite - -gcov:: -	gcov talloc.c diff --git a/source4/lib/talloc/talloc.pc.in b/source4/lib/talloc/talloc.pc.in deleted file mode 100644 index 459cce70b1..0000000000 --- a/source4/lib/talloc/talloc.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: talloc  -Description: A hierarchical pool based memory system with destructors -Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -ltalloc -Cflags: -I${includedir}  -URL: http://talloc.samba.org/ diff --git a/source4/lib/talloc/talloc_guide.txt b/source4/lib/talloc/talloc_guide.txt deleted file mode 100644 index 18663b370d..0000000000 --- a/source4/lib/talloc/talloc_guide.txt +++ /dev/null @@ -1,685 +0,0 @@ -Using talloc in Samba4 ----------------------- - -Andrew Tridgell -September 2004 - -The most current version of this document is available at -   http://samba.org/ftp/unpacked/samba4/source/lib/talloc/talloc_guide.txt - -If you are used to the "old" talloc from Samba3 before 3.0.20 then please read -this carefully, as talloc has changed a lot. With 3.0.20 (or 3.0.14?) the -Samba4 talloc has been ported back to Samba3, so this guide applies to both. - -The new talloc is a hierarchical, reference counted memory pool system -with destructors. Quite a mouthful really, but not too bad once you -get used to it. - -Perhaps the biggest change from Samba3 is that there is no distinction -between a "talloc context" and a "talloc pointer". Any pointer -returned from talloc() is itself a valid talloc context. This means -you can do this: - -  struct foo *X = talloc(mem_ctx, struct foo); -  X->name = talloc_strdup(X, "foo"); - -and the pointer X->name would be a "child" of the talloc context "X" -which is itself a child of mem_ctx. So if you do talloc_free(mem_ctx) -then it is all destroyed, whereas if you do talloc_free(X) then just X -and X->name are destroyed, and if you do talloc_free(X->name) then -just the name element of X is destroyed. - -If you think about this, then what this effectively gives you is an -n-ary tree, where you can free any part of the tree with -talloc_free(). - -If you find this confusing, then I suggest you run the testsuite to -watch talloc in action. You may also like to add your own tests to -testsuite.c to clarify how some particular situation is handled. - - -Performance ------------ - -All the additional features of talloc() over malloc() do come at a -price. We have a simple performance test in Samba4 that measures -talloc() versus malloc() performance, and it seems that talloc() is -about 4% slower than malloc() on my x86 Debian Linux box. For Samba, -the great reduction in code complexity that we get by using talloc -makes this worthwhile, especially as the total overhead of -talloc/malloc in Samba is already quite small. - - -talloc API ----------- - -The following is a complete guide to the talloc API. Read it all at -least twice. - -Multi-threading ---------------- - -talloc itself does not deal with threads. It is thread-safe (assuming   -the underlying "malloc" is), as long as each thread uses different   -memory contexts. -If two threads uses the same context then they need to synchronize in   -order to be safe. In particular: -- when using talloc_enable_leak_report(), giving directly NULL as a   -parent context implicitly refers to a hidden "null context" global   -variable, so this should not be used in a multi-threaded environment   -without proper synchronization ; -- the context returned by talloc_autofree_context() is also global so   -shouldn't be used by several threads simultaneously without   -synchronization. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(type *)talloc(const void *context, type); - -The talloc() macro is the core of the talloc library. It takes a -memory context and a type, and returns a pointer to a new area of -memory of the given type. - -The returned pointer is itself a talloc context, so you can use it as -the context argument to more calls to talloc if you wish. - -The returned pointer is a "child" of the supplied context. This means -that if you talloc_free() the context then the new child disappears as -well. Alternatively you can free just the child. - -The context argument to talloc() can be NULL, in which case a new top -level context is created.  - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_size(const void *context, size_t size); - -The function talloc_size() should be used when you don't have a -convenient type to pass to talloc(). Unlike talloc(), it is not type -safe (as it returns a void *), so you are on your own for type checking. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(typeof(ptr)) talloc_ptrtype(const void *ctx, ptr); - -The talloc_ptrtype() macro should be used when you have a pointer and -want to allocate memory to point at with this pointer. When compiling -with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size() -and talloc_get_name() will return the current location in the source file. -and not the type. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -int talloc_free(void *ptr); - -The talloc_free() function frees a piece of talloc memory, and all its -children. You can call talloc_free() on any pointer returned by -talloc(). - -The return value of talloc_free() indicates success or failure, with 0 -returned for success and -1 for failure. The only possible failure -condition is if the pointer had a destructor attached to it and the -destructor returned -1. See talloc_set_destructor() for details on -destructors. - -If this pointer has an additional parent when talloc_free() is called -then the memory is not actually released, but instead the most -recently established parent is destroyed. See talloc_reference() for -details on establishing additional parents. - -For more control on which parent is removed, see talloc_unlink() - -talloc_free() operates recursively on its children. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -int talloc_free_children(void *ptr); - -The talloc_free_children() walks along the list of all children of a -talloc context and talloc_free()s only the children, not the context -itself. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_reference(const void *context, const void *ptr); - -The talloc_reference() function makes "context" an additional parent -of "ptr". - -The return value of talloc_reference() is always the original pointer -"ptr", unless talloc ran out of memory in creating the reference in -which case it will return NULL (each additional reference consumes -around 48 bytes of memory on intel x86 platforms). - -If "ptr" is NULL, then the function is a no-op, and simply returns NULL. - -After creating a reference you can free it in one of the following -ways: - -  - you can talloc_free() any parent of the original pointer. That -    will reduce the number of parents of this pointer by 1, and will -    cause this pointer to be freed if it runs out of parents. - -  - you can talloc_free() the pointer itself. That will destroy the -    most recently established parent to the pointer and leave the -    pointer as a child of its current parent. - -For more control on which parent to remove, see talloc_unlink() - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -int talloc_unlink(const void *context, const void *ptr); - -The talloc_unlink() function removes a specific parent from ptr. The -context passed must either be a context used in talloc_reference() -with this pointer, or must be a direct parent of ptr.  - -Note that if the parent has already been removed using talloc_free() -then this function will fail and will return -1.  Likewise, if "ptr" -is NULL, then the function will make no modifications and return -1. - -Usually you can just use talloc_free() instead of talloc_unlink(), but -sometimes it is useful to have the additional control on which parent -is removed. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_set_destructor(const void *ptr, int (*destructor)(void *)); - -The function talloc_set_destructor() sets the "destructor" for the -pointer "ptr". A destructor is a function that is called when the -memory used by a pointer is about to be released. The destructor -receives the pointer as an argument, and should return 0 for success -and -1 for failure. - -The destructor can do anything it wants to, including freeing other -pieces of memory. A common use for destructors is to clean up -operating system resources (such as open file descriptors) contained -in the structure the destructor is placed on. - -You can only place one destructor on a pointer. If you need more than -one destructor then you can create a zero-length child of the pointer -and place an additional destructor on that. - -To remove a destructor call talloc_set_destructor() with NULL for the -destructor. - -If your destructor attempts to talloc_free() the pointer that it is -the destructor for then talloc_free() will return -1 and the free will -be ignored. This would be a pointless operation anyway, as the -destructor is only called when the memory is just about to go away. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -int talloc_increase_ref_count(const void *ptr); - -The talloc_increase_ref_count(ptr) function is exactly equivalent to: - -  talloc_reference(NULL, ptr); - -You can use either syntax, depending on which you think is clearer in -your code. - -It returns 0 on success and -1 on failure. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -size_t talloc_reference_count(const void *ptr); - -Return the number of references to the pointer. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_set_name(const void *ptr, const char *fmt, ...); - -Each talloc pointer has a "name". The name is used principally for -debugging purposes, although it is also possible to set and get the -name on a pointer in as a way of "marking" pointers in your code. - -The main use for names on pointer is for "talloc reports". See -talloc_report() and talloc_report_full() for details. Also see -talloc_enable_leak_report() and talloc_enable_leak_report_full(). - -The talloc_set_name() function allocates memory as a child of the -pointer. It is logically equivalent to: -  talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...)); - -Note that multiple calls to talloc_set_name() will allocate more -memory without releasing the name. All of the memory is released when -the ptr is freed using talloc_free(). - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_set_name_const(const void *ptr, const char *name); - -The function talloc_set_name_const() is just like talloc_set_name(), -but it takes a string constant, and is much faster. It is extensively -used by the "auto naming" macros, such as talloc_p(). - -This function does not allocate any memory. It just copies the -supplied pointer into the internal representation of the talloc -ptr. This means you must not pass a name pointer to memory that will -disappear before the ptr is freed with talloc_free(). - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_named(const void *context, size_t size, const char *fmt, ...); - -The talloc_named() function creates a named talloc pointer. It is -equivalent to: - -   ptr = talloc_size(context, size); -   talloc_set_name(ptr, fmt, ....); - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_named_const(const void *context, size_t size, const char *name); - -This is equivalent to: - -   ptr = talloc_size(context, size); -   talloc_set_name_const(ptr, name); - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -const char *talloc_get_name(const void *ptr); - -This returns the current name for the given talloc pointer. See -talloc_set_name() for details. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_init(const char *fmt, ...); - -This function creates a zero length named talloc context as a top -level context. It is equivalent to: - -  talloc_named(NULL, 0, fmt, ...); - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_new(void *ctx); - -This is a utility macro that creates a new memory context hanging -off an exiting context, automatically naming it "talloc_new: __location__" -where __location__ is the source line it is called from. It is -particularly useful for creating a new temporary working context. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(type *)talloc_realloc(const void *context, void *ptr, type, count); - -The talloc_realloc() macro changes the size of a talloc -pointer. The "count" argument is the number of elements of type "type" -that you want the resulting pointer to hold.  - -talloc_realloc() has the following equivalences: - -  talloc_realloc(context, NULL, type, 1) ==> talloc(context, type); -  talloc_realloc(context, NULL, type, N) ==> talloc_array(context, type, N); -  talloc_realloc(context, ptr, type, 0)  ==> talloc_free(ptr); - -The "context" argument is only used if "ptr" is NULL, otherwise it is -ignored. - -talloc_realloc() returns the new pointer, or NULL on failure. The call -will fail either due to a lack of memory, or because the pointer has -more than one parent (see talloc_reference()). - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_realloc_size(const void *context, void *ptr, size_t size); - -the talloc_realloc_size() function is useful when the type is not  -known so the typesafe talloc_realloc() cannot be used. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_steal(const void *new_ctx, const void *ptr); - -The talloc_steal() function changes the parent context of a talloc -pointer. It is typically used when the context that the pointer is -currently a child of is going to be freed and you wish to keep the -memory for a longer time.  - -The talloc_steal() function returns the pointer that you pass it. It -does not have any failure modes. - -NOTE: It is possible to produce loops in the parent/child relationship -if you are not careful with talloc_steal(). No guarantees are provided -as to your sanity or the safety of your data if you do this. - -talloc_steal (new_ctx, NULL) will return NULL with no sideeffects. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -size_t talloc_total_size(const void *ptr); - -The talloc_total_size() function returns the total size in bytes used -by this pointer and all child pointers. Mostly useful for debugging. - -Passing NULL is allowed, but it will only give a meaningful result if -talloc_enable_leak_report() or talloc_enable_leak_report_full() has -been called. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -size_t talloc_total_blocks(const void *ptr); - -The talloc_total_blocks() function returns the total memory block -count used by this pointer and all child pointers. Mostly useful for -debugging. - -Passing NULL is allowed, but it will only give a meaningful result if -talloc_enable_leak_report() or talloc_enable_leak_report_full() has -been called. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_report_depth_cb(const void *ptr, int depth, int max_depth, -			    void (*callback)(const void *ptr, -			    		     int depth, int max_depth, -					     int is_ref, -					     void *priv), -			    void *priv); - -This provides a more flexible reports than talloc_report(). It -will recursively call the callback for the entire tree of memory -referenced by the pointer. References in the tree are passed with -is_ref = 1 and the pointer that is referenced. - -You can pass NULL for the pointer, in which case a report is -printed for the top level memory context, but only if -talloc_enable_leak_report() or talloc_enable_leak_report_full() -has been called. - -The recursion is stopped when depth >= max_depth. -max_depth = -1 means only stop at leaf nodes. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f); - -This provides a more flexible reports than talloc_report(). It -will let you specify the depth and max_depth. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_report(const void *ptr, FILE *f); - -The talloc_report() function prints a summary report of all memory -used by ptr. One line of report is printed for each immediate child of -ptr, showing the total memory and number of blocks used by that child. - -You can pass NULL for the pointer, in which case a report is printed -for the top level memory context, but only if -talloc_enable_leak_report() or talloc_enable_leak_report_full() has -been called. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_report_full(const void *ptr, FILE *f); - -This provides a more detailed report than talloc_report(). It will -recursively print the ensire tree of memory referenced by the -pointer. References in the tree are shown by giving the name of the -pointer that is referenced. - -You can pass NULL for the pointer, in which case a report is printed -for the top level memory context, but only if -talloc_enable_leak_report() or talloc_enable_leak_report_full() has -been called. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_enable_leak_report(void); - -This enables calling of talloc_report(NULL, stderr) when the program -exits. In Samba4 this is enabled by using the --leak-report command -line option. - -For it to be useful, this function must be called before any other -talloc function as it establishes a "null context" that acts as the -top of the tree. If you don't call this function first then passing -NULL to talloc_report() or talloc_report_full() won't give you the -full tree printout. - -Here is a typical talloc report: - -talloc report on 'null_context' (total 267 bytes in 15 blocks) -        libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks -        libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks -        iconv(UTF8,CP850)              contains     42 bytes in   2 blocks -        libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks -        iconv(CP850,UTF8)              contains     42 bytes in   2 blocks -        iconv(UTF8,UTF-16LE)           contains     45 bytes in   2 blocks -        iconv(UTF-16LE,UTF8)           contains     45 bytes in   2 blocks - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_enable_leak_report_full(void); - -This enables calling of talloc_report_full(NULL, stderr) when the -program exits. In Samba4 this is enabled by using the ---leak-report-full command line option. - -For it to be useful, this function must be called before any other -talloc function as it establishes a "null context" that acts as the -top of the tree. If you don't call this function first then passing -NULL to talloc_report() or talloc_report_full() won't give you the -full tree printout. - -Here is a typical full report: - -full talloc report on 'root' (total 18 bytes in 8 blocks) -    p1                             contains     18 bytes in   7 blocks (ref 0) -        r1                             contains     13 bytes in   2 blocks (ref 0) -            reference to: p2 -        p2                             contains      1 bytes in   1 blocks (ref 1) -        x3                             contains      1 bytes in   1 blocks (ref 0) -        x2                             contains      1 bytes in   1 blocks (ref 0) -        x1                             contains      1 bytes in   1 blocks (ref 0) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_enable_null_tracking(void); - -This enables tracking of the NULL memory context without enabling leak -reporting on exit. Useful for when you want to do your own leak -reporting call via talloc_report_null_full(); - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void talloc_disable_null_tracking(void); - -This disables tracking of the NULL memory context. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(type *)talloc_zero(const void *ctx, type); - -The talloc_zero() macro is equivalent to: - -  ptr = talloc(ctx, type); -  if (ptr) memset(ptr, 0, sizeof(type)); - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_zero_size(const void *ctx, size_t size) - -The talloc_zero_size() function is useful when you don't have a known type - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_memdup(const void *ctx, const void *p, size_t size); - -The talloc_memdup() function is equivalent to: - -  ptr = talloc_size(ctx, size); -  if (ptr) memcpy(ptr, p, size); - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_strdup(const void *ctx, const char *p); - -The talloc_strdup() function is equivalent to: - -  ptr = talloc_size(ctx, strlen(p)+1); -  if (ptr) memcpy(ptr, p, strlen(p)+1); - -This functions sets the name of the new pointer to the passed -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_strndup(const void *t, const char *p, size_t n); - -The talloc_strndup() function is the talloc equivalent of the C -library function strndup() - -This functions sets the name of the new pointer to the passed -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_append_string(const void *t, char *orig, const char *append); - -The talloc_append_string() function appends the given formatted -string to the given string. - -This function sets the name of the new pointer to the new -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_vasprintf(const void *t, const char *fmt, va_list ap); - -The talloc_vasprintf() function is the talloc equivalent of the C -library function vasprintf() - -This functions sets the name of the new pointer to the new -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_asprintf(const void *t, const char *fmt, ...); - -The talloc_asprintf() function is the talloc equivalent of the C -library function asprintf() - -This functions sets the name of the new pointer to the new -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_asprintf_append(char *s, const char *fmt, ...); - -The talloc_asprintf_append() function appends the given formatted -string to the given string. -Use this varient when the string in the current talloc buffer may -have been truncated in length. - -This functions sets the name of the new pointer to the new -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...); - -The talloc_asprintf_append() function appends the given formatted  -string to the end of the currently allocated talloc buffer. -Use this varient when the string in the current talloc buffer has -not been changed. - -This functions sets the name of the new pointer to the new -string. This is equivalent to: -   talloc_set_name_const(ptr, ptr) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -((type *)talloc_array(const void *ctx, type, uint_t count); - -The talloc_array() macro is equivalent to: - -  (type *)talloc_size(ctx, sizeof(type) * count); - -except that it provides integer overflow protection for the multiply, -returning NULL if the multiply overflows. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_array_size(const void *ctx, size_t size, uint_t count); - -The talloc_array_size() function is useful when the type is not -known. It operates in the same way as talloc_array(), but takes a size -instead of a type. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, uint_t count); - -The talloc_ptrtype() macro should be used when you have a pointer to an array -and want to allocate memory of an array to point at with this pointer. When compiling -with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_array_size() -and talloc_get_name() will return the current location in the source file. -and not the type. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size); - -This is a non-macro version of talloc_realloc(), which is useful  -as libraries sometimes want a ralloc function pointer. A realloc() -implementation encapsulates the functionality of malloc(), free() and -realloc() in one call, which is why it is useful to be able to pass -around a single function pointer. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_autofree_context(void); - -This is a handy utility function that returns a talloc context -which will be automatically freed on program exit. This can be used -to reduce the noise in memory leak reports. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_check_name(const void *ptr, const char *name); - -This function checks if a pointer has the specified name. If it does -then the pointer is returned. It it doesn't then NULL is returned. - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(type *)talloc_get_type(const void *ptr, type); - -This macro allows you to do type checking on talloc pointers. It is -particularly useful for void* private pointers. It is equivalent to -this: - -   (type *)talloc_check_name(ptr, #type) - - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -talloc_set_type(const void *ptr, type); - -This macro allows you to force the name of a pointer to be a -particular type. This can be used in conjunction with -talloc_get_type() to do type checking on void* pointers. - -It is equivalent to this: -   talloc_set_name_const(ptr, #type) - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -talloc_get_size(const void *ctx); - -This function lets you know the amount of memory alloced so far by -this context. It does NOT account for subcontext memory. -This can be used to calculate the size of an array. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -void *talloc_find_parent_byname(const void *ctx, const char *name); - -Find a parent memory context of the current context that has the given -name. This can be very useful in complex programs where it may be -difficult to pass all information down to the level you need, but you -know the structure you want is a parent of another context. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -(type *)talloc_find_parent_bytype(ctx, type); - -Like talloc_find_parent_byname() but takes a type, making it typesafe. - diff --git a/source4/lib/talloc/testsuite.c b/source4/lib/talloc/testsuite.c deleted file mode 100644 index 3f06eee566..0000000000 --- a/source4/lib/talloc/testsuite.c +++ /dev/null @@ -1,1152 +0,0 @@ -/*  -   Unix SMB/CIFS implementation. - -   local testing of talloc routines. - -   Copyright (C) Andrew Tridgell 2004 -    -     ** NOTE! The following LGPL license applies to the talloc -     ** library. This does NOT imply that all of Samba is released -     ** under the LGPL -    -   This library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 3 of the License, or (at your option) any later version. - -   This library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with this library; if not, see <http://www.gnu.org/licenses/>. -*/ - -#include "replace.h" -#include "system/time.h" -#include "talloc.h" - -static struct timeval timeval_current(void) -{ -	struct timeval tv; -	gettimeofday(&tv, NULL); -	return tv; -} - -static double timeval_elapsed(struct timeval *tv) -{ -	struct timeval tv2 = timeval_current(); -	return (tv2.tv_sec - tv->tv_sec) +  -	       (tv2.tv_usec - tv->tv_usec)*1.0e-6; -} - -#define torture_assert(test, expr, str) if (!(expr)) { \ -	printf("failure: %s [\n%s: Expression %s failed: %s\n]\n", \ -		test, __location__, #expr, str); \ -	return false; \ -} - -#define torture_assert_str_equal(test, arg1, arg2, desc) \ -	if (arg1 == NULL && arg2 == NULL) {				\ -	} else if (strcmp(arg1, arg2)) {			\ -		printf("failure: %s [\n%s: Expected %s, got %s: %s\n]\n", \ -		   test, __location__, arg1, arg2, desc); \ -		return false; \ -	} - -#if _SAMBA_BUILD_==3 -#ifdef malloc -#undef malloc -#endif -#ifdef strdup -#undef strdup -#endif -#endif - -#define CHECK_SIZE(test, ptr, tsize) do { \ -	if (talloc_total_size(ptr) != (tsize)) { \ -		printf("failed: %s [\nwrong '%s' tree size: got %u  expected %u\n]\n", \ -		       test, #ptr, \ -		       (unsigned)talloc_total_size(ptr), \ -		       (unsigned)tsize); \ -		talloc_report_full(ptr, stdout); \ -		return false; \ -	} \ -} while (0) - -#define CHECK_BLOCKS(test, ptr, tblocks) do { \ -	if (talloc_total_blocks(ptr) != (tblocks)) { \ -		printf("failed: %s [\nwrong '%s' tree blocks: got %u  expected %u\n]\n", \ -		       test, #ptr, \ -		       (unsigned)talloc_total_blocks(ptr), \ -		       (unsigned)tblocks); \ -		talloc_report_full(ptr, stdout); \ -		return false; \ -	} \ -} while (0) - -#define CHECK_PARENT(test, ptr, parent) do { \ -	if (talloc_parent(ptr) != (parent)) { \ -		printf("failed: %s [\n'%s' has wrong parent: got %p  expected %p\n]\n", \ -		       test, #ptr, \ -		       talloc_parent(ptr), \ -		       (parent)); \ -		talloc_report_full(ptr, stdout); \ -		talloc_report_full(parent, stdout); \ -		talloc_report_full(NULL, stdout); \ -		return false; \ -	} \ -} while (0) - - -/* -  test references  -*/ -static bool test_ref1(void) -{ -	void *root, *p1, *p2, *ref, *r1; - -	printf("test: ref1\n# SINGLE REFERENCE FREE\n"); - -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "p1"); -	p2 = talloc_named_const(p1, 1, "p2"); -	talloc_named_const(p1, 1, "x1"); -	talloc_named_const(p1, 2, "x2"); -	talloc_named_const(p1, 3, "x3"); - -	r1 = talloc_named_const(root, 1, "r1");	 -	ref = talloc_reference(r1, p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref1", p1, 5); -	CHECK_BLOCKS("ref1", p2, 1); -	CHECK_BLOCKS("ref1", r1, 2); - -	fprintf(stderr, "Freeing p2\n"); -	talloc_free(p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref1", p1, 5); -	CHECK_BLOCKS("ref1", p2, 1); -	CHECK_BLOCKS("ref1", r1, 1); - -	fprintf(stderr, "Freeing p1\n"); -	talloc_free(p1); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref1", r1, 1); - -	fprintf(stderr, "Freeing r1\n"); -	talloc_free(r1); -	talloc_report_full(NULL, stderr); - -	fprintf(stderr, "Testing NULL\n"); -	if (talloc_reference(root, NULL)) { -		return false; -	} - -	CHECK_BLOCKS("ref1", root, 1); - -	CHECK_SIZE("ref1", root, 0); - -	talloc_free(root); -	printf("success: ref1\n"); -	return true; -} - -/* -  test references  -*/ -static bool test_ref2(void) -{ -	void *root, *p1, *p2, *ref, *r1; - -	printf("test: ref2\n# DOUBLE REFERENCE FREE\n"); -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "p1"); -	talloc_named_const(p1, 1, "x1"); -	talloc_named_const(p1, 1, "x2"); -	talloc_named_const(p1, 1, "x3"); -	p2 = talloc_named_const(p1, 1, "p2"); - -	r1 = talloc_named_const(root, 1, "r1");	 -	ref = talloc_reference(r1, p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref2", p1, 5); -	CHECK_BLOCKS("ref2", p2, 1); -	CHECK_BLOCKS("ref2", r1, 2); - -	fprintf(stderr, "Freeing ref\n"); -	talloc_free(ref); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref2", p1, 5); -	CHECK_BLOCKS("ref2", p2, 1); -	CHECK_BLOCKS("ref2", r1, 1); - -	fprintf(stderr, "Freeing p2\n"); -	talloc_free(p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref2", p1, 4); -	CHECK_BLOCKS("ref2", r1, 1); - -	fprintf(stderr, "Freeing p1\n"); -	talloc_free(p1); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref2", r1, 1); - -	fprintf(stderr, "Freeing r1\n"); -	talloc_free(r1); -	talloc_report_full(root, stderr); - -	CHECK_SIZE("ref2", root, 0); - -	talloc_free(root); -	printf("success: ref2\n"); -	return true; -} - -/* -  test references  -*/ -static bool test_ref3(void) -{ -	void *root, *p1, *p2, *ref, *r1; - -	printf("test: ref3\n# PARENT REFERENCE FREE\n"); - -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "p1"); -	p2 = talloc_named_const(root, 1, "p2"); -	r1 = talloc_named_const(p1, 1, "r1"); -	ref = talloc_reference(p2, r1); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref3", p1, 2); -	CHECK_BLOCKS("ref3", p2, 2); -	CHECK_BLOCKS("ref3", r1, 1); - -	fprintf(stderr, "Freeing p1\n"); -	talloc_free(p1); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref3", p2, 2); -	CHECK_BLOCKS("ref3", r1, 1); - -	fprintf(stderr, "Freeing p2\n"); -	talloc_free(p2); -	talloc_report_full(root, stderr); - -	CHECK_SIZE("ref3", root, 0); - -	talloc_free(root); - -	printf("success: ref3\n"); -	return true; -} - -/* -  test references  -*/ -static bool test_ref4(void) -{ -	void *root, *p1, *p2, *ref, *r1; - -	printf("test: ref4\n# REFERRER REFERENCE FREE\n"); - -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "p1"); -	talloc_named_const(p1, 1, "x1"); -	talloc_named_const(p1, 1, "x2"); -	talloc_named_const(p1, 1, "x3"); -	p2 = talloc_named_const(p1, 1, "p2"); - -	r1 = talloc_named_const(root, 1, "r1");	 -	ref = talloc_reference(r1, p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref4", p1, 5); -	CHECK_BLOCKS("ref4", p2, 1); -	CHECK_BLOCKS("ref4", r1, 2); - -	fprintf(stderr, "Freeing r1\n"); -	talloc_free(r1); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref4", p1, 5); -	CHECK_BLOCKS("ref4", p2, 1); - -	fprintf(stderr, "Freeing p2\n"); -	talloc_free(p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("ref4", p1, 4); - -	fprintf(stderr, "Freeing p1\n"); -	talloc_free(p1); -	talloc_report_full(root, stderr); - -	CHECK_SIZE("ref4", root, 0); - -	talloc_free(root); - -	printf("success: ref4\n"); -	return true; -} - - -/* -  test references  -*/ -static bool test_unlink1(void) -{ -	void *root, *p1, *p2, *ref, *r1; - -	printf("test: unlink\n# UNLINK\n"); - -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "p1"); -	talloc_named_const(p1, 1, "x1"); -	talloc_named_const(p1, 1, "x2"); -	talloc_named_const(p1, 1, "x3"); -	p2 = talloc_named_const(p1, 1, "p2"); - -	r1 = talloc_named_const(p1, 1, "r1");	 -	ref = talloc_reference(r1, p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("unlink", p1, 7); -	CHECK_BLOCKS("unlink", p2, 1); -	CHECK_BLOCKS("unlink", r1, 2); - -	fprintf(stderr, "Unreferencing r1\n"); -	talloc_unlink(r1, p2); -	talloc_report_full(root, stderr); - -	CHECK_BLOCKS("unlink", p1, 6); -	CHECK_BLOCKS("unlink", p2, 1); -	CHECK_BLOCKS("unlink", r1, 1); - -	fprintf(stderr, "Freeing p1\n"); -	talloc_free(p1); -	talloc_report_full(root, stderr); - -	CHECK_SIZE("unlink", root, 0); - -	talloc_free(root); - -	printf("success: unlink\n"); -	return true; -} - -static int fail_destructor(void *ptr) -{ -	return -1; -} - -/* -  miscellaneous tests to try to get a higher test coverage percentage -*/ -static bool test_misc(void) -{ -	void *root, *p1; -	char *p2; -	double *d; -	const char *name; - -	printf("test: misc\n# MISCELLANEOUS\n"); - -	root = talloc_new(NULL); - -	p1 = talloc_size(root, 0x7fffffff); -	torture_assert("misc", !p1, "failed: large talloc allowed\n"); - -	p1 = talloc_strdup(root, "foo"); -	talloc_increase_ref_count(p1); -	talloc_increase_ref_count(p1); -	talloc_increase_ref_count(p1); -	CHECK_BLOCKS("misc", p1, 1); -	CHECK_BLOCKS("misc", root, 2); -	talloc_free(p1); -	CHECK_BLOCKS("misc", p1, 1); -	CHECK_BLOCKS("misc", root, 2); -	talloc_unlink(NULL, p1); -	CHECK_BLOCKS("misc", p1, 1); -	CHECK_BLOCKS("misc", root, 2); -	p2 = talloc_strdup(p1, "foo"); -	torture_assert("misc", talloc_unlink(root, p2) == -1, -				   "failed: talloc_unlink() of non-reference context should return -1\n"); -	torture_assert("misc", talloc_unlink(p1, p2) == 0, -		"failed: talloc_unlink() of parent should succeed\n"); -	talloc_free(p1); -	CHECK_BLOCKS("misc", p1, 1); -	CHECK_BLOCKS("misc", root, 2); - -	name = talloc_set_name(p1, "my name is %s", "foo"); -	torture_assert_str_equal("misc", talloc_get_name(p1), "my name is foo", -		"failed: wrong name after talloc_set_name(my name is foo)"); -	CHECK_BLOCKS("misc", p1, 2); -	CHECK_BLOCKS("misc", root, 3); - -	talloc_set_name_const(p1, NULL); -	torture_assert_str_equal ("misc", talloc_get_name(p1), "UNNAMED", -		"failed: wrong name after talloc_set_name(NULL)"); -	CHECK_BLOCKS("misc", p1, 2); -	CHECK_BLOCKS("misc", root, 3); - -	torture_assert("misc", talloc_free(NULL) == -1,  -				   "talloc_free(NULL) should give -1\n"); - -	talloc_set_destructor(p1, fail_destructor); -	torture_assert("misc", talloc_free(p1) == -1,  -		"Failed destructor should cause talloc_free to fail\n"); -	talloc_set_destructor(p1, NULL); - -	talloc_report(root, stderr); - - -	p2 = (char *)talloc_zero_size(p1, 20); -	torture_assert("misc", p2[19] == 0, "Failed to give zero memory\n"); -	talloc_free(p2); - -	torture_assert("misc", talloc_strdup(root, NULL) == NULL, -		"failed: strdup on NULL should give NULL\n"); - -	p2 = talloc_strndup(p1, "foo", 2); -	torture_assert("misc", strcmp("fo", p2) == 0,  -				   "strndup doesn't work\n"); -	p2 = talloc_asprintf_append_buffer(p2, "o%c", 'd'); -	torture_assert("misc", strcmp("food", p2) == 0,  -				   "talloc_asprintf_append_buffer doesn't work\n"); -	CHECK_BLOCKS("misc", p2, 1); -	CHECK_BLOCKS("misc", p1, 3); - -	p2 = talloc_asprintf_append_buffer(NULL, "hello %s", "world"); -	torture_assert("misc", strcmp("hello world", p2) == 0, -		"talloc_asprintf_append_buffer doesn't work\n"); -	CHECK_BLOCKS("misc", p2, 1); -	CHECK_BLOCKS("misc", p1, 3); -	talloc_free(p2); - -	d = talloc_array(p1, double, 0x20000000); -	torture_assert("misc", !d, "failed: integer overflow not detected\n"); - -	d = talloc_realloc(p1, d, double, 0x20000000); -	torture_assert("misc", !d, "failed: integer overflow not detected\n"); - -	talloc_free(p1); -	CHECK_BLOCKS("misc", root, 1); - -	p1 = talloc_named(root, 100, "%d bytes", 100); -	CHECK_BLOCKS("misc", p1, 2); -	CHECK_BLOCKS("misc", root, 3); -	talloc_unlink(root, p1); - -	p1 = talloc_init("%d bytes", 200); -	p2 = talloc_asprintf(p1, "my test '%s'", "string"); -	torture_assert_str_equal("misc", p2, "my test 'string'", -		"failed: talloc_asprintf(\"my test '%%s'\", \"string\") gave: \"%s\""); -	CHECK_BLOCKS("misc", p1, 3); -	CHECK_SIZE("misc", p2, 17); -	CHECK_BLOCKS("misc", root, 1); -	talloc_unlink(NULL, p1); - -	p1 = talloc_named_const(root, 10, "p1"); -	p2 = (char *)talloc_named_const(root, 20, "p2"); -	(void)talloc_reference(p1, p2); -	talloc_report_full(root, stderr); -	talloc_unlink(root, p2); -	talloc_report_full(root, stderr); -	CHECK_BLOCKS("misc", p2, 1); -	CHECK_BLOCKS("misc", p1, 2); -	CHECK_BLOCKS("misc", root, 3); -	talloc_unlink(p1, p2); -	talloc_unlink(root, p1); - -	p1 = talloc_named_const(root, 10, "p1"); -	p2 = (char *)talloc_named_const(root, 20, "p2"); -	(void)talloc_reference(NULL, p2); -	talloc_report_full(root, stderr); -	talloc_unlink(root, p2); -	talloc_report_full(root, stderr); -	CHECK_BLOCKS("misc", p2, 1); -	CHECK_BLOCKS("misc", p1, 1); -	CHECK_BLOCKS("misc", root, 2); -	talloc_unlink(NULL, p2); -	talloc_unlink(root, p1); - -	/* Test that talloc_unlink is a no-op */ - -	torture_assert("misc", talloc_unlink(root, NULL) == -1, -		"failed: talloc_unlink(root, NULL) == -1\n"); - -	talloc_report(root, stderr); -	talloc_report(NULL, stderr); - -	CHECK_SIZE("misc", root, 0); - -	talloc_free(root); - -	CHECK_SIZE("misc", NULL, 0); - -	talloc_enable_leak_report(); -	talloc_enable_leak_report_full(); - -	printf("success: misc\n"); - -	return true; -} - - -/* -  test realloc -*/ -static bool test_realloc(void) -{ -	void *root, *p1, *p2; - -	printf("test: realloc\n# REALLOC\n"); - -	root = talloc_new(NULL); - -	p1 = talloc_size(root, 10); -	CHECK_SIZE("realloc", p1, 10); - -	p1 = talloc_realloc_size(NULL, p1, 20); -	CHECK_SIZE("realloc", p1, 20); - -	talloc_new(p1); - -	p2 = talloc_realloc_size(p1, NULL, 30); - -	talloc_new(p1); - -	p2 = talloc_realloc_size(p1, p2, 40); - -	CHECK_SIZE("realloc", p2, 40); -	CHECK_SIZE("realloc", root, 60); -	CHECK_BLOCKS("realloc", p1, 4); - -	p1 = talloc_realloc_size(NULL, p1, 20); -	CHECK_SIZE("realloc", p1, 60); - -	talloc_increase_ref_count(p2); -	torture_assert("realloc", talloc_realloc_size(NULL, p2, 5) == NULL, -		"failed: talloc_realloc() on a referenced pointer should fail\n"); -	CHECK_BLOCKS("realloc", p1, 4); - -	talloc_realloc_size(NULL, p2, 0); -	talloc_realloc_size(NULL, p2, 0); -	CHECK_BLOCKS("realloc", p1, 3); - -	torture_assert("realloc", talloc_realloc_size(NULL, p1, 0x7fffffff) == NULL, -		"failed: oversize talloc should fail\n"); - -	talloc_realloc_size(NULL, p1, 0); - -	CHECK_BLOCKS("realloc", root, 1); -	CHECK_SIZE("realloc", root, 0); - -	talloc_free(root); - -	printf("success: realloc\n"); - -	return true; -} - -/* -  test realloc with a child -*/ -static bool test_realloc_child(void) -{ -	void *root; -	struct el2 { -		const char *name; -	} *el2;	 -	struct el1 { -		int count; -		struct el2 **list, **list2, **list3; -	} *el1; - -	printf("test: REALLOC WITH CHILD\n"); - -	root = talloc_new(NULL); - -	el1 = talloc(root, struct el1); -	el1->list = talloc(el1, struct el2 *); -	el1->list[0] = talloc(el1->list, struct el2); -	el1->list[0]->name = talloc_strdup(el1->list[0], "testing"); - -	el1->list2 = talloc(el1, struct el2 *); -	el1->list2[0] = talloc(el1->list2, struct el2); -	el1->list2[0]->name = talloc_strdup(el1->list2[0], "testing2"); - -	el1->list3 = talloc(el1, struct el2 *); -	el1->list3[0] = talloc(el1->list3, struct el2); -	el1->list3[0]->name = talloc_strdup(el1->list3[0], "testing2"); -	 -	el2 = talloc(el1->list, struct el2); -	el2 = talloc(el1->list2, struct el2); -	el2 = talloc(el1->list3, struct el2); - -	el1->list = talloc_realloc(el1, el1->list, struct el2 *, 100); -	el1->list2 = talloc_realloc(el1, el1->list2, struct el2 *, 200); -	el1->list3 = talloc_realloc(el1, el1->list3, struct el2 *, 300); - -	talloc_free(root); - -	printf("success: REALLOC WITH CHILD\n"); -	return true; -} - -/* -  test type checking -*/ -static bool test_type(void) -{ -	void *root; -	struct el1 { -		int count; -	}; -	struct el2 { -		int count; -	}; -	struct el1 *el1; - -	printf("test: type\n# talloc type checking\n"); - -	root = talloc_new(NULL); - -	el1 = talloc(root, struct el1); - -	el1->count = 1; - -	torture_assert("type", talloc_get_type(el1, struct el1) == el1, -		"type check failed on el1\n"); -	torture_assert("type", talloc_get_type(el1, struct el2) == NULL, -		"type check failed on el1 with el2\n"); -	talloc_set_type(el1, struct el2); -	torture_assert("type", talloc_get_type(el1, struct el2) == (struct el2 *)el1, -		"type set failed on el1 with el2\n"); - -	talloc_free(root); - -	printf("success: type\n"); -	return true; -} - -/* -  test steal -*/ -static bool test_steal(void) -{ -	void *root, *p1, *p2; - -	printf("test: steal\n# STEAL\n"); - -	root = talloc_new(NULL); - -	p1 = talloc_array(root, char, 10); -	CHECK_SIZE("steal", p1, 10); - -	p2 = talloc_realloc(root, NULL, char, 20); -	CHECK_SIZE("steal", p1, 10); -	CHECK_SIZE("steal", root, 30); - -	torture_assert("steal", talloc_steal(p1, NULL) == NULL, -		"failed: stealing NULL should give NULL\n"); - -	torture_assert("steal", talloc_steal(p1, p1) == p1, -		"failed: stealing to ourselves is a nop\n"); -	CHECK_BLOCKS("steal", root, 3); -	CHECK_SIZE("steal", root, 30); - -	talloc_steal(NULL, p1); -	talloc_steal(NULL, p2); -	CHECK_BLOCKS("steal", root, 1); -	CHECK_SIZE("steal", root, 0); - -	talloc_free(p1); -	talloc_steal(root, p2); -	CHECK_BLOCKS("steal", root, 2); -	CHECK_SIZE("steal", root, 20); -	 -	talloc_free(p2); - -	CHECK_BLOCKS("steal", root, 1); -	CHECK_SIZE("steal", root, 0); - -	talloc_free(root); - -	p1 = talloc_size(NULL, 3); -	talloc_report_full(NULL, stderr); -	CHECK_SIZE("steal", NULL, 3); -	talloc_free(p1); - -	printf("success: steal\n"); -	return true; -} - -/* -  test move -*/ -static bool test_move(void) -{ -	void *root; -	struct t_move { -		char *p; -		int *x; -	} *t1, *t2; - -	printf("test: move\n# MOVE\n"); - -	root = talloc_new(NULL); - -	t1 = talloc(root, struct t_move); -	t2 = talloc(root, struct t_move); -	t1->p = talloc_strdup(t1, "foo"); -	t1->x = talloc(t1, int); -	*t1->x = 42; - -	t2->p = talloc_move(t2, &t1->p); -	t2->x = talloc_move(t2, &t1->x); -	torture_assert("move", t1->p == NULL && t1->x == NULL && -	    strcmp(t2->p, "foo") == 0 && *t2->x == 42, -		"talloc move failed"); - -	talloc_free(root); - -	printf("success: move\n"); - -	return true; -} - -/* -  test talloc_realloc_fn -*/ -static bool test_realloc_fn(void) -{ -	void *root, *p1; - -	printf("test: realloc_fn\n# talloc_realloc_fn\n"); - -	root = talloc_new(NULL); - -	p1 = talloc_realloc_fn(root, NULL, 10); -	CHECK_BLOCKS("realloc_fn", root, 2); -	CHECK_SIZE("realloc_fn", root, 10); -	p1 = talloc_realloc_fn(root, p1, 20); -	CHECK_BLOCKS("realloc_fn", root, 2); -	CHECK_SIZE("realloc_fn", root, 20); -	p1 = talloc_realloc_fn(root, p1, 0); -	CHECK_BLOCKS("realloc_fn", root, 1); -	CHECK_SIZE("realloc_fn", root, 0); - -	talloc_free(root); - -	printf("success: realloc_fn\n"); -	return true; -} - - -static bool test_unref_reparent(void) -{ -	void *root, *p1, *p2, *c1; - -	printf("test: unref_reparent\n# UNREFERENCE AFTER PARENT FREED\n"); - -	root = talloc_named_const(NULL, 0, "root"); -	p1 = talloc_named_const(root, 1, "orig parent"); -	p2 = talloc_named_const(root, 1, "parent by reference"); - -	c1 = talloc_named_const(p1, 1, "child"); -	talloc_reference(p2, c1); - -	CHECK_PARENT("unref_reparent", c1, p1); - -	talloc_free(p1); - -	CHECK_PARENT("unref_reparent", c1, p2); - -	talloc_unlink(p2, c1); - -	CHECK_SIZE("unref_reparent", root, 1); - -	talloc_free(p2); -	talloc_free(root); - -	printf("success: unref_reparent\n"); -	return true; -} - -/* -  measure the speed of talloc versus malloc -*/ -static bool test_speed(void) -{ -	void *ctx = talloc_new(NULL); -	unsigned count; -	const int loop = 1000; -	int i; -	struct timeval tv; - -	printf("test: speed\n# TALLOC VS MALLOC SPEED\n"); - -	tv = timeval_current(); -	count = 0; -	do { -		void *p1, *p2, *p3; -		for (i=0;i<loop;i++) { -			p1 = talloc_size(ctx, loop % 100); -			p2 = talloc_strdup(p1, "foo bar"); -			p3 = talloc_size(p1, 300); -			talloc_free(p1); -		} -		count += 3 * loop; -	} while (timeval_elapsed(&tv) < 5.0); - -	fprintf(stderr, "talloc: %.0f ops/sec\n", count/timeval_elapsed(&tv)); - -	talloc_free(ctx); - -	ctx = talloc_pool(NULL, 1024); - -	tv = timeval_current(); -	count = 0; -	do { -		void *p1, *p2, *p3; -		for (i=0;i<loop;i++) { -			p1 = talloc_size(ctx, loop % 100); -			p2 = talloc_strdup(p1, "foo bar"); -			p3 = talloc_size(p1, 300); -			talloc_free_children(ctx); -		} -		count += 3 * loop; -	} while (timeval_elapsed(&tv) < 5.0); - -	talloc_free(ctx); - -	fprintf(stderr, "talloc_pool: %.0f ops/sec\n", count/timeval_elapsed(&tv)); - -	tv = timeval_current(); -	count = 0; -	do { -		void *p1, *p2, *p3; -		for (i=0;i<loop;i++) { -			p1 = malloc(loop % 100); -			p2 = strdup("foo bar"); -			p3 = malloc(300); -			free(p1); -			free(p2); -			free(p3); -		} -		count += 3 * loop; -	} while (timeval_elapsed(&tv) < 5.0); -	fprintf(stderr, "malloc: %.0f ops/sec\n", count/timeval_elapsed(&tv)); - -	printf("success: speed\n"); - -	return true; -} - -static bool test_lifeless(void) -{ -	void *top = talloc_new(NULL); -	char *parent, *child;  -	void *child_owner = talloc_new(NULL); - -	printf("test: lifeless\n# TALLOC_UNLINK LOOP\n"); - -	parent = talloc_strdup(top, "parent"); -	child = talloc_strdup(parent, "child");   -	(void)talloc_reference(child, parent); -	(void)talloc_reference(child_owner, child);  -	talloc_report_full(top, stderr); -	talloc_unlink(top, parent); -	talloc_free(child); -	talloc_report_full(top, stderr); -	talloc_free(top); -	talloc_free(child_owner); -	talloc_free(child); - -	printf("success: lifeless\n"); -	return true; -} - -static int loop_destructor_count; - -static int test_loop_destructor(char *ptr) -{ -	loop_destructor_count++; -	return 0; -} - -static bool test_loop(void) -{ -	void *top = talloc_new(NULL); -	char *parent; -	struct req1 { -		char *req2, *req3; -	} *req1; - -	printf("test: loop\n# TALLOC LOOP DESTRUCTION\n"); - -	parent = talloc_strdup(top, "parent"); -	req1 = talloc(parent, struct req1); -	req1->req2 = talloc_strdup(req1, "req2");   -	talloc_set_destructor(req1->req2, test_loop_destructor); -	req1->req3 = talloc_strdup(req1, "req3"); -	(void)talloc_reference(req1->req3, req1); -	talloc_report_full(top, stderr); -	talloc_free(parent); -	talloc_report_full(top, stderr); -	talloc_report_full(NULL, stderr); -	talloc_free(top); - -	torture_assert("loop", loop_destructor_count == 1,  -				   "FAILED TO FIRE LOOP DESTRUCTOR\n"); -	loop_destructor_count = 0; - -	printf("success: loop\n"); -	return true; -} - -static int fail_destructor_str(char *ptr) -{ -	return -1; -} - -static bool test_free_parent_deny_child(void) -{ -	void *top = talloc_new(NULL); -	char *level1; -	char *level2; -	char *level3; - -	printf("test: free_parent_deny_child\n# TALLOC FREE PARENT DENY CHILD\n"); - -	level1 = talloc_strdup(top, "level1"); -	level2 = talloc_strdup(level1, "level2"); -	level3 = talloc_strdup(level2, "level3"); - -	talloc_set_destructor(level3, fail_destructor_str); -	talloc_free(level1); -	talloc_set_destructor(level3, NULL); - -	CHECK_PARENT("free_parent_deny_child", level3, top); - -	talloc_free(top); - -	printf("success: free_parent_deny_child\n"); -	return true; -} - -static bool test_talloc_ptrtype(void) -{ -	void *top = talloc_new(NULL); -	struct struct1 { -		int foo; -		int bar; -	} *s1, *s2, **s3, ***s4; -	const char *location1; -	const char *location2; -	const char *location3; -	const char *location4; - -	printf("test: ptrtype\n# TALLOC PTRTYPE\n"); - -	s1 = talloc_ptrtype(top, s1);location1 = __location__; - -	if (talloc_get_size(s1) != sizeof(struct struct1)) { -		printf("failure: ptrtype [\n" -		  "talloc_ptrtype() allocated the wrong size %lu (should be %lu)\n" -		  "]\n", (unsigned long)talloc_get_size(s1), -		           (unsigned long)sizeof(struct struct1)); -		return false; -	} - -	if (strcmp(location1, talloc_get_name(s1)) != 0) { -		printf("failure: ptrtype [\n" -		  "talloc_ptrtype() sets the wrong name '%s' (should be '%s')\n]\n", -			talloc_get_name(s1), location1); -		return false; -	} - -	s2 = talloc_array_ptrtype(top, s2, 10);location2 = __location__; - -	if (talloc_get_size(s2) != (sizeof(struct struct1) * 10)) { -		printf("failure: ptrtype [\n" -			   "talloc_array_ptrtype() allocated the wrong size " -		       "%lu (should be %lu)\n]\n", -			(unsigned long)talloc_get_size(s2), -		    (unsigned long)(sizeof(struct struct1)*10)); -		return false; -	} - -	if (strcmp(location2, talloc_get_name(s2)) != 0) { -		printf("failure: ptrtype [\n" -		"talloc_array_ptrtype() sets the wrong name '%s' (should be '%s')\n]\n", -			talloc_get_name(s2), location2); -		return false; -	} - -	s3 = talloc_array_ptrtype(top, s3, 10);location3 = __location__; - -	if (talloc_get_size(s3) != (sizeof(struct struct1 *) * 10)) { -		printf("failure: ptrtype [\n" -			   "talloc_array_ptrtype() allocated the wrong size " -		       "%lu (should be %lu)\n]\n", -			   (unsigned long)talloc_get_size(s3), -		       (unsigned long)(sizeof(struct struct1 *)*10)); -		return false; -	} - -	torture_assert_str_equal("ptrtype", location3, talloc_get_name(s3), -		"talloc_array_ptrtype() sets the wrong name"); - -	s4 = talloc_array_ptrtype(top, s4, 10);location4 = __location__; - -	if (talloc_get_size(s4) != (sizeof(struct struct1 **) * 10)) { -		printf("failure: ptrtype [\n" -		      "talloc_array_ptrtype() allocated the wrong size " -		       "%lu (should be %lu)\n]\n", -			   (unsigned long)talloc_get_size(s4), -		       (unsigned long)(sizeof(struct struct1 **)*10)); -		return false; -	} - -	torture_assert_str_equal("ptrtype", location4, talloc_get_name(s4), -		"talloc_array_ptrtype() sets the wrong name"); - -	talloc_free(top); - -	printf("success: ptrtype\n"); -	return true; -} - -static int _test_talloc_free_in_destructor(void **ptr) -{ -	talloc_free(*ptr); -	return 0; -} - -static bool test_talloc_free_in_destructor(void) -{ -	void *level0; -	void *level1; -	void *level2; -	void *level3; -	void *level4; -	void **level5; - -	printf("test: free_in_destructor\n# TALLOC FREE IN DESTRUCTOR\n"); - -	level0 = talloc_new(NULL); -	level1 = talloc_new(level0); -	level2 = talloc_new(level1); -	level3 = talloc_new(level2); -	level4 = talloc_new(level3); -	level5 = talloc(level4, void *); - -	*level5 = level3; -	(void)talloc_reference(level0, level3); -	(void)talloc_reference(level3, level3); -	(void)talloc_reference(level5, level3); - -	talloc_set_destructor(level5, _test_talloc_free_in_destructor); - -	talloc_free(level1); - -	talloc_free(level0); - -	printf("success: free_in_destructor\n"); -	return true; -} - -static bool test_autofree(void) -{ -#if _SAMBA_BUILD_ < 4 -	/* autofree test would kill smbtorture */ -	void *p; -	printf("test: autofree\n# TALLOC AUTOFREE CONTEXT\n"); - -	p = talloc_autofree_context(); -	talloc_free(p); - -	p = talloc_autofree_context(); -	talloc_free(p); - -	printf("success: autofree\n"); -#endif -	return true; -} - -static bool test_pool(void) -{ -	void *pool; -	void *p1, *p2, *p3, *p4; - -	pool = talloc_pool(NULL, 1024); - -	p1 = talloc_size(pool, 80); -	p2 = talloc_size(pool, 20); -	p3 = talloc_size(p1, 50); -	p4 = talloc_size(p3, 1000); - -	talloc_free(pool); - -	return true; -} - -struct torture_context; -bool torture_local_talloc(struct torture_context *tctx) -{ -	bool ret = true; - -	setlinebuf(stdout); - -	talloc_disable_null_tracking(); -	talloc_enable_null_tracking(); - -	ret &= test_ref1(); -	ret &= test_ref2(); -	ret &= test_ref3(); -	ret &= test_ref4(); -	ret &= test_unlink1();  -	ret &= test_misc(); -	ret &= test_realloc(); -	ret &= test_realloc_child();  -	ret &= test_steal();  -	ret &= test_move();  -	ret &= test_unref_reparent(); -	ret &= test_realloc_fn();  -	ret &= test_type(); -	ret &= test_lifeless();  -	ret &= test_loop(); -	ret &= test_free_parent_deny_child();  -	ret &= test_talloc_ptrtype(); -	ret &= test_talloc_free_in_destructor(); -	ret &= test_pool(); - -	if (ret) { -		ret &= test_speed(); -	} -	ret &= test_autofree(); - -	return ret; -} - -#if _SAMBA_BUILD_ < 4 -int main(void) -{ -	bool ret = torture_local_talloc(NULL); -	if (!ret) -		return -1; -	return 0; -} -#endif diff --git a/source4/lib/talloc/web/index.html b/source4/lib/talloc/web/index.html deleted file mode 100644 index 5deab93665..0000000000 --- a/source4/lib/talloc/web/index.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> -<HTML> -<HEAD> -<TITLE>talloc</TITLE> -</HEAD> -<BODY BGCOLOR="#ffffff" TEXT="#000000" VLINK="#292555" LINK="#292555" ALINK="#cc0033"> - -<h1>talloc</h1> - -talloc is a hierarchical pool based memory allocator with -destructors. It is the core memory allocator used in Samba4, and has -made a huge difference in many aspects of Samba4 development.<p> - -To get started with talloc, I would recommend you read the <a -href="http://samba.org/ftp/unpacked/talloc/talloc_guide.txt">talloc guide</a>. - -<h2>Discussion and bug reports</h2> - -talloc does not currently have its own mailing list or bug tracking -system. For now, please use the <a -href="https://lists.samba.org/mailman/listinfo/samba-technical">samba-technical</a> -mailing list, and the <a href="http://bugzilla.samba.org/">Samba -bugzilla</a> bug tracking system. - -<h2>Download</h2> - -You can download the latest release either via rsync or git.<br> -<br> -To fetch via git see the following guide:<br> -<a href="http://wiki.samba.org/index.php/Using_Git_for_Samba_Development">Using Git for Samba Development</a><br> -Once you have cloned the tree switch to the v4-0-test branch and cd into the source/lib/talloc directory.<br> -<br> -To fetch via rsync use this command: - -<pre> -  rsync -Pavz samba.org::ftp/unpacked/talloc . -</pre> - -<hr> -<tiny> -<a href="http://samba.org/~tridge/">Andrew Tridgell</a><br> -talloc AT tridgell.net -</tiny> - -</BODY> -</HTML> diff --git a/source4/torture/local/config.mk b/source4/torture/local/config.mk index cd1c7b1422..b57093178e 100644 --- a/source4/torture/local/config.mk +++ b/source4/torture/local/config.mk @@ -20,7 +20,7 @@ PRIVATE_DEPENDENCIES = \  TORTURE_LOCAL_OBJ_FILES = \  		$(torturesrcdir)/../lib/charset/tests/iconv.o \ -		$(torturesrcdir)/../lib/talloc/testsuite.o \ +		$(torturesrcdir)/../../talloc/testsuite.o \  		$(torturesrcdir)/../lib/replace/test/getifaddrs.o \  		$(torturesrcdir)/../lib/replace/test/os2_delete.o \  		$(torturesrcdir)/../lib/replace/test/strptime.o \  | 
