mirror of
				git://sourceware.org/git/lvm2.git
				synced 2025-11-03 08:23:48 +03:00 
			
		
		
		
	Compare commits
	
		
			67 Commits
		
	
	
		
			old-v2_00_
			...
			v1_00_08
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e3f8892003 | ||
| 
						 | 
					9d00ad5f18 | ||
| 
						 | 
					dae4344850 | ||
| 
						 | 
					aa7f3fabe2 | ||
| 
						 | 
					f93434a8ce | ||
| 
						 | 
					25dee56be9 | ||
| 
						 | 
					ce9a3f3797 | ||
| 
						 | 
					11e384920a | ||
| 
						 | 
					a0a1f1e536 | ||
| 
						 | 
					3b3d0ea9eb | ||
| 
						 | 
					2f4d78286d | ||
| 
						 | 
					677dc6f985 | ||
| 
						 | 
					d52057e732 | ||
| 
						 | 
					fa2a1cb1fb | ||
| 
						 | 
					19a0fb04ad | ||
| 
						 | 
					947352f2fe | ||
| 
						 | 
					adcbedb686 | ||
| 
						 | 
					7732f92acd | ||
| 
						 | 
					ad8a001688 | ||
| 
						 | 
					9121eada08 | ||
| 
						 | 
					49bd4d25a2 | ||
| 
						 | 
					d80b4129c6 | ||
| 
						 | 
					7edb4172d5 | ||
| 
						 | 
					c3a4677990 | ||
| 
						 | 
					5cbb893a3b | ||
| 
						 | 
					f28a2a432b | ||
| 
						 | 
					03b75a2d27 | ||
| 
						 | 
					859fe69083 | ||
| 
						 | 
					f6f2205ddb | ||
| 
						 | 
					0f9a03ef61 | ||
| 
						 | 
					9aa417c084 | ||
| 
						 | 
					7b70952f5d | ||
| 
						 | 
					edd3d07b49 | ||
| 
						 | 
					5293d0a4ec | ||
| 
						 | 
					3c8c7beae1 | ||
| 
						 | 
					9c3ba9fdcd | ||
| 
						 | 
					fb1748fb0f | ||
| 
						 | 
					0a109fbd03 | ||
| 
						 | 
					5cf64db74e | ||
| 
						 | 
					488cc94f36 | ||
| 
						 | 
					e15846bf79 | ||
| 
						 | 
					752bd00674 | ||
| 
						 | 
					7fadfcbe32 | ||
| 
						 | 
					41141e75bb | ||
| 
						 | 
					50f641e627 | ||
| 
						 | 
					c7883fd093 | ||
| 
						 | 
					4fcb24b2b1 | ||
| 
						 | 
					5003557935 | ||
| 
						 | 
					bdf1ba84da | ||
| 
						 | 
					b0b4def983 | ||
| 
						 | 
					cc184bbe9e | ||
| 
						 | 
					ad30c830aa | ||
| 
						 | 
					1d791a8af4 | ||
| 
						 | 
					e63c51cd97 | ||
| 
						 | 
					f202e32908 | ||
| 
						 | 
					26e1a08e82 | ||
| 
						 | 
					4d5119d435 | ||
| 
						 | 
					75e34ea62e | ||
| 
						 | 
					0a183d6274 | ||
| 
						 | 
					21d8060aea | ||
| 
						 | 
					9cbe906f60 | ||
| 
						 | 
					8ce4137399 | ||
| 
						 | 
					5f8a139347 | ||
| 
						 | 
					9bb009a3fe | ||
| 
						 | 
					726d65923f | ||
| 
						 | 
					8a6be4cb2d | ||
| 
						 | 
					10b06beb8e | 
							
								
								
									
										2
									
								
								BUGS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								BUGS
									
									
									
									
									
								
							@@ -1,2 +0,0 @@
 | 
			
		||||
Snapshots under 2.4.18 can deadlock due to a bug in the VM system.
 | 
			
		||||
2.4.19-pre8 is fine.
 | 
			
		||||
							
								
								
									
										18
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Makefile.in
									
									
									
									
									
								
							@@ -20,16 +20,30 @@ srcdir = @srcdir@
 | 
			
		||||
top_srcdir = @top_srcdir@
 | 
			
		||||
VPATH = @srcdir@
 | 
			
		||||
 | 
			
		||||
SUBDIRS = include man lib tools
 | 
			
		||||
SUBDIRS = include man 
 | 
			
		||||
 | 
			
		||||
ifeq ("@INTL@", "yes")
 | 
			
		||||
  SUBDIRS += po
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SUBDIRS += lib tools
 | 
			
		||||
 | 
			
		||||
ifeq ($(MAKECMDGOALS),distclean)
 | 
			
		||||
  SUBDIRS += lib/format1 \
 | 
			
		||||
	     po \
 | 
			
		||||
	     test/mm test/device test/format1 test/regex test/filters
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include make.tmpl
 | 
			
		||||
 | 
			
		||||
lib: include
 | 
			
		||||
tools: include lib
 | 
			
		||||
tools: lib
 | 
			
		||||
po: lib tools
 | 
			
		||||
 | 
			
		||||
ifeq ("@INTL@", "yes")
 | 
			
		||||
lib.pofile: include.pofile
 | 
			
		||||
tools.pofile: lib.pofile
 | 
			
		||||
po.pofile: lib.pofile tools.pofile
 | 
			
		||||
pofile: po.pofile
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README
									
									
									
									
									
								
							@@ -13,11 +13,11 @@ Tarballs are available from:
 | 
			
		||||
  ftp://ftp.sistina.com/pub/LVM2/device-mapper/
 | 
			
		||||
 | 
			
		||||
To access the CVS tree use:
 | 
			
		||||
  cvs -d :pserver:cvs@tech.sistina.com:/data/cvs login
 | 
			
		||||
  CVS password: cvs1
 | 
			
		||||
  cvs -d :pserver:cvs@tech.sistina.com:/data/cvs checkout LVM2
 | 
			
		||||
  cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 login
 | 
			
		||||
  CVS password: cvs
 | 
			
		||||
  cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 co LVM2
 | 
			
		||||
 | 
			
		||||
Mailing list for discussion/bug reports etc.
 | 
			
		||||
  linux-lvm@sistina.com
 | 
			
		||||
  Subscribe from http://lists.sistina.com/mailman/listinfo/linux-lvm
 | 
			
		||||
  linux-lvm@redhat.com
 | 
			
		||||
  Subscribe from https://www.redhat.com/mailman/listinfo/linux-lvm
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								WHATS_NEW
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								WHATS_NEW
									
									
									
									
									
								
							@@ -1,3 +1,20 @@
 | 
			
		||||
Friday 14th November 2003
 | 
			
		||||
=========================
 | 
			
		||||
Some bug fixes & minor enhancements, including:
 | 
			
		||||
  Backwards compatibility with LVM1 metadata improved.
 | 
			
		||||
  Missing man pages written.
 | 
			
		||||
  Tool error codes made more consistent.
 | 
			
		||||
  vgmknodes written.
 | 
			
		||||
  O_DIRECT can be turned off if it doesn't work in your kernel.
 | 
			
		||||
  dumpconfig to display the active configuration file
 | 
			
		||||
 | 
			
		||||
You need to update libdevmapper before using 'vgmknodes' or 'vgscan --mknodes'.
 | 
			
		||||
If your root filesystem is on an LV, you should run one of those two
 | 
			
		||||
commands to fix up the special files in /dev in your real root filesystem 
 | 
			
		||||
after finishing with your initrd.  Also, remember you can use
 | 
			
		||||
'vgchange --ignorelockingfailure' on your initrd if the tool fails because
 | 
			
		||||
it can't write a lock file to a read-only filesystem.
 | 
			
		||||
 | 
			
		||||
Wednesday 30th April 2003
 | 
			
		||||
=========================
 | 
			
		||||
A pvmove implementation is now available for the new metadata format.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										537
									
								
								autoconf/config.guess
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										537
									
								
								autoconf/config.guess
									
									
									
									
										vendored
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
# Attempt to guess a canonical system name.
 | 
			
		||||
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 | 
			
		||||
#   Free Software Foundation, Inc.
 | 
			
		||||
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 | 
			
		||||
#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 | 
			
		||||
 | 
			
		||||
timestamp='2001-09-04'
 | 
			
		||||
timestamp='2003-06-17'
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
@@ -24,8 +24,9 @@ timestamp='2001-09-04'
 | 
			
		||||
# configuration script generated by Autoconf, you may include it under
 | 
			
		||||
# the same distribution terms that you use for the rest of that program.
 | 
			
		||||
 | 
			
		||||
# Written by Per Bothner <bothner@cygnus.com>.
 | 
			
		||||
# Please send patches to <config-patches@gnu.org>.
 | 
			
		||||
# 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
 | 
			
		||||
@@ -87,30 +88,42 @@ if test $# != 0; then
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
trap 'exit 1' 1 2 15
 | 
			
		||||
 | 
			
		||||
dummy=dummy-$$
 | 
			
		||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; 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.
 | 
			
		||||
 | 
			
		||||
# CC_FOR_BUILD -- compiler used by this script.
 | 
			
		||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
 | 
			
		||||
# use `HOST_CC' if defined, but it is deprecated.
 | 
			
		||||
 | 
			
		||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
 | 
			
		||||
 ,,)    echo "int dummy(){}" > $dummy.c ;
 | 
			
		||||
	for c in cc gcc c89 ; do
 | 
			
		||||
	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
 | 
			
		||||
	  if test $? = 0 ; then
 | 
			
		||||
# 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 ;
 | 
			
		||||
	rm -f $dummy.c $dummy.o $dummy.rel ;
 | 
			
		||||
	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'
 | 
			
		||||
esac ;'
 | 
			
		||||
 | 
			
		||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 | 
			
		||||
# (ghazi@noc.rutgers.edu 1994-08-24)
 | 
			
		||||
@@ -127,29 +140,30 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 | 
			
		||||
 | 
			
		||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 | 
			
		||||
    *:NetBSD:*:*)
 | 
			
		||||
	# Netbsd (nbsd) targets should (where applicable) match one or
 | 
			
		||||
	# 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.
 | 
			
		||||
	# Determine the machine/vendor (is the vendor relevant).
 | 
			
		||||
	case "${UNAME_MACHINE}" in
 | 
			
		||||
	    amiga) machine=m68k-unknown ;;
 | 
			
		||||
	    arm32) machine=arm-unknown ;;
 | 
			
		||||
	    atari*) machine=m68k-atari ;;
 | 
			
		||||
	    sun3*) machine=m68k-sun ;;
 | 
			
		||||
	    mac68k) machine=m68k-apple ;;
 | 
			
		||||
	    macppc) machine=powerpc-apple ;;
 | 
			
		||||
	    hp3[0-9][05]) machine=m68k-hp ;;
 | 
			
		||||
	    ibmrt|romp-ibm) machine=romp-ibm ;;
 | 
			
		||||
	    *) machine=${UNAME_MACHINE}-unknown ;;
 | 
			
		||||
	#
 | 
			
		||||
	# 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}" in
 | 
			
		||||
	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
 | 
			
		||||
	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
 | 
			
		||||
@@ -166,75 +180,112 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
	# The OS release
 | 
			
		||||
	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
 | 
			
		||||
	# 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 0 ;;
 | 
			
		||||
    amiga:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    arc:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    hp300:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mac68k:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    macppc:OpenBSD:*:*)
 | 
			
		||||
	echo powerpc-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mvme68k:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mvme88k:OpenBSD:*:*)
 | 
			
		||||
	echo m88k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mvmeppc:OpenBSD:*:*)
 | 
			
		||||
	echo powerpc-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    pmax:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sgi:OpenBSD:*:*)
 | 
			
		||||
	echo mipseb-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sun3:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    wgrisc:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:OpenBSD:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    alpha:OSF1:*:*)
 | 
			
		||||
	if test $UNAME_RELEASE = "V4.0"; then
 | 
			
		||||
		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 | 
			
		||||
	fi
 | 
			
		||||
	# 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 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.
 | 
			
		||||
	cat <<EOF >$dummy.s
 | 
			
		||||
	.data
 | 
			
		||||
\$Lformat:
 | 
			
		||||
	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
 | 
			
		||||
 | 
			
		||||
	.text
 | 
			
		||||
	.globl main
 | 
			
		||||
	.align 4
 | 
			
		||||
	.ent main
 | 
			
		||||
main:
 | 
			
		||||
	.frame \$30,16,\$26,0
 | 
			
		||||
	ldgp \$29,0(\$27)
 | 
			
		||||
	.prologue 1
 | 
			
		||||
	.long 0x47e03d80 # implver \$0
 | 
			
		||||
	lda \$2,-1
 | 
			
		||||
	.long 0x47e20c21 # amask \$2,\$1
 | 
			
		||||
	lda \$16,\$Lformat
 | 
			
		||||
	mov \$0,\$17
 | 
			
		||||
	not \$1,\$18
 | 
			
		||||
	jsr \$26,printf
 | 
			
		||||
	ldgp \$29,0(\$26)
 | 
			
		||||
	mov 0,\$16
 | 
			
		||||
	jsr \$26,exit
 | 
			
		||||
	.end main
 | 
			
		||||
EOF
 | 
			
		||||
	eval $set_cc_for_build
 | 
			
		||||
	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
 | 
			
		||||
	if test "$?" = 0 ; then
 | 
			
		||||
		case `./$dummy` in
 | 
			
		||||
			0-0)
 | 
			
		||||
				UNAME_MACHINE="alpha"
 | 
			
		||||
				;;
 | 
			
		||||
			1-0)
 | 
			
		||||
				UNAME_MACHINE="alphaev5"
 | 
			
		||||
				;;
 | 
			
		||||
			1-1)
 | 
			
		||||
				UNAME_MACHINE="alphaev56"
 | 
			
		||||
				;;
 | 
			
		||||
			1-101)
 | 
			
		||||
				UNAME_MACHINE="alphapca56"
 | 
			
		||||
				;;
 | 
			
		||||
			2-303)
 | 
			
		||||
				UNAME_MACHINE="alphaev6"
 | 
			
		||||
				;;
 | 
			
		||||
			2-307)
 | 
			
		||||
				UNAME_MACHINE="alphaev67"
 | 
			
		||||
				;;
 | 
			
		||||
			2-1307)
 | 
			
		||||
				UNAME_MACHINE="alphaev68"
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
	fi
 | 
			
		||||
	rm -f $dummy.s $dummy
 | 
			
		||||
	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Alpha*:OpenVMS:*:*)
 | 
			
		||||
	echo alpha-hp-vms
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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
 | 
			
		||||
@@ -247,29 +298,11 @@ EOF
 | 
			
		||||
    Amiga*:UNIX_System_V:4.0:*)
 | 
			
		||||
	echo m68k-unknown-sysv4
 | 
			
		||||
	exit 0;;
 | 
			
		||||
    amiga:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:[Aa]miga[Oo][Ss]:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-amigaos
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    arc64:OpenBSD:*:*)
 | 
			
		||||
	echo mips64el-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    arc:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    hkmips:OpenBSD:*:*)
 | 
			
		||||
	echo mips-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    pmax:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sgi:OpenBSD:*:*)
 | 
			
		||||
	echo mips-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    wgrisc:OpenBSD:*:*)
 | 
			
		||||
	echo mipsel-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
    *:[Mm]orph[Oo][Ss]:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-morphos
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:OS/390:*:*)
 | 
			
		||||
	echo i370-ibm-openedition
 | 
			
		||||
@@ -291,6 +324,13 @@ EOF
 | 
			
		||||
    NILE*:*:*:dcosx)
 | 
			
		||||
	echo pyramid-pyramid-svr4
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    DRS?6000:unix:4.0:6*)
 | 
			
		||||
	echo sparc-icl-nx6
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    DRS?6000:UNIX_SV:4.2*:7*)
 | 
			
		||||
	case `/usr/bin/uname -p` in
 | 
			
		||||
	    sparc) echo sparc-icl-nx7 && exit 0 ;;
 | 
			
		||||
	esac ;;
 | 
			
		||||
    sun4H:SunOS:5.*:*)
 | 
			
		||||
	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -319,7 +359,7 @@ EOF
 | 
			
		||||
	echo m68k-sun-sunos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sun*:*:4.2BSD:*)
 | 
			
		||||
	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 | 
			
		||||
	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)
 | 
			
		||||
@@ -333,12 +373,6 @@ EOF
 | 
			
		||||
    aushp:SunOS:*:*)
 | 
			
		||||
	echo sparc-auspex-sunos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sparc*:NetBSD:*)
 | 
			
		||||
	echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    atari*:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    # 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
 | 
			
		||||
@@ -365,18 +399,6 @@ EOF
 | 
			
		||||
    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
 | 
			
		||||
        echo m68k-unknown-mint${UNAME_RELEASE}
 | 
			
		||||
        exit 0 ;;
 | 
			
		||||
    sun3*:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mac68k:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mvme68k:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mvme88k:OpenBSD:*:*)
 | 
			
		||||
	echo m88k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    powerpc:machten:*:*)
 | 
			
		||||
	echo powerpc-apple-machten${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -415,15 +437,20 @@ EOF
 | 
			
		||||
	  exit (-1);
 | 
			
		||||
	}
 | 
			
		||||
EOF
 | 
			
		||||
	$CC_FOR_BUILD $dummy.c -o $dummy \
 | 
			
		||||
	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
 | 
			
		||||
	  && rm -f $dummy.c $dummy && exit 0
 | 
			
		||||
	rm -f $dummy.c $dummy
 | 
			
		||||
	$CC_FOR_BUILD -o $dummy $dummy.c \
 | 
			
		||||
	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
 | 
			
		||||
	  && exit 0
 | 
			
		||||
	echo mips-mips-riscos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Motorola:PowerMAX_OS:*:*)
 | 
			
		||||
	echo powerpc-motorola-powermax
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Motorola:*:4.3:PL8-*)
 | 
			
		||||
	echo powerpc-harris-powermax
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 | 
			
		||||
	echo powerpc-harris-powermax
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Night_Hawk:Power_UNIX:*:*)
 | 
			
		||||
	echo powerpc-harris-powerunix
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -496,8 +523,7 @@ EOF
 | 
			
		||||
			exit(0);
 | 
			
		||||
			}
 | 
			
		||||
EOF
 | 
			
		||||
		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
 | 
			
		||||
		rm -f $dummy.c $dummy
 | 
			
		||||
		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 | 
			
		||||
		echo rs6000-ibm-aix3.2.5
 | 
			
		||||
	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 | 
			
		||||
		echo rs6000-ibm-aix3.2.4
 | 
			
		||||
@@ -506,7 +532,7 @@ EOF
 | 
			
		||||
	fi
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:AIX:*:[45])
 | 
			
		||||
	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
 | 
			
		||||
	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
 | 
			
		||||
@@ -546,10 +572,8 @@ EOF
 | 
			
		||||
	    9000/31? )            HP_ARCH=m68000 ;;
 | 
			
		||||
	    9000/[34]?? )         HP_ARCH=m68k ;;
 | 
			
		||||
	    9000/[678][0-9][0-9])
 | 
			
		||||
              case "${HPUX_REV}" in
 | 
			
		||||
                11.[0-9][0-9])
 | 
			
		||||
                  if [ -x /usr/bin/getconf ]; then
 | 
			
		||||
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
 | 
			
		||||
		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
 | 
			
		||||
@@ -558,13 +582,13 @@ EOF
 | 
			
		||||
                        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 ;;
 | 
			
		||||
              esac
 | 
			
		||||
              if [ "${HP_ARCH}" = "" ]; then
 | 
			
		||||
	      eval $set_cc_for_build
 | 
			
		||||
              sed 's/^              //' << EOF >$dummy.c
 | 
			
		||||
		fi
 | 
			
		||||
		if [ "${HP_ARCH}" = "" ]; then
 | 
			
		||||
		    eval $set_cc_for_build
 | 
			
		||||
		    sed 's/^              //' << EOF >$dummy.c
 | 
			
		||||
 | 
			
		||||
              #define _HPUX_SOURCE
 | 
			
		||||
              #include <stdlib.h>
 | 
			
		||||
@@ -597,11 +621,21 @@ EOF
 | 
			
		||||
                  exit (0);
 | 
			
		||||
              }
 | 
			
		||||
EOF
 | 
			
		||||
	    (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
 | 
			
		||||
	    if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
 | 
			
		||||
	    rm -f $dummy.c $dummy
 | 
			
		||||
	fi ;;
 | 
			
		||||
		    (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
 | 
			
		||||
	    # avoid double evaluation of $set_cc_for_build
 | 
			
		||||
	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
 | 
			
		||||
	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
 | 
			
		||||
	    then
 | 
			
		||||
		HP_ARCH="hppa2.0w"
 | 
			
		||||
	    else
 | 
			
		||||
		HP_ARCH="hppa64"
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    ia64:HP-UX:*:*)
 | 
			
		||||
@@ -635,8 +669,7 @@ EOF
 | 
			
		||||
	  exit (0);
 | 
			
		||||
	}
 | 
			
		||||
EOF
 | 
			
		||||
	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
 | 
			
		||||
	rm -f $dummy.c $dummy
 | 
			
		||||
	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 | 
			
		||||
	echo unknown-hitachi-hiuxwe2
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 | 
			
		||||
@@ -664,9 +697,6 @@ EOF
 | 
			
		||||
    parisc*:Lites*:*:*)
 | 
			
		||||
	echo hppa1.1-hp-lites
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    hppa*:OpenBSD:*:*)
 | 
			
		||||
	echo hppa-unknown-openbsd
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 | 
			
		||||
	echo c1-convex-bsd
 | 
			
		||||
        exit 0 ;;
 | 
			
		||||
@@ -685,9 +715,6 @@ EOF
 | 
			
		||||
    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 | 
			
		||||
	echo c4-convex-bsd
 | 
			
		||||
        exit 0 ;;
 | 
			
		||||
    CRAY*X-MP:*:*:*)
 | 
			
		||||
	echo xmp-cray-unicos
 | 
			
		||||
        exit 0 ;;
 | 
			
		||||
    CRAY*Y-MP:*:*:*)
 | 
			
		||||
	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -700,27 +727,21 @@ EOF
 | 
			
		||||
    CRAY*TS:*:*:*)
 | 
			
		||||
	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    CRAY*T3D:*:*:*)
 | 
			
		||||
	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    CRAY*T3E:*:*:*)
 | 
			
		||||
	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    CRAY*SV1:*:*:*)
 | 
			
		||||
	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    CRAY-2:*:*:*)
 | 
			
		||||
	echo cray2-cray-unicos
 | 
			
		||||
        exit 0 ;;
 | 
			
		||||
    *:UNICOS/mp:*:*)
 | 
			
		||||
	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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 0 ;;
 | 
			
		||||
    hp300:OpenBSD:*:*)
 | 
			
		||||
	echo m68k-unknown-openbsd${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -730,11 +751,19 @@ EOF
 | 
			
		||||
    *:BSD/OS:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:FreeBSD:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:OpenBSD:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
 | 
			
		||||
    *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
 | 
			
		||||
	# Determine whether the default compiler uses glibc.
 | 
			
		||||
	eval $set_cc_for_build
 | 
			
		||||
	sed 's/^	//' << EOF >$dummy.c
 | 
			
		||||
	#include <features.h>
 | 
			
		||||
	#if __GLIBC__ >= 2
 | 
			
		||||
	LIBC=gnu
 | 
			
		||||
	#else
 | 
			
		||||
	LIBC=
 | 
			
		||||
	#endif
 | 
			
		||||
EOF
 | 
			
		||||
	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*:CYGWIN*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-cygwin
 | 
			
		||||
@@ -745,11 +774,17 @@ EOF
 | 
			
		||||
    i*:PW*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-pw32
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    x86:Interix*:[34]*)
 | 
			
		||||
	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 | 
			
		||||
	echo i${UNAME_MACHINE}-pc-mks
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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 i386-pc-interix
 | 
			
		||||
	echo i586-pc-interix
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*:UWIN*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-uwin
 | 
			
		||||
@@ -769,17 +804,52 @@ EOF
 | 
			
		||||
    arm*:Linux:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    cris:Linux:*:*)
 | 
			
		||||
	echo cris-axis-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    ia64:Linux:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-linux
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    m68*:Linux:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mips:Linux:*:*)
 | 
			
		||||
	case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
 | 
			
		||||
	  big)    echo mips-unknown-linux-gnu && exit 0 ;;
 | 
			
		||||
	  little) echo mipsel-unknown-linux-gnu && exit 0 ;;
 | 
			
		||||
	esac
 | 
			
		||||
	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 0
 | 
			
		||||
	;;
 | 
			
		||||
    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 0
 | 
			
		||||
	;;
 | 
			
		||||
    ppc:Linux:*:*)
 | 
			
		||||
	echo powerpc-unknown-linux-gnu
 | 
			
		||||
@@ -815,6 +885,9 @@ EOF
 | 
			
		||||
    s390:Linux:*:* | s390x:Linux:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-ibm-linux
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sh64*:Linux:*:*)
 | 
			
		||||
    	echo ${UNAME_MACHINE}-unknown-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    sh*:Linux:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-linux-gnu
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -828,7 +901,8 @@ EOF
 | 
			
		||||
	# 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.
 | 
			
		||||
	ld_supported_targets=`cd /; ld --help 2>&1 \
 | 
			
		||||
	# 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: *//
 | 
			
		||||
@@ -840,7 +914,7 @@ EOF
 | 
			
		||||
		;;
 | 
			
		||||
	  a.out-i386-linux)
 | 
			
		||||
		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
 | 
			
		||||
		exit 0 ;;		
 | 
			
		||||
		exit 0 ;;
 | 
			
		||||
	  coff-i386)
 | 
			
		||||
		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
 | 
			
		||||
		exit 0 ;;
 | 
			
		||||
@@ -852,32 +926,28 @@ EOF
 | 
			
		||||
	esac
 | 
			
		||||
	# Determine whether the default compiler is a.out or elf
 | 
			
		||||
	eval $set_cc_for_build
 | 
			
		||||
	cat >$dummy.c <<EOF
 | 
			
		||||
#include <features.h>
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
#include <stdio.h>  /* for printf() prototype */
 | 
			
		||||
	int main (int argc, char *argv[]) {
 | 
			
		||||
#else
 | 
			
		||||
	int main (argc, argv) int argc; char *argv[]; {
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef __ELF__
 | 
			
		||||
# ifdef __GLIBC__
 | 
			
		||||
#  if __GLIBC__ >= 2
 | 
			
		||||
    printf ("%s-pc-linux-gnu\n", argv[1]);
 | 
			
		||||
#  else
 | 
			
		||||
    printf ("%s-pc-linux-gnulibc1\n", argv[1]);
 | 
			
		||||
#  endif
 | 
			
		||||
# else
 | 
			
		||||
   printf ("%s-pc-linux-gnulibc1\n", argv[1]);
 | 
			
		||||
# endif
 | 
			
		||||
#else
 | 
			
		||||
  printf ("%s-pc-linux-gnuaout\n", argv[1]);
 | 
			
		||||
#endif
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
	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
 | 
			
		||||
EOF
 | 
			
		||||
	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
 | 
			
		||||
	rm -f $dummy.c $dummy
 | 
			
		||||
	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
 | 
			
		||||
	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
 | 
			
		||||
	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
 | 
			
		||||
	;;
 | 
			
		||||
    i*86:DYNIX/ptx:4*:*)
 | 
			
		||||
@@ -894,6 +964,23 @@ EOF
 | 
			
		||||
        # Use sysv4.2uw... so that sysv4* matches it.
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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 0 ;;
 | 
			
		||||
    i*86:XTS-300:*:STOP)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-stop
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:atheos:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-atheos
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 | 
			
		||||
	echo i386-unknown-lynxos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:*DOS:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-msdosdjgpp
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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
 | 
			
		||||
@@ -915,22 +1002,19 @@ EOF
 | 
			
		||||
		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|egrep Release|sed -e 's/.*= //')`
 | 
			
		||||
		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
 | 
			
		||||
		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
 | 
			
		||||
		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|egrep '^Machine.*Pent ?II' >/dev/null) \
 | 
			
		||||
		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
 | 
			
		||||
			&& UNAME_MACHINE=i686
 | 
			
		||||
		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
 | 
			
		||||
		(/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 0 ;;
 | 
			
		||||
    i*86:*DOS:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-pc-msdosdjgpp
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    pc:*:*:*)
 | 
			
		||||
	# Left here for compatibility:
 | 
			
		||||
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
 | 
			
		||||
@@ -954,9 +1038,15 @@ EOF
 | 
			
		||||
	# "miniframe"
 | 
			
		||||
	echo m68010-convergent-sysv
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    mc68k:UNIX:SYSTEM5:3.51m)
 | 
			
		||||
	echo m68k-convergent-sysv
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    M680?0:D-NIX:5.3:*)
 | 
			
		||||
	echo m68k-diab-dnix
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    M68*:*:R3V[567]*:*)
 | 
			
		||||
	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
 | 
			
		||||
    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
 | 
			
		||||
    3[34]??:*: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)
 | 
			
		||||
	OS_REL=''
 | 
			
		||||
	test -r /etc/.relid \
 | 
			
		||||
	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 | 
			
		||||
@@ -973,9 +1063,6 @@ EOF
 | 
			
		||||
    mc68030:UNIX_System_V:4.*:*)
 | 
			
		||||
	echo m68k-atari-sysv4
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 | 
			
		||||
	echo i386-unknown-lynxos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    TSUNAMI:LynxOS:2.*:*)
 | 
			
		||||
	echo sparc-unknown-lynxos${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -1047,6 +1134,9 @@ EOF
 | 
			
		||||
    SX-5:SUPER-UX:*:*)
 | 
			
		||||
	echo sx5-nec-superux${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    SX-6:SUPER-UX:*:*)
 | 
			
		||||
	echo sx6-nec-superux${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    Power*:Rhapsody:*:*)
 | 
			
		||||
	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -1054,18 +1144,24 @@ EOF
 | 
			
		||||
	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:Darwin:*:*)
 | 
			
		||||
	echo `uname -p`-apple-darwin${UNAME_RELEASE}
 | 
			
		||||
	case `uname -p` in
 | 
			
		||||
	    *86) UNAME_PROCESSOR=i686 ;;
 | 
			
		||||
	    powerpc) UNAME_PROCESSOR=powerpc ;;
 | 
			
		||||
	esac
 | 
			
		||||
	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:procnto*:*:* | *:QNX:[0123456789]*:*)
 | 
			
		||||
	if test "${UNAME_MACHINE}" = "x86pc"; then
 | 
			
		||||
	UNAME_PROCESSOR=`uname -p`
 | 
			
		||||
	if test "$UNAME_PROCESSOR" = "x86"; then
 | 
			
		||||
		UNAME_PROCESSOR=i386
 | 
			
		||||
		UNAME_MACHINE=pc
 | 
			
		||||
	fi
 | 
			
		||||
	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
 | 
			
		||||
	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:QNX:*:4*)
 | 
			
		||||
	echo i386-pc-qnx
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    NSR-[KW]:NONSTOP_KERNEL:*:*)
 | 
			
		||||
    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
 | 
			
		||||
	echo nsr-tandem-nsk${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    *:NonStop-UX:*:*)
 | 
			
		||||
@@ -1088,11 +1184,6 @@ EOF
 | 
			
		||||
	fi
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-plan9
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    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 0 ;;
 | 
			
		||||
    *:TOPS-10:*:*)
 | 
			
		||||
	echo pdp10-unknown-tops10
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
@@ -1111,11 +1202,8 @@ EOF
 | 
			
		||||
    *:ITS:*:*)
 | 
			
		||||
	echo pdp10-unknown-its
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:XTS-300:*:STOP)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-stop
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
    i*86:atheos:*:*)
 | 
			
		||||
	echo ${UNAME_MACHINE}-unknown-atheos
 | 
			
		||||
    SEI:*:*:SEIUX)
 | 
			
		||||
        echo mips-sei-seiux${UNAME_RELEASE}
 | 
			
		||||
	exit 0 ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
@@ -1237,8 +1325,7 @@ main ()
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
 | 
			
		||||
rm -f $dummy.c $dummy
 | 
			
		||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
 | 
			
		||||
 | 
			
		||||
# Apollos put the system type in the environment.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										303
									
								
								autoconf/config.sub
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										303
									
								
								autoconf/config.sub
									
									
									
									
										vendored
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
# Configuration validation subroutine script.
 | 
			
		||||
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 | 
			
		||||
#   Free Software Foundation, Inc.
 | 
			
		||||
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 | 
			
		||||
#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 | 
			
		||||
 | 
			
		||||
timestamp='2001-09-07'
 | 
			
		||||
timestamp='2003-06-17'
 | 
			
		||||
 | 
			
		||||
# This file is (in principle) common to ALL GNU software.
 | 
			
		||||
# The presence of a machine in this file suggests that SOME GNU software
 | 
			
		||||
@@ -29,7 +29,8 @@ timestamp='2001-09-07'
 | 
			
		||||
# 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>.
 | 
			
		||||
# 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.
 | 
			
		||||
@@ -117,7 +118,7 @@ esac
 | 
			
		||||
# 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* | storm-chaos* | os2-emx* | windows32-*)
 | 
			
		||||
  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
 | 
			
		||||
    os=-$maybe_os
 | 
			
		||||
    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
 | 
			
		||||
    ;;
 | 
			
		||||
@@ -226,32 +227,44 @@ case $basic_machine in
 | 
			
		||||
	1750a | 580 \
 | 
			
		||||
	| a29k \
 | 
			
		||||
	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 | 
			
		||||
	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 | 
			
		||||
	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
 | 
			
		||||
	| c4x | clipper \
 | 
			
		||||
	| d10v | d30v | dsp16xx \
 | 
			
		||||
	| fr30 \
 | 
			
		||||
	| d10v | d30v | dlx | dsp16xx \
 | 
			
		||||
	| fr30 | frv \
 | 
			
		||||
	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 | 
			
		||||
	| i370 | i860 | i960 | ia64 \
 | 
			
		||||
	| ip2k \
 | 
			
		||||
	| m32r | m68000 | m68k | m88k | mcore \
 | 
			
		||||
	| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
 | 
			
		||||
	| mips64vr4100 | mips64vr4100el | mips64vr4300 \
 | 
			
		||||
	| mips64vr4300el | mips64vr5000 | mips64vr5000el \
 | 
			
		||||
	| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
 | 
			
		||||
	| mipsisa32 \
 | 
			
		||||
	| mips | mipsbe | mipseb | mipsel | mipsle \
 | 
			
		||||
	| mips16 \
 | 
			
		||||
	| mips64 | mips64el \
 | 
			
		||||
	| mips64vr | mips64vrel \
 | 
			
		||||
	| mips64orion | mips64orionel \
 | 
			
		||||
	| mips64vr4100 | mips64vr4100el \
 | 
			
		||||
	| mips64vr4300 | mips64vr4300el \
 | 
			
		||||
	| mips64vr5000 | mips64vr5000el \
 | 
			
		||||
	| mipsisa32 | mipsisa32el \
 | 
			
		||||
	| mipsisa32r2 | mipsisa32r2el \
 | 
			
		||||
	| mipsisa64 | mipsisa64el \
 | 
			
		||||
	| mipsisa64sb1 | mipsisa64sb1el \
 | 
			
		||||
	| mipsisa64sr71k | mipsisa64sr71kel \
 | 
			
		||||
	| mipstx39 | mipstx39el \
 | 
			
		||||
	| mn10200 | mn10300 \
 | 
			
		||||
	| msp430 \
 | 
			
		||||
	| ns16k | ns32k \
 | 
			
		||||
	| openrisc \
 | 
			
		||||
	| openrisc | or32 \
 | 
			
		||||
	| pdp10 | pdp11 | pj | pjl \
 | 
			
		||||
	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 | 
			
		||||
	| pyramid \
 | 
			
		||||
	| s390 | s390x \
 | 
			
		||||
	| sh | sh[34] | sh[34]eb | shbe | shle \
 | 
			
		||||
	| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
 | 
			
		||||
	| stormy16 | strongarm \
 | 
			
		||||
	| tahoe | thumb | tic80 | tron \
 | 
			
		||||
	| v850 \
 | 
			
		||||
	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
 | 
			
		||||
	| sh64 | sh64le \
 | 
			
		||||
	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
 | 
			
		||||
	| strongarm \
 | 
			
		||||
	| tahoe | thumb | tic4x | tic80 | tron \
 | 
			
		||||
	| v850 | v850e \
 | 
			
		||||
	| we32k \
 | 
			
		||||
	| x86 | xscale \
 | 
			
		||||
	| x86 | xscale | xstormy16 | xtensa \
 | 
			
		||||
	| z8k)
 | 
			
		||||
		basic_machine=$basic_machine-unknown
 | 
			
		||||
		;;
 | 
			
		||||
@@ -278,38 +291,55 @@ case $basic_machine in
 | 
			
		||||
	580-* \
 | 
			
		||||
	| a29k-* \
 | 
			
		||||
	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 | 
			
		||||
	| alphapca5[67]-* | arc-* \
 | 
			
		||||
	| arm-*  | armbe-* | armle-* | armv*-* \
 | 
			
		||||
	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 | 
			
		||||
	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 | 
			
		||||
	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 | 
			
		||||
	| avr-* \
 | 
			
		||||
	| bs2000-* \
 | 
			
		||||
	| c[123]* | c30-* | [cjt]90-* | c54x-* \
 | 
			
		||||
	| clipper-* | cray2-* | cydra-* \
 | 
			
		||||
	| d10v-* | d30v-* \
 | 
			
		||||
	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
 | 
			
		||||
	| clipper-* | cydra-* \
 | 
			
		||||
	| d10v-* | d30v-* | dlx-* \
 | 
			
		||||
	| elxsi-* \
 | 
			
		||||
	| f30[01]-* | f700-* | fr30-* | fx80-* \
 | 
			
		||||
	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
 | 
			
		||||
	| h8300-* | h8500-* \
 | 
			
		||||
	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 | 
			
		||||
	| i*86-* | i860-* | i960-* | ia64-* \
 | 
			
		||||
	| ip2k-* \
 | 
			
		||||
	| m32r-* \
 | 
			
		||||
	| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
 | 
			
		||||
	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
 | 
			
		||||
	| m88110-* | m88k-* | mcore-* \
 | 
			
		||||
	| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
 | 
			
		||||
	| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
 | 
			
		||||
	| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
 | 
			
		||||
	| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
 | 
			
		||||
	| none-* | np1-* | ns16k-* | ns32k-* \
 | 
			
		||||
	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 | 
			
		||||
	| mips16-* \
 | 
			
		||||
	| mips64-* | mips64el-* \
 | 
			
		||||
	| mips64vr-* | mips64vrel-* \
 | 
			
		||||
	| mips64orion-* | mips64orionel-* \
 | 
			
		||||
	| mips64vr4100-* | mips64vr4100el-* \
 | 
			
		||||
	| mips64vr4300-* | mips64vr4300el-* \
 | 
			
		||||
	| mips64vr5000-* | mips64vr5000el-* \
 | 
			
		||||
	| mipsisa32-* | mipsisa32el-* \
 | 
			
		||||
	| mipsisa32r2-* | mipsisa32r2el-* \
 | 
			
		||||
	| mipsisa64-* | mipsisa64el-* \
 | 
			
		||||
	| mipsisa64sb1-* | mipsisa64sb1el-* \
 | 
			
		||||
	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 | 
			
		||||
	| mipstx39-* | mipstx39el-* \
 | 
			
		||||
	| msp430-* \
 | 
			
		||||
	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
 | 
			
		||||
	| orion-* \
 | 
			
		||||
	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 | 
			
		||||
	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 | 
			
		||||
	| pyramid-* \
 | 
			
		||||
	| romp-* | rs6000-* \
 | 
			
		||||
	| s390-* | s390x-* \
 | 
			
		||||
	| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
 | 
			
		||||
	| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
 | 
			
		||||
	| sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
 | 
			
		||||
	| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
 | 
			
		||||
	| v850-* | vax-* \
 | 
			
		||||
	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
 | 
			
		||||
	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 | 
			
		||||
	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
 | 
			
		||||
	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
 | 
			
		||||
	| tahoe-* | thumb-* \
 | 
			
		||||
	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 | 
			
		||||
	| tron-* \
 | 
			
		||||
	| v850-* | v850e-* | vax-* \
 | 
			
		||||
	| we32k-* \
 | 
			
		||||
	| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
 | 
			
		||||
	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
 | 
			
		||||
	| xtensa-* \
 | 
			
		||||
	| ymp-* \
 | 
			
		||||
	| z8k-*)
 | 
			
		||||
		;;
 | 
			
		||||
@@ -343,6 +373,9 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=a29k-none
 | 
			
		||||
		os=-bsd
 | 
			
		||||
		;;
 | 
			
		||||
	amd64)
 | 
			
		||||
		basic_machine=x86_64-pc
 | 
			
		||||
		;;
 | 
			
		||||
	amdahl)
 | 
			
		||||
		basic_machine=580-amdahl
 | 
			
		||||
		os=-sysv
 | 
			
		||||
@@ -374,6 +407,10 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=ns32k-sequent
 | 
			
		||||
		os=-dynix
 | 
			
		||||
		;;
 | 
			
		||||
	c90)
 | 
			
		||||
		basic_machine=c90-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
	convex-c1)
 | 
			
		||||
		basic_machine=c1-convex
 | 
			
		||||
		os=-bsd
 | 
			
		||||
@@ -394,16 +431,8 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=c38-convex
 | 
			
		||||
		os=-bsd
 | 
			
		||||
		;;
 | 
			
		||||
	cray | ymp)
 | 
			
		||||
		basic_machine=ymp-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
	cray2)
 | 
			
		||||
		basic_machine=cray2-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
	[cjt]90)
 | 
			
		||||
		basic_machine=${basic_machine}-cray
 | 
			
		||||
	cray | j90)
 | 
			
		||||
		basic_machine=j90-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
	crds | unos)
 | 
			
		||||
@@ -418,6 +447,14 @@ case $basic_machine in
 | 
			
		||||
	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
 | 
			
		||||
@@ -598,14 +635,6 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=m68k-atari
 | 
			
		||||
		os=-mint
 | 
			
		||||
		;;
 | 
			
		||||
	mipsel*-linux*)
 | 
			
		||||
		basic_machine=mipsel-unknown
 | 
			
		||||
		os=-linux-gnu
 | 
			
		||||
		;;
 | 
			
		||||
	mips*-linux*)
 | 
			
		||||
		basic_machine=mips-unknown
 | 
			
		||||
		os=-linux-gnu
 | 
			
		||||
		;;
 | 
			
		||||
	mips3*-*)
 | 
			
		||||
		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
 | 
			
		||||
		;;
 | 
			
		||||
@@ -620,6 +649,10 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=m68k-rom68k
 | 
			
		||||
		os=-coff
 | 
			
		||||
		;;
 | 
			
		||||
	morphos)
 | 
			
		||||
		basic_machine=powerpc-unknown
 | 
			
		||||
		os=-morphos
 | 
			
		||||
		;;
 | 
			
		||||
	msdos)
 | 
			
		||||
		basic_machine=i386-pc
 | 
			
		||||
		os=-msdos
 | 
			
		||||
@@ -692,6 +725,10 @@ case $basic_machine in
 | 
			
		||||
	np1)
 | 
			
		||||
		basic_machine=np1-gould
 | 
			
		||||
		;;
 | 
			
		||||
	nv1)
 | 
			
		||||
		basic_machine=nv1-cray
 | 
			
		||||
		os=-unicosmp
 | 
			
		||||
		;;
 | 
			
		||||
	nsr-tandem)
 | 
			
		||||
		basic_machine=nsr-tandem
 | 
			
		||||
		;;
 | 
			
		||||
@@ -699,6 +736,10 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=hppa1.1-oki
 | 
			
		||||
		os=-proelf
 | 
			
		||||
		;;
 | 
			
		||||
	or32 | or32-*)
 | 
			
		||||
		basic_machine=or32-unknown
 | 
			
		||||
		os=-coff
 | 
			
		||||
		;;
 | 
			
		||||
	OSE68000 | ose68000)
 | 
			
		||||
		basic_machine=m68000-ericsson
 | 
			
		||||
		os=-ose
 | 
			
		||||
@@ -721,49 +762,55 @@ case $basic_machine in
 | 
			
		||||
	pbb)
 | 
			
		||||
		basic_machine=m68k-tti
 | 
			
		||||
		;;
 | 
			
		||||
        pc532 | pc532-*)
 | 
			
		||||
	pc532 | pc532-*)
 | 
			
		||||
		basic_machine=ns32k-pc532
 | 
			
		||||
		;;
 | 
			
		||||
	pentium | p5 | k5 | k6 | nexgen)
 | 
			
		||||
	pentium | p5 | k5 | k6 | nexgen | viac3)
 | 
			
		||||
		basic_machine=i586-pc
 | 
			
		||||
		;;
 | 
			
		||||
	pentiumpro | p6 | 6x86 | athlon)
 | 
			
		||||
	pentiumpro | p6 | 6x86 | athlon | athlon_*)
 | 
			
		||||
		basic_machine=i686-pc
 | 
			
		||||
		;;
 | 
			
		||||
	pentiumii | pentium2)
 | 
			
		||||
	pentiumii | pentium2 | pentiumiii | pentium3)
 | 
			
		||||
		basic_machine=i686-pc
 | 
			
		||||
		;;
 | 
			
		||||
	pentium-* | p5-* | k5-* | k6-* | nexgen-*)
 | 
			
		||||
	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-*)
 | 
			
		||||
	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/^[^-]*-//'`
 | 
			
		||||
		;;
 | 
			
		||||
@@ -784,10 +831,26 @@ case $basic_machine in
 | 
			
		||||
	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
 | 
			
		||||
		;;
 | 
			
		||||
@@ -795,7 +858,10 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=sh-hitachi
 | 
			
		||||
		os=-hms
 | 
			
		||||
		;;
 | 
			
		||||
	sparclite-wrs)
 | 
			
		||||
	sh64)
 | 
			
		||||
		basic_machine=sh64-unknown
 | 
			
		||||
		;;
 | 
			
		||||
	sparclite-wrs | simso-wrs)
 | 
			
		||||
		basic_machine=sparclite-wrs
 | 
			
		||||
		os=-vxworks
 | 
			
		||||
		;;
 | 
			
		||||
@@ -862,19 +928,35 @@ case $basic_machine in
 | 
			
		||||
		os=-dynix
 | 
			
		||||
		;;
 | 
			
		||||
	t3e)
 | 
			
		||||
		basic_machine=t3e-cray
 | 
			
		||||
		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
 | 
			
		||||
		;;
 | 
			
		||||
@@ -899,8 +981,8 @@ case $basic_machine in
 | 
			
		||||
		os=-vms
 | 
			
		||||
		;;
 | 
			
		||||
	vpp*|vx|vx-*)
 | 
			
		||||
               basic_machine=f301-fujitsu
 | 
			
		||||
               ;;
 | 
			
		||||
		basic_machine=f301-fujitsu
 | 
			
		||||
		;;
 | 
			
		||||
	vxworks960)
 | 
			
		||||
		basic_machine=i960-wrs
 | 
			
		||||
		os=-vxworks
 | 
			
		||||
@@ -921,17 +1003,13 @@ case $basic_machine in
 | 
			
		||||
		basic_machine=hppa1.1-winbond
 | 
			
		||||
		os=-proelf
 | 
			
		||||
		;;
 | 
			
		||||
	windows32)
 | 
			
		||||
		basic_machine=i386-pc
 | 
			
		||||
		os=-windows32-msvcrt
 | 
			
		||||
		;;
 | 
			
		||||
	xmp)
 | 
			
		||||
		basic_machine=xmp-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
        xps | xps100)
 | 
			
		||||
	xps | xps100)
 | 
			
		||||
		basic_machine=xps100-honeywell
 | 
			
		||||
		;;
 | 
			
		||||
	ymp)
 | 
			
		||||
		basic_machine=ymp-cray
 | 
			
		||||
		os=-unicos
 | 
			
		||||
		;;
 | 
			
		||||
	z8k-*-coff)
 | 
			
		||||
		basic_machine=z8k-unknown
 | 
			
		||||
		os=-sim
 | 
			
		||||
@@ -952,13 +1030,6 @@ case $basic_machine in
 | 
			
		||||
	op60c)
 | 
			
		||||
		basic_machine=hppa1.1-oki
 | 
			
		||||
		;;
 | 
			
		||||
	mips)
 | 
			
		||||
		if [ x$os = x-linux-gnu ]; then
 | 
			
		||||
			basic_machine=mips-unknown
 | 
			
		||||
		else
 | 
			
		||||
			basic_machine=mips-mips
 | 
			
		||||
		fi
 | 
			
		||||
		;;
 | 
			
		||||
	romp)
 | 
			
		||||
		basic_machine=romp-ibm
 | 
			
		||||
		;;
 | 
			
		||||
@@ -978,13 +1049,16 @@ case $basic_machine in
 | 
			
		||||
	we32k)
 | 
			
		||||
		basic_machine=we32k-att
 | 
			
		||||
		;;
 | 
			
		||||
	sh3 | sh4 | sh3eb | sh4eb)
 | 
			
		||||
	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
 | 
			
		||||
		basic_machine=sh-unknown
 | 
			
		||||
		;;
 | 
			
		||||
	sh64)
 | 
			
		||||
		basic_machine=sh64-unknown
 | 
			
		||||
		;;
 | 
			
		||||
	sparc | sparcv9 | sparcv9b)
 | 
			
		||||
		basic_machine=sparc-sun
 | 
			
		||||
		;;
 | 
			
		||||
        cydra)
 | 
			
		||||
	cydra)
 | 
			
		||||
		basic_machine=cydra-cydrome
 | 
			
		||||
		;;
 | 
			
		||||
	orion)
 | 
			
		||||
@@ -999,10 +1073,6 @@ case $basic_machine in
 | 
			
		||||
	pmac | pmac-mpw)
 | 
			
		||||
		basic_machine=powerpc-apple
 | 
			
		||||
		;;
 | 
			
		||||
	c4x*)
 | 
			
		||||
		basic_machine=c4x-none
 | 
			
		||||
		os=-coff
 | 
			
		||||
		;;
 | 
			
		||||
	*-unknown)
 | 
			
		||||
		# Make sure to match an already-canonicalized machine name.
 | 
			
		||||
		;;
 | 
			
		||||
@@ -1065,10 +1135,12 @@ case $os in
 | 
			
		||||
	      | -chorusos* | -chorusrdb* \
 | 
			
		||||
	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 | 
			
		||||
	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
 | 
			
		||||
	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
 | 
			
		||||
	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 | 
			
		||||
	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 | 
			
		||||
	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 | 
			
		||||
	      | -os2* | -vos*)
 | 
			
		||||
	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 | 
			
		||||
	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 | 
			
		||||
	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
 | 
			
		||||
	# Remember, each alternative MUST END IN *, to match a version number.
 | 
			
		||||
		;;
 | 
			
		||||
	-qnx*)
 | 
			
		||||
@@ -1080,8 +1152,10 @@ case $os in
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
		;;
 | 
			
		||||
	-nto-qnx*)
 | 
			
		||||
		;;
 | 
			
		||||
	-nto*)
 | 
			
		||||
		os=-nto-qnx
 | 
			
		||||
		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 | 
			
		||||
		;;
 | 
			
		||||
	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
 | 
			
		||||
	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
 | 
			
		||||
@@ -1120,14 +1194,20 @@ case $os in
 | 
			
		||||
	-acis*)
 | 
			
		||||
		os=-aos
 | 
			
		||||
		;;
 | 
			
		||||
	-atheos*)
 | 
			
		||||
		os=-atheos
 | 
			
		||||
		;;
 | 
			
		||||
	-386bsd)
 | 
			
		||||
		os=-bsd
 | 
			
		||||
		;;
 | 
			
		||||
	-ctix* | -uts*)
 | 
			
		||||
		os=-sysv
 | 
			
		||||
		;;
 | 
			
		||||
	-nova*)
 | 
			
		||||
		os=-rtmk-nova
 | 
			
		||||
		;;
 | 
			
		||||
	-ns2 )
 | 
			
		||||
	        os=-nextstep2
 | 
			
		||||
		os=-nextstep2
 | 
			
		||||
		;;
 | 
			
		||||
	-nsk*)
 | 
			
		||||
		os=-nsk
 | 
			
		||||
@@ -1166,8 +1246,14 @@ case $os in
 | 
			
		||||
	-xenix)
 | 
			
		||||
		os=-xenix
 | 
			
		||||
		;;
 | 
			
		||||
        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 | 
			
		||||
	        os=-mint
 | 
			
		||||
	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 | 
			
		||||
		os=-mint
 | 
			
		||||
		;;
 | 
			
		||||
	-aros*)
 | 
			
		||||
		os=-aros
 | 
			
		||||
		;;
 | 
			
		||||
	-kaos*)
 | 
			
		||||
		os=-kaos
 | 
			
		||||
		;;
 | 
			
		||||
	-none)
 | 
			
		||||
		;;
 | 
			
		||||
@@ -1200,10 +1286,14 @@ case $basic_machine in
 | 
			
		||||
	arm*-semi)
 | 
			
		||||
		os=-aout
 | 
			
		||||
		;;
 | 
			
		||||
    c4x-* | tic4x-*)
 | 
			
		||||
        os=-coff
 | 
			
		||||
        ;;
 | 
			
		||||
	# This must come before the *-dec entry.
 | 
			
		||||
	pdp10-*)
 | 
			
		||||
		os=-tops20
 | 
			
		||||
		;;
 | 
			
		||||
        pdp11-*)
 | 
			
		||||
	pdp11-*)
 | 
			
		||||
		os=-none
 | 
			
		||||
		;;
 | 
			
		||||
	*-dec | vax-*)
 | 
			
		||||
@@ -1230,6 +1320,9 @@ case $basic_machine in
 | 
			
		||||
	mips*-*)
 | 
			
		||||
		os=-elf
 | 
			
		||||
		;;
 | 
			
		||||
	or32-*)
 | 
			
		||||
		os=-coff
 | 
			
		||||
		;;
 | 
			
		||||
	*-tti)	# must be before sparc entry or we get the wrong os.
 | 
			
		||||
		os=-sysv3
 | 
			
		||||
		;;
 | 
			
		||||
@@ -1293,19 +1386,19 @@ case $basic_machine in
 | 
			
		||||
	*-next)
 | 
			
		||||
		os=-nextstep3
 | 
			
		||||
		;;
 | 
			
		||||
        *-gould)
 | 
			
		||||
	*-gould)
 | 
			
		||||
		os=-sysv
 | 
			
		||||
		;;
 | 
			
		||||
        *-highlevel)
 | 
			
		||||
	*-highlevel)
 | 
			
		||||
		os=-bsd
 | 
			
		||||
		;;
 | 
			
		||||
	*-encore)
 | 
			
		||||
		os=-bsd
 | 
			
		||||
		;;
 | 
			
		||||
        *-sgi)
 | 
			
		||||
	*-sgi)
 | 
			
		||||
		os=-irix
 | 
			
		||||
		;;
 | 
			
		||||
        *-siemens)
 | 
			
		||||
	*-siemens)
 | 
			
		||||
		os=-sysv4
 | 
			
		||||
		;;
 | 
			
		||||
	*-masscomp)
 | 
			
		||||
@@ -1377,7 +1470,7 @@ case $basic_machine in
 | 
			
		||||
			-ptx*)
 | 
			
		||||
				vendor=sequent
 | 
			
		||||
				;;
 | 
			
		||||
			-vxsim* | -vxworks*)
 | 
			
		||||
			-vxsim* | -vxworks* | -windiss*)
 | 
			
		||||
				vendor=wrs
 | 
			
		||||
				;;
 | 
			
		||||
			-aux*)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,19 +1,38 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# install - install a program, script, or datafile
 | 
			
		||||
# This comes from X11R5 (mit/util/scripts/install.sh).
 | 
			
		||||
 | 
			
		||||
scriptversion=2003-06-13.21
 | 
			
		||||
 | 
			
		||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
 | 
			
		||||
# later released in X11R6 (xc/config/util/install.sh) with the
 | 
			
		||||
# following copyright and license.
 | 
			
		||||
#
 | 
			
		||||
# Copyright 1991 by the Massachusetts Institute of Technology
 | 
			
		||||
# Copyright (C) 1994 X Consortium
 | 
			
		||||
#
 | 
			
		||||
# Permission to use, copy, modify, distribute, and sell this software and its
 | 
			
		||||
# documentation for any purpose is hereby granted without fee, provided that
 | 
			
		||||
# the above copyright notice appear in all copies and that both that
 | 
			
		||||
# copyright notice and this permission notice appear in supporting
 | 
			
		||||
# documentation, and that the name of M.I.T. not be used in advertising or
 | 
			
		||||
# publicity pertaining to distribution of the software without specific,
 | 
			
		||||
# written prior permission.  M.I.T. makes no representations about the
 | 
			
		||||
# suitability of this software for any purpose.  It is provided "as is"
 | 
			
		||||
# without express or implied warranty.
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to
 | 
			
		||||
# deal in the Software without restriction, including without limitation the
 | 
			
		||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 | 
			
		||||
# sell copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | 
			
		||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
 | 
			
		||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#
 | 
			
		||||
# Except as contained in this notice, the name of the X Consortium shall not
 | 
			
		||||
# be used in advertising or otherwise to promote the sale, use or other deal-
 | 
			
		||||
# ings in this Software without prior written authorization from the X Consor-
 | 
			
		||||
# tium.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# FSF changes to this file are in the public domain.
 | 
			
		||||
#
 | 
			
		||||
# Calling this script install-sh is preferred over install.sh, to prevent
 | 
			
		||||
# `make' implicit rules from creating a file called install from it
 | 
			
		||||
@@ -23,13 +42,11 @@
 | 
			
		||||
# from scratch.  It can only install one file at a time, a restriction
 | 
			
		||||
# shared with many OS's install programs.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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}"
 | 
			
		||||
@@ -41,211 +58,229 @@ stripprog="${STRIPPROG-strip}"
 | 
			
		||||
rmprog="${RMPROG-rm}"
 | 
			
		||||
mkdirprog="${MKDIRPROG-mkdir}"
 | 
			
		||||
 | 
			
		||||
transformbasename=""
 | 
			
		||||
transform_arg=""
 | 
			
		||||
transformbasename=
 | 
			
		||||
transform_arg=
 | 
			
		||||
instcmd="$mvprog"
 | 
			
		||||
chmodcmd="$chmodprog 0755"
 | 
			
		||||
chowncmd=""
 | 
			
		||||
chgrpcmd=""
 | 
			
		||||
stripcmd=""
 | 
			
		||||
chowncmd=
 | 
			
		||||
chgrpcmd=
 | 
			
		||||
stripcmd=
 | 
			
		||||
rmcmd="$rmprog -f"
 | 
			
		||||
mvcmd="$mvprog"
 | 
			
		||||
src=""
 | 
			
		||||
dst=""
 | 
			
		||||
dir_arg=""
 | 
			
		||||
src=
 | 
			
		||||
dst=
 | 
			
		||||
dir_arg=
 | 
			
		||||
 | 
			
		||||
while [ x"$1" != x ]; do
 | 
			
		||||
    case $1 in
 | 
			
		||||
	-c) instcmd="$cpprog"
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
 | 
			
		||||
   or: $0 -d DIR1 DIR2...
 | 
			
		||||
 | 
			
		||||
	-d) dir_arg=true
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
 | 
			
		||||
In the second, create the directory path DIR.
 | 
			
		||||
 | 
			
		||||
	-m) chmodcmd="$chmodprog $2"
 | 
			
		||||
	    shift
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
Options:
 | 
			
		||||
-b=TRANSFORMBASENAME
 | 
			
		||||
-c         copy source (using $cpprog) instead of moving (using $mvprog).
 | 
			
		||||
-d         create directories instead of installing files.
 | 
			
		||||
-g GROUP   $chgrp installed files to GROUP.
 | 
			
		||||
-m MODE    $chmod installed files to MODE.
 | 
			
		||||
-o USER    $chown installed files to USER.
 | 
			
		||||
-s         strip installed files (using $stripprog).
 | 
			
		||||
-t=TRANSFORM
 | 
			
		||||
--help     display this help and exit.
 | 
			
		||||
--version  display version info and exit.
 | 
			
		||||
 | 
			
		||||
	-o) chowncmd="$chownprog $2"
 | 
			
		||||
	    shift
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
Environment variables override the default commands:
 | 
			
		||||
  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
	-g) chgrpcmd="$chgrpprog $2"
 | 
			
		||||
	    shift
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
while test -n "$1"; do
 | 
			
		||||
  case $1 in
 | 
			
		||||
    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
	-s) stripcmd="$stripprog"
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
    -c) instcmd=$cpprog
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
    -d) dir_arg=true
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
 | 
			
		||||
	    shift
 | 
			
		||||
	    continue;;
 | 
			
		||||
    -g) chgrpcmd="$chgrpprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        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
 | 
			
		||||
    --help) echo "$usage"; exit 0;;
 | 
			
		||||
 | 
			
		||||
    -m) chmodcmd="$chmodprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -o) chowncmd="$chownprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -s) stripcmd=$stripprog
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    --version) echo "$0 $scriptversion"; exit 0;;
 | 
			
		||||
 | 
			
		||||
    *)  if test -z "$src"; 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
 | 
			
		||||
if test -z "$src"; then
 | 
			
		||||
  echo "$0: no input file specified." >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ x"$dir_arg" != x ]; then
 | 
			
		||||
	dst=$src
 | 
			
		||||
	src=""
 | 
			
		||||
	
 | 
			
		||||
	if [ -d $dst ]; then
 | 
			
		||||
		instcmd=:
 | 
			
		||||
		chmodcmd=""
 | 
			
		||||
	else
 | 
			
		||||
		instcmd=mkdir
 | 
			
		||||
	fi
 | 
			
		||||
if test -n "$dir_arg"; then
 | 
			
		||||
  dst=$src
 | 
			
		||||
  src=
 | 
			
		||||
 | 
			
		||||
  if test -d "$dst"; then
 | 
			
		||||
    instcmd=:
 | 
			
		||||
    chmodcmd=
 | 
			
		||||
  else
 | 
			
		||||
    instcmd=$mkdirprog
 | 
			
		||||
  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 test ! -f "$src" && test ! -d "$src"; then
 | 
			
		||||
    echo "$0: $src does not exist." >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
# 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 test -z "$dst"; then
 | 
			
		||||
    echo "$0: no destination specified." >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
  # If destination is a directory, append the input filename; won't work
 | 
			
		||||
  # if double slashes aren't ignored.
 | 
			
		||||
  if test -d "$dst"; then
 | 
			
		||||
    dst=$dst/`basename "$src"`
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
## this sed command emulates the dirname command
 | 
			
		||||
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 | 
			
		||||
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
 | 
			
		||||
# (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}}"
 | 
			
		||||
if test ! -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}"
 | 
			
		||||
  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=''
 | 
			
		||||
  pathcomp=
 | 
			
		||||
 | 
			
		||||
while [ $# -ne 0 ] ; do
 | 
			
		||||
	pathcomp="${pathcomp}${1}"
 | 
			
		||||
	shift
 | 
			
		||||
 | 
			
		||||
	if [ ! -d "${pathcomp}" ] ;
 | 
			
		||||
        then
 | 
			
		||||
		$mkdirprog "${pathcomp}"
 | 
			
		||||
	else
 | 
			
		||||
		true
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	pathcomp="${pathcomp}/"
 | 
			
		||||
done
 | 
			
		||||
  while test $# -ne 0 ; do
 | 
			
		||||
    pathcomp=$pathcomp$1
 | 
			
		||||
    shift
 | 
			
		||||
    test -d "$pathcomp" || $mkdirprog "$pathcomp"
 | 
			
		||||
    pathcomp=$pathcomp/
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ x"$dir_arg" != x ]
 | 
			
		||||
then
 | 
			
		||||
	$doit $instcmd $dst &&
 | 
			
		||||
if test -n "$dir_arg"; then
 | 
			
		||||
  $doit $instcmd "$dst" \
 | 
			
		||||
    && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
 | 
			
		||||
    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
 | 
			
		||||
    && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
 | 
			
		||||
    && { test -z "$chmodcmd" || $doit $chmodcmd "$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 test -z "$transformarg"; then
 | 
			
		||||
    dstfile=`basename "$dst"`
 | 
			
		||||
  else
 | 
			
		||||
    dstfile=`basename "$dst" $transformbasename \
 | 
			
		||||
             | sed $transformarg`$transformbasename
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
# If we're going to rename the final executable, determine the name now.
 | 
			
		||||
  # don't allow the sed command to completely eliminate the filename.
 | 
			
		||||
  test -z "$dstfile" && dstfile=`basename "$dst"`
 | 
			
		||||
 | 
			
		||||
	if [ x"$transformarg" = x ] 
 | 
			
		||||
	then
 | 
			
		||||
		dstfile=`basename $dst`
 | 
			
		||||
	else
 | 
			
		||||
		dstfile=`basename $dst $transformbasename | 
 | 
			
		||||
			sed $transformarg`$transformbasename
 | 
			
		||||
	fi
 | 
			
		||||
  # Make a couple of temp file names in the proper directory.
 | 
			
		||||
  dsttmp=$dstdir/_inst.$$_
 | 
			
		||||
  rmtmp=$dstdir/_rm.$$_
 | 
			
		||||
 | 
			
		||||
# don't allow the sed command to completely eliminate the filename
 | 
			
		||||
  # Trap to clean up those temp files at exit.
 | 
			
		||||
  trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
 | 
			
		||||
  trap '(exit $?); exit' 1 2 13 15
 | 
			
		||||
 | 
			
		||||
	if [ x"$dstfile" = x ] 
 | 
			
		||||
	then
 | 
			
		||||
		dstfile=`basename $dst`
 | 
			
		||||
	else
 | 
			
		||||
		true
 | 
			
		||||
	fi
 | 
			
		||||
  # Move or copy the file name to the temp name
 | 
			
		||||
  $doit $instcmd "$src" "$dsttmp" &&
 | 
			
		||||
 | 
			
		||||
# Make a temp file name in the proper directory.
 | 
			
		||||
  # 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.
 | 
			
		||||
  #
 | 
			
		||||
  { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
 | 
			
		||||
    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
 | 
			
		||||
    && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
 | 
			
		||||
    && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
 | 
			
		||||
 | 
			
		||||
	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 
 | 
			
		||||
  # Now remove or move aside any old file at destination location.  We
 | 
			
		||||
  # try this two ways since rm can't unlink itself on some systems and
 | 
			
		||||
  # the destination file might be busy for other reasons.  In this case,
 | 
			
		||||
  # the final cleanup might fail but the new file should still install
 | 
			
		||||
  # successfully.
 | 
			
		||||
  {
 | 
			
		||||
    if test -f "$dstdir/$dstfile"; then
 | 
			
		||||
      $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
 | 
			
		||||
      || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
 | 
			
		||||
      || {
 | 
			
		||||
	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
 | 
			
		||||
	  (exit 1); exit
 | 
			
		||||
      }
 | 
			
		||||
    else
 | 
			
		||||
      :
 | 
			
		||||
    fi
 | 
			
		||||
  } &&
 | 
			
		||||
 | 
			
		||||
  # Now rename the file to the real destination.
 | 
			
		||||
  $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
 | 
			
		||||
fi &&
 | 
			
		||||
 | 
			
		||||
# The final little trick to "correctly" pass the exit status to the exit trap.
 | 
			
		||||
{
 | 
			
		||||
  (exit 0); exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
# Local variables:
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-end: "$"
 | 
			
		||||
# End:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										302
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										302
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -30,6 +30,12 @@ ac_help="$ac_help
 | 
			
		||||
  --enable-debug          Enable debugging"
 | 
			
		||||
ac_help="$ac_help
 | 
			
		||||
  --disable-devmapper     Disable device-mapper interaction"
 | 
			
		||||
ac_help="$ac_help
 | 
			
		||||
  --disable-o_direct      Disable O_DIRECT"
 | 
			
		||||
ac_help="$ac_help
 | 
			
		||||
  --enable-nls            Enable Native Language Support"
 | 
			
		||||
ac_help="$ac_help
 | 
			
		||||
  --with-localedir=DIR    Translation files in DIR [PREFIX/share/locale]"
 | 
			
		||||
 | 
			
		||||
# Initialize some variables set by options.
 | 
			
		||||
# The variables have the same names as the options, with
 | 
			
		||||
@@ -561,12 +567,12 @@ ac_config_sub=$ac_aux_dir/config.sub
 | 
			
		||||
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
for ac_prog in mawk gawk nawk awk
 | 
			
		||||
for ac_prog in gawk mawk nawk awk
 | 
			
		||||
do
 | 
			
		||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
 | 
			
		||||
set dummy $ac_prog; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:570: checking for $ac_word" >&5
 | 
			
		||||
echo "configure:576: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -598,7 +604,7 @@ done
 | 
			
		||||
# Extract the first word of "gcc", so it can be a program name with args.
 | 
			
		||||
set dummy gcc; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:602: checking for $ac_word" >&5
 | 
			
		||||
echo "configure:608: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -628,7 +634,7 @@ if test -z "$CC"; then
 | 
			
		||||
  # Extract the first word of "cc", so it can be a program name with args.
 | 
			
		||||
set dummy cc; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:632: checking for $ac_word" >&5
 | 
			
		||||
echo "configure:638: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -679,7 +685,7 @@ fi
 | 
			
		||||
      # Extract the first word of "cl", so it can be a program name with args.
 | 
			
		||||
set dummy cl; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:683: checking for $ac_word" >&5
 | 
			
		||||
echo "configure:689: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -711,7 +717,7 @@ fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:715: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 | 
			
		||||
echo "configure:721: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 | 
			
		||||
 | 
			
		||||
ac_ext=c
 | 
			
		||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 | 
			
		||||
@@ -722,12 +728,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 | 
			
		||||
 | 
			
		||||
cat > conftest.$ac_ext << EOF
 | 
			
		||||
 | 
			
		||||
#line 726 "configure"
 | 
			
		||||
#line 732 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
 | 
			
		||||
main(){return(0);}
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  ac_cv_prog_cc_works=yes
 | 
			
		||||
  # If we can't run a trivial program, we are probably using a cross compiler.
 | 
			
		||||
  if (./conftest; exit) 2>/dev/null; then
 | 
			
		||||
@@ -753,12 +759,12 @@ if test $ac_cv_prog_cc_works = no; then
 | 
			
		||||
  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 | 
			
		||||
fi
 | 
			
		||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:757: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 | 
			
		||||
echo "configure:763: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 | 
			
		||||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 | 
			
		||||
cross_compiling=$ac_cv_prog_cc_cross
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:762: checking whether we are using GNU C" >&5
 | 
			
		||||
echo "configure:768: checking whether we are using GNU C" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -767,7 +773,7 @@ else
 | 
			
		||||
  yes;
 | 
			
		||||
#endif
 | 
			
		||||
EOF
 | 
			
		||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
 | 
			
		||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
 | 
			
		||||
  ac_cv_prog_gcc=yes
 | 
			
		||||
else
 | 
			
		||||
  ac_cv_prog_gcc=no
 | 
			
		||||
@@ -786,7 +792,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 | 
			
		||||
ac_save_CFLAGS="$CFLAGS"
 | 
			
		||||
CFLAGS=
 | 
			
		||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:790: checking whether ${CC-cc} accepts -g" >&5
 | 
			
		||||
echo "configure:796: checking whether ${CC-cc} accepts -g" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -829,7 +835,7 @@ fi
 | 
			
		||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 | 
			
		||||
# ./install, which can be erroneously created by make from ./install.sh.
 | 
			
		||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:833: checking for a BSD compatible install" >&5
 | 
			
		||||
echo "configure:839: checking for a BSD compatible install" >&5
 | 
			
		||||
if test -z "$INSTALL"; then
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -882,7 +888,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
 | 
			
		||||
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:886: checking whether ln -s works" >&5
 | 
			
		||||
echo "configure:892: checking whether ln -s works" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -903,7 +909,7 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:907: checking whether ${MAKE-make} sets \${MAKE}" >&5
 | 
			
		||||
echo "configure:913: checking whether ${MAKE-make} sets \${MAKE}" >&5
 | 
			
		||||
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -932,7 +938,7 @@ fi
 | 
			
		||||
# Extract the first word of "ranlib", so it can be a program name with args.
 | 
			
		||||
set dummy ranlib; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:936: checking for $ac_word" >&5
 | 
			
		||||
echo "configure:942: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
@@ -965,12 +971,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 | 
			
		||||
do
 | 
			
		||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 | 
			
		||||
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:969: checking for $ac_hdr that defines DIR" >&5
 | 
			
		||||
echo "configure:975: checking for $ac_hdr that defines DIR" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 974 "configure"
 | 
			
		||||
#line 980 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <$ac_hdr>
 | 
			
		||||
@@ -978,7 +984,7 @@ int main() {
 | 
			
		||||
DIR *dirp = 0;
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_header_dirent_$ac_safe=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -1003,7 +1009,7 @@ done
 | 
			
		||||
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 | 
			
		||||
if test $ac_header_dirent = dirent.h; then
 | 
			
		||||
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1007: checking for opendir in -ldir" >&5
 | 
			
		||||
echo "configure:1013: checking for opendir in -ldir" >&5
 | 
			
		||||
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -1011,7 +1017,7 @@ else
 | 
			
		||||
  ac_save_LIBS="$LIBS"
 | 
			
		||||
LIBS="-ldir  $LIBS"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1015 "configure"
 | 
			
		||||
#line 1021 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -1022,7 +1028,7 @@ int main() {
 | 
			
		||||
opendir()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:1032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_lib_$ac_lib_var=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -1044,7 +1050,7 @@ fi
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1048: checking for opendir in -lx" >&5
 | 
			
		||||
echo "configure:1054: checking for opendir in -lx" >&5
 | 
			
		||||
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -1052,7 +1058,7 @@ else
 | 
			
		||||
  ac_save_LIBS="$LIBS"
 | 
			
		||||
LIBS="-lx  $LIBS"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1056 "configure"
 | 
			
		||||
#line 1062 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -1063,7 +1069,7 @@ int main() {
 | 
			
		||||
opendir()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:1073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_lib_$ac_lib_var=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -1086,7 +1092,7 @@ fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1090: checking how to run the C preprocessor" >&5
 | 
			
		||||
echo "configure:1096: checking how to run the C preprocessor" >&5
 | 
			
		||||
# On Suns, sometimes $CPP names a directory.
 | 
			
		||||
if test -n "$CPP" && test -d "$CPP"; then
 | 
			
		||||
  CPP=
 | 
			
		||||
@@ -1101,13 +1107,13 @@ else
 | 
			
		||||
  # On the NeXT, cc -E runs the code through the compiler's parser,
 | 
			
		||||
  # not just through cpp.
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1105 "configure"
 | 
			
		||||
#line 1111 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
Syntax Error
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:1111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:1117: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  :
 | 
			
		||||
@@ -1118,13 +1124,13 @@ else
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  CPP="${CC-cc} -E -traditional-cpp"
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1122 "configure"
 | 
			
		||||
#line 1128 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
Syntax Error
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:1128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:1134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  :
 | 
			
		||||
@@ -1135,13 +1141,13 @@ else
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  CPP="${CC-cc} -nologo -E"
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1139 "configure"
 | 
			
		||||
#line 1145 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
Syntax Error
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:1151: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  :
 | 
			
		||||
@@ -1166,12 +1172,12 @@ fi
 | 
			
		||||
echo "$ac_t""$CPP" 1>&6
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1170: checking for ANSI C header files" >&5
 | 
			
		||||
echo "configure:1176: checking for ANSI C header files" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1175 "configure"
 | 
			
		||||
#line 1181 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
@@ -1179,7 +1185,7 @@ else
 | 
			
		||||
#include <float.h>
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:1183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
@@ -1196,7 +1202,7 @@ rm -f conftest*
 | 
			
		||||
if test $ac_cv_header_stdc = yes; then
 | 
			
		||||
  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1200 "configure"
 | 
			
		||||
#line 1206 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
EOF
 | 
			
		||||
@@ -1214,7 +1220,7 @@ fi
 | 
			
		||||
if test $ac_cv_header_stdc = yes; then
 | 
			
		||||
  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1218 "configure"
 | 
			
		||||
#line 1224 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
EOF
 | 
			
		||||
@@ -1235,7 +1241,7 @@ if test "$cross_compiling" = yes; then
 | 
			
		||||
  :
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1239 "configure"
 | 
			
		||||
#line 1245 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 | 
			
		||||
@@ -1246,7 +1252,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 | 
			
		||||
exit (0); }
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 | 
			
		||||
if { (eval echo configure:1256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 | 
			
		||||
then
 | 
			
		||||
  :
 | 
			
		||||
else
 | 
			
		||||
@@ -1273,17 +1279,17 @@ for ac_hdr in fcntl.h malloc.h sys/ioctl.h unistd.h
 | 
			
		||||
do
 | 
			
		||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 | 
			
		||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1277: checking for $ac_hdr" >&5
 | 
			
		||||
echo "configure:1283: checking for $ac_hdr" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1282 "configure"
 | 
			
		||||
#line 1288 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <$ac_hdr>
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:1287: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:1293: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
@@ -1311,18 +1317,18 @@ done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for working const""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1315: checking for working const" >&5
 | 
			
		||||
echo "configure:1321: checking for working const" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1320 "configure"
 | 
			
		||||
#line 1326 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
 | 
			
		||||
/* Ultrix mips cc rejects this.  */
 | 
			
		||||
typedef int charset[2]; const charset x = {0,0};
 | 
			
		||||
typedef int charset[2]; const charset x;
 | 
			
		||||
/* SunOS 4.1.1 cc rejects this.  */
 | 
			
		||||
char const *const *ccp;
 | 
			
		||||
char **p;
 | 
			
		||||
@@ -1365,7 +1371,7 @@ ccp = (char const *const *) p;
 | 
			
		||||
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:1375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_c_const=yes
 | 
			
		||||
else
 | 
			
		||||
@@ -1386,21 +1392,21 @@ EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for inline""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1390: checking for inline" >&5
 | 
			
		||||
echo "configure:1396: checking for inline" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  ac_cv_c_inline=no
 | 
			
		||||
for ac_kw in inline __inline__ __inline; do
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1397 "configure"
 | 
			
		||||
#line 1403 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
} int $ac_kw foo() {
 | 
			
		||||
} $ac_kw foo() {
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:1410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_c_inline=$ac_kw; break
 | 
			
		||||
else
 | 
			
		||||
@@ -1426,12 +1432,12 @@ EOF
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for off_t""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1430: checking for off_t" >&5
 | 
			
		||||
echo "configure:1436: checking for off_t" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1435 "configure"
 | 
			
		||||
#line 1441 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#if STDC_HEADERS
 | 
			
		||||
@@ -1459,12 +1465,12 @@ EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1463: checking for pid_t" >&5
 | 
			
		||||
echo "configure:1469: checking for pid_t" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1468 "configure"
 | 
			
		||||
#line 1474 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#if STDC_HEADERS
 | 
			
		||||
@@ -1492,12 +1498,12 @@ EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for size_t""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1496: checking for size_t" >&5
 | 
			
		||||
echo "configure:1502: checking for size_t" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1501 "configure"
 | 
			
		||||
#line 1507 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#if STDC_HEADERS
 | 
			
		||||
@@ -1525,12 +1531,12 @@ EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1529: checking for st_rdev in struct stat" >&5
 | 
			
		||||
echo "configure:1535: checking for st_rdev in struct stat" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1534 "configure"
 | 
			
		||||
#line 1540 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
@@ -1538,7 +1544,7 @@ int main() {
 | 
			
		||||
struct stat s; s.st_rdev;
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1542: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:1548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_struct_st_rdev=yes
 | 
			
		||||
else
 | 
			
		||||
@@ -1559,12 +1565,12 @@ EOF
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1563: checking whether time.h and sys/time.h may both be included" >&5
 | 
			
		||||
echo "configure:1569: checking whether time.h and sys/time.h may both be included" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1568 "configure"
 | 
			
		||||
#line 1574 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
@@ -1573,7 +1579,7 @@ int main() {
 | 
			
		||||
struct tm *tp;
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:1583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_header_time=yes
 | 
			
		||||
else
 | 
			
		||||
@@ -1622,7 +1628,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking host system type""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1626: checking host system type" >&5
 | 
			
		||||
echo "configure:1632: checking host system type" >&5
 | 
			
		||||
 | 
			
		||||
host_alias=$host
 | 
			
		||||
case "$host_alias" in
 | 
			
		||||
@@ -1643,7 +1649,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 | 
			
		||||
echo "$ac_t""$host" 1>&6
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking target system type""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1647: checking target system type" >&5
 | 
			
		||||
echo "configure:1653: checking target system type" >&5
 | 
			
		||||
 | 
			
		||||
target_alias=$target
 | 
			
		||||
case "$target_alias" in
 | 
			
		||||
@@ -1661,7 +1667,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 | 
			
		||||
echo "$ac_t""$target" 1>&6
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1665: checking build system type" >&5
 | 
			
		||||
echo "configure:1671: checking build system type" >&5
 | 
			
		||||
 | 
			
		||||
build_alias=$build
 | 
			
		||||
case "$build_alias" in
 | 
			
		||||
@@ -1760,6 +1766,7 @@ if test x$READLINE = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DREADLINE_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable debugging""... $ac_c" 1>&6
 | 
			
		||||
# Check whether --enable-debug or --disable-debug was given.
 | 
			
		||||
if test "${enable_debug+set}" = set; then
 | 
			
		||||
  enableval="$enable_debug"
 | 
			
		||||
@@ -1769,7 +1776,9 @@ else
 | 
			
		||||
  DEBUG=no
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "$ac_t""$DEBUG" 1>&6
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable device-mapper""... $ac_c" 1>&6
 | 
			
		||||
# Check whether --enable-devmapper or --disable-devmapper was given.
 | 
			
		||||
if test "${enable_devmapper+set}" = set; then
 | 
			
		||||
  enableval="$enable_devmapper"
 | 
			
		||||
@@ -1779,24 +1788,41 @@ else
 | 
			
		||||
  DEVMAPPER=yes
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "$ac_t""$DEVMAPPER" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$DEVMAPPER = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DDEVMAPPER_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable O_DIRECT""... $ac_c" 1>&6
 | 
			
		||||
# Check whether --enable-o_direct or --disable-o_direct was given.
 | 
			
		||||
if test "${enable_o_direct+set}" = set; then
 | 
			
		||||
  enableval="$enable_o_direct"
 | 
			
		||||
  \
 | 
			
		||||
ODIRECT=no
 | 
			
		||||
else
 | 
			
		||||
  ODIRECT=yes
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "$ac_t""$ODIRECT" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$ODIRECT = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DO_DIRECT_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ];
 | 
			
		||||
 then  exec_prefix="";
 | 
			
		||||
fi;
 | 
			
		||||
 | 
			
		||||
if test $ac_cv_prog_gcc = yes; then
 | 
			
		||||
    echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1794: checking whether ${CC-cc} needs -traditional" >&5
 | 
			
		||||
echo "configure:1820: checking whether ${CC-cc} needs -traditional" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
    ac_pattern="Autoconf.*'x'"
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1800 "configure"
 | 
			
		||||
#line 1826 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sgtty.h>
 | 
			
		||||
Autoconf TIOCGETP
 | 
			
		||||
@@ -1814,7 +1840,7 @@ rm -f conftest*
 | 
			
		||||
 | 
			
		||||
  if test $ac_cv_prog_gcc_traditional = no; then
 | 
			
		||||
    cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1818 "configure"
 | 
			
		||||
#line 1844 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <termio.h>
 | 
			
		||||
Autoconf TCGETA
 | 
			
		||||
@@ -1836,12 +1862,12 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1840: checking return type of signal handlers" >&5
 | 
			
		||||
echo "configure:1866: checking return type of signal handlers" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1845 "configure"
 | 
			
		||||
#line 1871 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
@@ -1858,7 +1884,7 @@ int main() {
 | 
			
		||||
int i;
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1862: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
if { (eval echo configure:1888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_type_signal=void
 | 
			
		||||
else
 | 
			
		||||
@@ -1877,12 +1903,12 @@ EOF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for vprintf""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1881: checking for vprintf" >&5
 | 
			
		||||
echo "configure:1907: checking for vprintf" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1886 "configure"
 | 
			
		||||
#line 1912 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* System header to define __stub macros and hopefully few prototypes,
 | 
			
		||||
    which can conflict with char vprintf(); below.  */
 | 
			
		||||
@@ -1905,7 +1931,7 @@ vprintf();
 | 
			
		||||
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:1935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_func_vprintf=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -1929,12 +1955,12 @@ fi
 | 
			
		||||
 | 
			
		||||
if test "$ac_cv_func_vprintf" != yes; then
 | 
			
		||||
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1933: checking for _doprnt" >&5
 | 
			
		||||
echo "configure:1959: checking for _doprnt" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1938 "configure"
 | 
			
		||||
#line 1964 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* System header to define __stub macros and hopefully few prototypes,
 | 
			
		||||
    which can conflict with char _doprnt(); below.  */
 | 
			
		||||
@@ -1957,7 +1983,7 @@ _doprnt();
 | 
			
		||||
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:1987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_func__doprnt=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -1984,12 +2010,12 @@ fi
 | 
			
		||||
for ac_func in mkdir rmdir uname
 | 
			
		||||
do
 | 
			
		||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:1988: checking for $ac_func" >&5
 | 
			
		||||
echo "configure:2014: checking for $ac_func" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 1993 "configure"
 | 
			
		||||
#line 2019 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* System header to define __stub macros and hopefully few prototypes,
 | 
			
		||||
    which can conflict with char $ac_func(); below.  */
 | 
			
		||||
@@ -2012,7 +2038,7 @@ $ac_func();
 | 
			
		||||
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_func_$ac_func=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -2040,14 +2066,14 @@ done
 | 
			
		||||
if test x$READLINE = xyes; then
 | 
			
		||||
	
 | 
			
		||||
echo $ac_n "checking for library containing tgetent""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2044: checking for library containing tgetent" >&5
 | 
			
		||||
echo "configure:2070: checking for library containing tgetent" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_search_tgetent'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  ac_func_search_save_LIBS="$LIBS"
 | 
			
		||||
ac_cv_search_tgetent="no"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2051 "configure"
 | 
			
		||||
#line 2077 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -2058,7 +2084,7 @@ int main() {
 | 
			
		||||
tgetent()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_search_tgetent="none required"
 | 
			
		||||
else
 | 
			
		||||
@@ -2069,7 +2095,7 @@ rm -f conftest*
 | 
			
		||||
test "$ac_cv_search_tgetent" = "no" && for i in ncurses curses termcap termlib; do
 | 
			
		||||
LIBS="-l$i  $ac_func_search_save_LIBS"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2073 "configure"
 | 
			
		||||
#line 2099 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -2080,7 +2106,7 @@ int main() {
 | 
			
		||||
tgetent()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  ac_cv_search_tgetent="-l$i"
 | 
			
		||||
break
 | 
			
		||||
@@ -2113,7 +2139,7 @@ fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2117: checking for dlopen in -ldl" >&5
 | 
			
		||||
echo "configure:2143: checking for dlopen in -ldl" >&5
 | 
			
		||||
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -2121,7 +2147,7 @@ else
 | 
			
		||||
  ac_save_LIBS="$LIBS"
 | 
			
		||||
LIBS="-ldl  $LIBS"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2125 "configure"
 | 
			
		||||
#line 2151 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -2132,7 +2158,7 @@ int main() {
 | 
			
		||||
dlopen()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_lib_$ac_lib_var=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -2163,17 +2189,17 @@ for ac_hdr in getopt.h
 | 
			
		||||
do
 | 
			
		||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 | 
			
		||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2167: checking for $ac_hdr" >&5
 | 
			
		||||
echo "configure:2193: checking for $ac_hdr" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2172 "configure"
 | 
			
		||||
#line 2198 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
#include <$ac_hdr>
 | 
			
		||||
EOF
 | 
			
		||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 | 
			
		||||
{ (eval echo configure:2177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
{ (eval echo configure:2203: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 | 
			
		||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 | 
			
		||||
if test -z "$ac_err"; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
@@ -2202,7 +2228,7 @@ done
 | 
			
		||||
 | 
			
		||||
if test x$READLINE = xyes; then
 | 
			
		||||
	echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2206: checking for readline in -lreadline" >&5
 | 
			
		||||
echo "configure:2232: checking for readline in -lreadline" >&5
 | 
			
		||||
ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
@@ -2210,7 +2236,7 @@ else
 | 
			
		||||
  ac_save_LIBS="$LIBS"
 | 
			
		||||
LIBS="-lreadline  $LIBS"
 | 
			
		||||
cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2214 "configure"
 | 
			
		||||
#line 2240 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* Override any gcc2 internal prototype to avoid an error.  */
 | 
			
		||||
/* We use char because int might match the return type of a gcc2
 | 
			
		||||
@@ -2221,7 +2247,7 @@ int main() {
 | 
			
		||||
readline()
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_lib_$ac_lib_var=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -2258,12 +2284,12 @@ package as well (which may be called readline-devel or something similar).
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
	echo $ac_n "checking for rl_completion_matches""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2262: checking for rl_completion_matches" >&5
 | 
			
		||||
echo "configure:2288: checking for rl_completion_matches" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_func_rl_completion_matches'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  cat > conftest.$ac_ext <<EOF
 | 
			
		||||
#line 2267 "configure"
 | 
			
		||||
#line 2293 "configure"
 | 
			
		||||
#include "confdefs.h"
 | 
			
		||||
/* System header to define __stub macros and hopefully few prototypes,
 | 
			
		||||
    which can conflict with char rl_completion_matches(); below.  */
 | 
			
		||||
@@ -2286,7 +2312,7 @@ rl_completion_matches();
 | 
			
		||||
 | 
			
		||||
; return 0; }
 | 
			
		||||
EOF
 | 
			
		||||
if { (eval echo configure:2290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
if { (eval echo configure:2316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
 | 
			
		||||
  rm -rf conftest*
 | 
			
		||||
  eval "ac_cv_func_rl_completion_matches=yes"
 | 
			
		||||
else
 | 
			
		||||
@@ -2306,6 +2332,71 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable internationalisation""... $ac_c" 1>&6
 | 
			
		||||
# Check whether --enable-nls or --disable-nls was given.
 | 
			
		||||
if test "${enable_nls+set}" = set; then
 | 
			
		||||
  enableval="$enable_nls"
 | 
			
		||||
  \
 | 
			
		||||
		INTL=yes
 | 
			
		||||
else
 | 
			
		||||
  INTL=no
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "$ac_t""$INTL" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$INTL = xyes; then
 | 
			
		||||
	INTL_PACKAGE="lvm2"
 | 
			
		||||
	# Extract the first word of "msgfmt", so it can be a program name with args.
 | 
			
		||||
set dummy msgfmt; ac_word=$2
 | 
			
		||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 | 
			
		||||
echo "configure:2355: checking for $ac_word" >&5
 | 
			
		||||
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
 | 
			
		||||
  echo $ac_n "(cached) $ac_c" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  case "$MSGFMT" in
 | 
			
		||||
  /*)
 | 
			
		||||
  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
 | 
			
		||||
  ;;
 | 
			
		||||
  ?:/*)			 
 | 
			
		||||
  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a dos path.
 | 
			
		||||
  ;;
 | 
			
		||||
  *)
 | 
			
		||||
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
 | 
			
		||||
  ac_dummy="$PATH"
 | 
			
		||||
  for ac_dir in $ac_dummy; do 
 | 
			
		||||
    test -z "$ac_dir" && ac_dir=.
 | 
			
		||||
    if test -f $ac_dir/$ac_word; then
 | 
			
		||||
      ac_cv_path_MSGFMT="$ac_dir/$ac_word"
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  IFS="$ac_save_ifs"
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
fi
 | 
			
		||||
MSGFMT="$ac_cv_path_MSGFMT"
 | 
			
		||||
if test -n "$MSGFMT"; then
 | 
			
		||||
  echo "$ac_t""$MSGFMT" 1>&6
 | 
			
		||||
else
 | 
			
		||||
  echo "$ac_t""no" 1>&6
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
	if [ "x$MSGFMT" == x ];
 | 
			
		||||
		then  { echo "configure: error: msgfmt not found in path $PATH
 | 
			
		||||
		" 1>&2; exit 1; }
 | 
			
		||||
		exit  
 | 
			
		||||
	fi;
 | 
			
		||||
 | 
			
		||||
	# Check whether --with-localedir or --without-localedir was given.
 | 
			
		||||
if test "${with_localedir+set}" = set; then
 | 
			
		||||
  withval="$with_localedir"
 | 
			
		||||
   LOCALEDIR="$withval" 
 | 
			
		||||
else
 | 
			
		||||
   LOCALEDIR='${prefix}/share/locale' 
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "-f VERSION"; then
 | 
			
		||||
@@ -2325,6 +2416,10 @@ fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
trap '' 1 2 15
 | 
			
		||||
cat > confcache <<\EOF
 | 
			
		||||
# This file is a shell script that caches the results of configure
 | 
			
		||||
@@ -2445,6 +2540,7 @@ include/Makefile						 	\
 | 
			
		||||
lib/Makefile							 	\
 | 
			
		||||
lib/format1/Makefile						 	\
 | 
			
		||||
man/Makefile							 	\
 | 
			
		||||
po/Makefile								\
 | 
			
		||||
tools/Makefile							 	\
 | 
			
		||||
tools/version.h								\
 | 
			
		||||
test/mm/Makefile							\
 | 
			
		||||
@@ -2508,6 +2604,7 @@ s%@build_alias@%$build_alias%g
 | 
			
		||||
s%@build_cpu@%$build_cpu%g
 | 
			
		||||
s%@build_vendor@%$build_vendor%g
 | 
			
		||||
s%@build_os@%$build_os%g
 | 
			
		||||
s%@MSGFMT@%$MSGFMT%g
 | 
			
		||||
s%@JOBS@%$JOBS%g
 | 
			
		||||
s%@STATIC_LINK@%$STATIC_LINK%g
 | 
			
		||||
s%@LVM1@%$LVM1%g
 | 
			
		||||
@@ -2517,6 +2614,9 @@ s%@LVM_VERSION@%$LVM_VERSION%g
 | 
			
		||||
s%@DEBUG@%$DEBUG%g
 | 
			
		||||
s%@DEVMAPPER@%$DEVMAPPER%g
 | 
			
		||||
s%@HAVE_LIBDL@%$HAVE_LIBDL%g
 | 
			
		||||
s%@LOCALEDIR@%$LOCALEDIR%g
 | 
			
		||||
s%@INTL_PACKAGE@%$INTL_PACKAGE%g
 | 
			
		||||
s%@INTL@%$INTL%g
 | 
			
		||||
 | 
			
		||||
CEOF
 | 
			
		||||
EOF
 | 
			
		||||
@@ -2565,6 +2665,7 @@ include/Makefile						 	\
 | 
			
		||||
lib/Makefile							 	\
 | 
			
		||||
lib/format1/Makefile						 	\
 | 
			
		||||
man/Makefile							 	\
 | 
			
		||||
po/Makefile								\
 | 
			
		||||
tools/Makefile							 	\
 | 
			
		||||
tools/version.h								\
 | 
			
		||||
test/mm/Makefile							\
 | 
			
		||||
@@ -2643,3 +2744,10 @@ chmod +x $CONFIG_STATUS
 | 
			
		||||
rm -fr confdefs* $ac_clean_files
 | 
			
		||||
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if test x$ODIRECT != xyes; then
 | 
			
		||||
  echo
 | 
			
		||||
  echo Warning: O_DIRECT disabled.
 | 
			
		||||
  echo Use of pvmove may cause machine to lock up under low memory conditions.
 | 
			
		||||
  echo
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								configure.in
									
									
									
									
									
								
							@@ -101,18 +101,32 @@ if test x$READLINE = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DREADLINE_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable debugging""... $ac_c" 1>&6
 | 
			
		||||
dnl Enable Debugging
 | 
			
		||||
AC_ARG_ENABLE(debug,    [  --enable-debug          Enable debugging],  \
 | 
			
		||||
DEBUG=yes, DEBUG=no)
 | 
			
		||||
echo "$ac_t""$DEBUG" 1>&6
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable device-mapper""... $ac_c" 1>&6
 | 
			
		||||
dnl Disable devmapper
 | 
			
		||||
AC_ARG_ENABLE(devmapper, [  --disable-devmapper     Disable device-mapper interaction],  \
 | 
			
		||||
DEVMAPPER=no, DEVMAPPER=yes)
 | 
			
		||||
echo "$ac_t""$DEVMAPPER" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$DEVMAPPER = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DDEVMAPPER_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable O_DIRECT""... $ac_c" 1>&6
 | 
			
		||||
dnl Disable O_DIRECT
 | 
			
		||||
AC_ARG_ENABLE(o_direct, [  --disable-o_direct      Disable O_DIRECT],  \
 | 
			
		||||
ODIRECT=no, ODIRECT=yes)
 | 
			
		||||
echo "$ac_t""$ODIRECT" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$ODIRECT = xyes; then
 | 
			
		||||
	CFLAGS="$CFLAGS -DO_DIRECT_SUPPORT"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl Mess with default exec_prefix
 | 
			
		||||
if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]];
 | 
			
		||||
 then  exec_prefix="";
 | 
			
		||||
@@ -169,6 +183,28 @@ package as well (which may be called readline-devel or something similar).
 | 
			
		||||
		
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo $ac_n "checking whether to enable internationalisation""... $ac_c" 1>&6
 | 
			
		||||
dnl Internationalisation stuff
 | 
			
		||||
AC_ARG_ENABLE(nls, [  --enable-nls            Enable Native Language Support],\
 | 
			
		||||
		INTL=yes, INTL=no)
 | 
			
		||||
echo "$ac_t""$INTL" 1>&6
 | 
			
		||||
 | 
			
		||||
if test x$INTL = xyes; then
 | 
			
		||||
	INTL_PACKAGE="lvm2"
 | 
			
		||||
	AC_PATH_PROG(MSGFMT, msgfmt)
 | 
			
		||||
	if [[ "x$MSGFMT" == x ]];
 | 
			
		||||
		then  AC_MSG_ERROR(
 | 
			
		||||
		msgfmt not found in path $PATH
 | 
			
		||||
		)
 | 
			
		||||
		exit  
 | 
			
		||||
	fi;
 | 
			
		||||
 | 
			
		||||
	AC_ARG_WITH(localedir,
 | 
			
		||||
  		    [  --with-localedir=DIR    Translation files in DIR [PREFIX/share/locale]],
 | 
			
		||||
  		    [ LOCALEDIR="$withval" ],
 | 
			
		||||
  		    [ LOCALEDIR='${prefix}/share/locale' ])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "-f VERSION"; then
 | 
			
		||||
  LVM_VERSION="\"`cat VERSION`\""
 | 
			
		||||
else
 | 
			
		||||
@@ -186,6 +222,10 @@ AC_SUBST(LVM_VERSION)
 | 
			
		||||
AC_SUBST(DEBUG)
 | 
			
		||||
AC_SUBST(DEVMAPPER)
 | 
			
		||||
AC_SUBST(HAVE_LIBDL)
 | 
			
		||||
AC_SUBST(MSGFMT)
 | 
			
		||||
AC_SUBST(LOCALEDIR)
 | 
			
		||||
AC_SUBST(INTL_PACKAGE)
 | 
			
		||||
AC_SUBST(INTL)
 | 
			
		||||
dnl First and last lines should not contain files to generate in order to 
 | 
			
		||||
dnl keep utility scripts running properly
 | 
			
		||||
AC_OUTPUT( 								\
 | 
			
		||||
@@ -195,6 +235,7 @@ include/Makefile						 	\
 | 
			
		||||
lib/Makefile							 	\
 | 
			
		||||
lib/format1/Makefile						 	\
 | 
			
		||||
man/Makefile							 	\
 | 
			
		||||
po/Makefile								\
 | 
			
		||||
tools/Makefile							 	\
 | 
			
		||||
tools/version.h								\
 | 
			
		||||
test/mm/Makefile							\
 | 
			
		||||
@@ -203,3 +244,10 @@ test/format1/Makefile							\
 | 
			
		||||
test/regex/Makefile                                                     \
 | 
			
		||||
test/filters/Makefile                                                   \
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if test x$ODIRECT != xyes; then
 | 
			
		||||
  echo
 | 
			
		||||
  echo Warning: O_DIRECT disabled.
 | 
			
		||||
  echo Use of pvmove may cause machine to lock up under low memory conditions.
 | 
			
		||||
  echo
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,10 @@ devices {
 | 
			
		||||
    # List of pairs of additional acceptable block device types found 
 | 
			
		||||
    # in /proc/devices with maximum (non-zero) number of partitions.
 | 
			
		||||
    # types = [ "fd", 16 ]
 | 
			
		||||
 | 
			
		||||
    # If sysfs is mounted (2.6 kernels) restrict device scanning to 
 | 
			
		||||
    # the block devices it believes are valid.
 | 
			
		||||
    sysfs_scan = 1	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This section that allows you to configure the nature of the
 | 
			
		||||
 
 | 
			
		||||
@@ -9,24 +9,28 @@
 | 
			
		||||
../lib/datastruct/hash.h
 | 
			
		||||
../lib/datastruct/list.h
 | 
			
		||||
../lib/datastruct/lvm-types.h
 | 
			
		||||
../lib/datastruct/str_list.h
 | 
			
		||||
../lib/device/dev-cache.h
 | 
			
		||||
../lib/device/device.h
 | 
			
		||||
../lib/display/display.h
 | 
			
		||||
../lib/filters/filter-composite.h
 | 
			
		||||
../lib/filters/filter-persistent.h
 | 
			
		||||
../lib/filters/filter-regex.h
 | 
			
		||||
../lib/filters/filter-sysfs.h
 | 
			
		||||
../lib/filters/filter.h
 | 
			
		||||
../lib/format1/format1.h
 | 
			
		||||
../lib/format_text/format-text.h
 | 
			
		||||
../lib/label/label.h
 | 
			
		||||
../lib/locking/locking.h
 | 
			
		||||
../lib/log/log.h
 | 
			
		||||
../lib/metadata/lv_alloc.h
 | 
			
		||||
../lib/metadata/metadata.h
 | 
			
		||||
../lib/mm/dbg_malloc.h
 | 
			
		||||
../lib/mm/memlock.h
 | 
			
		||||
../lib/mm/pool.h
 | 
			
		||||
../lib/mm/xlate.h
 | 
			
		||||
../lib/misc/crc.h
 | 
			
		||||
../lib/misc/intl.h
 | 
			
		||||
../lib/misc/lib.h
 | 
			
		||||
../lib/misc/lvm-file.h
 | 
			
		||||
../lib/misc/lvm-string.h
 | 
			
		||||
@@ -34,3 +38,4 @@
 | 
			
		||||
../lib/regex/matcher.h
 | 
			
		||||
../lib/report/report.h
 | 
			
		||||
../lib/uuid/uuid.h
 | 
			
		||||
../po/pogen.h
 | 
			
		||||
 
 | 
			
		||||
@@ -35,9 +35,11 @@ distclean:
 | 
			
		||||
	find . -maxdepth 1 -type l -exec $(RM) \{\} \;
 | 
			
		||||
	$(RM) Makefile .include_symlinks .symlinks_created
 | 
			
		||||
 | 
			
		||||
pofile: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
 | 
			
		||||
.PHONY: clean distclean all install
 | 
			
		||||
.PHONY: clean distclean all install pofile
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ SOURCES=\
 | 
			
		||||
	datastruct/bitset.c \
 | 
			
		||||
	datastruct/btree.c \
 | 
			
		||||
	datastruct/hash.c \
 | 
			
		||||
	datastruct/str_list.c \
 | 
			
		||||
	device/dev-cache.c \
 | 
			
		||||
	device/dev-io.c \
 | 
			
		||||
	device/device.c \
 | 
			
		||||
@@ -27,6 +28,7 @@ SOURCES=\
 | 
			
		||||
	filters/filter-composite.c \
 | 
			
		||||
	filters/filter-persistent.c \
 | 
			
		||||
	filters/filter-regex.c \
 | 
			
		||||
	filters/filter-sysfs.c \
 | 
			
		||||
	filters/filter.c \
 | 
			
		||||
	format_text/archive.c \
 | 
			
		||||
	format_text/export.c \
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,12 @@ int lv_activate(struct cmd_context *cmd, const char *lvid_s)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void activation_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	return;
 | 
			
		||||
@@ -146,7 +152,8 @@ int driver_version(char *version, size_t size)
 | 
			
		||||
/*
 | 
			
		||||
 * Returns 1 if info structure populated, else 0 on failure.
 | 
			
		||||
 */
 | 
			
		||||
int lv_info(const struct logical_volume *lv, struct lvinfo *info)
 | 
			
		||||
static int _lv_info(const struct logical_volume *lv, int mknodes,
 | 
			
		||||
		    struct lvinfo *info)
 | 
			
		||||
{
 | 
			
		||||
	int r;
 | 
			
		||||
	struct dev_manager *dm;
 | 
			
		||||
@@ -160,7 +167,7 @@ int lv_info(const struct logical_volume *lv, struct lvinfo *info)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(r = dev_manager_info(dm, lv, &dminfo)))
 | 
			
		||||
	if (!(r = dev_manager_info(dm, lv, mknodes, &dminfo)))
 | 
			
		||||
		stack;
 | 
			
		||||
 | 
			
		||||
	info->exists = dminfo.exists;
 | 
			
		||||
@@ -174,6 +181,11 @@ int lv_info(const struct logical_volume *lv, struct lvinfo *info)
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lv_info(const struct logical_volume *lv, struct lvinfo *info)
 | 
			
		||||
{
 | 
			
		||||
	return _lv_info(lv, 0, info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Returns 1 if percent set, else 0 on failure.
 | 
			
		||||
 */
 | 
			
		||||
@@ -428,6 +440,12 @@ int lv_deactivate(struct cmd_context *cmd, const char *lvid_s)
 | 
			
		||||
	if (!info.exists)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (info.open_count) {
 | 
			
		||||
		log_error("LV %s/%s in use: not removing", lv->vg->name,
 | 
			
		||||
			  lv->name);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	memlock_inc();
 | 
			
		||||
	r = _lv_deactivate(lv);
 | 
			
		||||
	memlock_dec();
 | 
			
		||||
@@ -469,6 +487,26 @@ int lv_activate(struct cmd_context *cmd, const char *lvid_s)
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	struct lvinfo info;
 | 
			
		||||
	int r = 1;
 | 
			
		||||
 | 
			
		||||
	if (!_lv_info(lv, 1, &info)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (info.exists)
 | 
			
		||||
		r = dev_manager_mknodes(lv);
 | 
			
		||||
	else
 | 
			
		||||
		r = dev_manager_rmnodes(lv);
 | 
			
		||||
 | 
			
		||||
	fs_unlock();
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void activation_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	dev_manager_exit();
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,8 @@ int lv_resume_if_active(struct cmd_context *cmd, const char *lvid_s);
 | 
			
		||||
int lv_activate(struct cmd_context *cmd, const char *lvid_s);
 | 
			
		||||
int lv_deactivate(struct cmd_context *cmd, const char *lvid_s);
 | 
			
		||||
 | 
			
		||||
int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Returns 1 if info structure has been populated, else 0.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,14 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "lib.h"
 | 
			
		||||
#include "str_list.h"
 | 
			
		||||
#include "dev_manager.h"
 | 
			
		||||
#include "pool.h"
 | 
			
		||||
#include "hash.h"
 | 
			
		||||
#include "lvm-string.h"
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
#include "defaults.h"
 | 
			
		||||
#include "toolcontext.h"
 | 
			
		||||
 | 
			
		||||
#include <libdevmapper.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
@@ -155,33 +157,6 @@ static inline void _clear_flag(struct dev_layer *dl, int bit)
 | 
			
		||||
	dl->flags &= ~(1 << bit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _pre_list_add(struct pool *mem, struct list *pl, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	struct str_list *sl;
 | 
			
		||||
	struct list *plh;
 | 
			
		||||
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Already in list? */
 | 
			
		||||
	list_iterate(plh, pl) {
 | 
			
		||||
		if (!strcmp(str, list_item(plh, struct str_list)->str))
 | 
			
		||||
			return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(sl = pool_alloc(mem, sizeof(*sl)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sl->str = str;
 | 
			
		||||
	list_add(pl, &sl->list);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Device layer names are all of the form <vg>-<lv>-<layer>, any
 | 
			
		||||
 * other hyphens that appear in these names are quoted with yet
 | 
			
		||||
@@ -311,13 +286,16 @@ static struct dm_task *_setup_task(const char *name, const char *uuid,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _info_run(const char *name, const char *uuid, struct dm_info *info,
 | 
			
		||||
		     struct pool *mem, char **uuid_out)
 | 
			
		||||
		     int mknodes, struct pool *mem, char **uuid_out)
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
	struct dm_task *dmt;
 | 
			
		||||
	const char *u;
 | 
			
		||||
	int dmtask;
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = _setup_task(name, uuid, 0, DM_DEVICE_INFO))) {
 | 
			
		||||
	dmtask = mknodes ? DM_DEVICE_MKNODES : DM_DEVICE_INFO;
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = _setup_task(name, uuid, 0, dmtask))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -346,15 +324,15 @@ static int _info_run(const char *name, const char *uuid, struct dm_info *info,
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _info(const char *name, const char *uuid, struct dm_info *info,
 | 
			
		||||
		 struct pool *mem, char **uuid_out)
 | 
			
		||||
static int _info(const char *name, const char *uuid, int mknodes,
 | 
			
		||||
		 struct dm_info *info, struct pool *mem, char **uuid_out)
 | 
			
		||||
{
 | 
			
		||||
	if (uuid && *uuid && _info_run(NULL, uuid, info, mem, uuid_out)
 | 
			
		||||
	    && info->exists)
 | 
			
		||||
	if (!mknodes && uuid && *uuid && 
 | 
			
		||||
	    _info_run(NULL, uuid, info, 0, mem, uuid_out) && info->exists)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (name)
 | 
			
		||||
		return _info_run(name, NULL, info, mem, uuid_out);
 | 
			
		||||
		return _info_run(name, NULL, info, mknodes, mem, uuid_out);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1016,7 +994,7 @@ static int _populate_snapshot(struct dev_manager *dm,
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (lvm_snprintf(params, sizeof(params), "%s %s P %d", 
 | 
			
		||||
	if (lvm_snprintf(params, sizeof(params), "%s %s P %d",
 | 
			
		||||
			 devbufo, devbufc, s->chunk_size) == -1) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -1098,7 +1076,7 @@ void dev_manager_destroy(struct dev_manager *dm)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_manager_info(struct dev_manager *dm, const struct logical_volume *lv,
 | 
			
		||||
		     struct dm_info *info)
 | 
			
		||||
		     int mknodes, struct dm_info *info)
 | 
			
		||||
{
 | 
			
		||||
	char *name;
 | 
			
		||||
 | 
			
		||||
@@ -1114,7 +1092,7 @@ int dev_manager_info(struct dev_manager *dm, const struct logical_volume *lv,
 | 
			
		||||
	 * Try and get some info on this device.
 | 
			
		||||
	 */
 | 
			
		||||
	log_debug("Getting device info for %s", name);
 | 
			
		||||
	if (!_info(name, lv->lvid.s, info, NULL, NULL)) {
 | 
			
		||||
	if (!_info(name, lv->lvid.s, mknodes, info, NULL, NULL)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1193,7 +1171,7 @@ static struct dev_layer *_create_dev(struct dev_manager *dm, char *name,
 | 
			
		||||
	dl->name = name;
 | 
			
		||||
 | 
			
		||||
	log_debug("Getting device info for %s", dl->name);
 | 
			
		||||
	if (!_info(dl->name, dlid, &dl->info, dm->mem, &uuid)) {
 | 
			
		||||
	if (!_info(dl->name, dlid, 0, &dl->info, dm->mem, &uuid)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1301,10 +1279,10 @@ static int _expand_vanilla(struct dev_manager *dm, struct logical_volume *lv,
 | 
			
		||||
		for (s = 0; s < seg->area_count; s++) {
 | 
			
		||||
			if (seg->area[s].type != AREA_LV)
 | 
			
		||||
				continue;
 | 
			
		||||
			if (!_pre_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
					   _build_dlid(dm->mem,
 | 
			
		||||
						       seg->area[s].u.lv.
 | 
			
		||||
						       lv->lvid.s, NULL))) {
 | 
			
		||||
			if (!str_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
					  _build_dlid(dm->mem,
 | 
			
		||||
						      seg->area[s].u.lv.
 | 
			
		||||
						      lv->lvid.s, NULL))) {
 | 
			
		||||
				stack;
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
@@ -1327,8 +1305,8 @@ static int _expand_vanilla(struct dev_manager *dm, struct logical_volume *lv,
 | 
			
		||||
	_set_flag(dlr, REMOVE);
 | 
			
		||||
	
 | 
			
		||||
	/* add the dependency on the real device */
 | 
			
		||||
	if (!_pre_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			   pool_strdup(dm->mem, dlr->dlid))) {
 | 
			
		||||
	if (!str_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			  pool_strdup(dm->mem, dlr->dlid))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1361,8 +1339,8 @@ static int _expand_origin_real(struct dev_manager *dm,
 | 
			
		||||
	_set_flag(dl, TOPLEVEL);
 | 
			
		||||
 | 
			
		||||
	/* add the dependency on the real device */
 | 
			
		||||
	if (!_pre_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			   pool_strdup(dm->mem, real_dlid))) {
 | 
			
		||||
	if (!str_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			  pool_strdup(dm->mem, real_dlid))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1422,21 +1400,21 @@ static int _expand_snapshot(struct dev_manager *dm, struct logical_volume *lv,
 | 
			
		||||
	_set_flag(dl, TOPLEVEL);
 | 
			
		||||
 | 
			
		||||
	/* add the dependency on the cow device */
 | 
			
		||||
	if (!_pre_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			   pool_strdup(dm->mem, cow_dlid))) {
 | 
			
		||||
	if (!str_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			  pool_strdup(dm->mem, cow_dlid))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* add the dependency on the real origin device */
 | 
			
		||||
	if (!_pre_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			   _build_dlid(dm->mem, s->origin->lvid.s, "real"))) {
 | 
			
		||||
	if (!str_list_add(dm->mem, &dl->pre_create,
 | 
			
		||||
			  _build_dlid(dm->mem, s->origin->lvid.s, "real"))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* add the dependency on the visible origin device */
 | 
			
		||||
	if (!_pre_list_add(dm->mem, &dl->pre_suspend, s->origin->lvid.s)) {
 | 
			
		||||
	if (!str_list_add(dm->mem, &dl->pre_suspend, s->origin->lvid.s)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1770,8 +1748,8 @@ static int _populate_pre_suspend_lists(struct dev_manager *dm)
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!_pre_list_add(dm->mem, &dep->pre_create,
 | 
			
		||||
					   dl->dlid)) {
 | 
			
		||||
			if (!str_list_add(dm->mem, &dep->pre_create,
 | 
			
		||||
					  dl->dlid)) {
 | 
			
		||||
				stack;
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
@@ -1787,8 +1765,8 @@ static int _populate_pre_suspend_lists(struct dev_manager *dm)
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!_pre_list_add(dm->mem, &dep->pre_suspend,
 | 
			
		||||
					   dl->dlid)) {
 | 
			
		||||
			if (!str_list_add(dm->mem, &dep->pre_suspend,
 | 
			
		||||
					  dl->dlid)) {
 | 
			
		||||
				stack;
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
@@ -2206,6 +2184,24 @@ int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv)
 | 
			
		||||
	return _action(dm, lv, SUSPEND);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_manager_mknodes(const struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	char *name;
 | 
			
		||||
 | 
			
		||||
	if (!(name = _build_name(lv->vg->cmd->mem, lv->vg->name,
 | 
			
		||||
				 lv->name, NULL))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return fs_add_lv(lv, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_manager_rmnodes(const struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	return fs_del_lv(lv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dev_manager_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	dm_lib_exit();
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ void dev_manager_exit(void);
 | 
			
		||||
 * unsuspended until the snapshot is also created.)
 | 
			
		||||
 */
 | 
			
		||||
int dev_manager_info(struct dev_manager *dm, const struct logical_volume *lv,
 | 
			
		||||
		     struct dm_info *info);
 | 
			
		||||
		     int mknodes, struct dm_info *info);
 | 
			
		||||
int dev_manager_snapshot_percent(struct dev_manager *dm,
 | 
			
		||||
				 struct logical_volume *lv, float *percent);
 | 
			
		||||
int dev_manager_mirror_percent(struct dev_manager *dm,
 | 
			
		||||
@@ -38,6 +38,9 @@ int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv);
 | 
			
		||||
int dev_manager_activate(struct dev_manager *dm, struct logical_volume *lv);
 | 
			
		||||
int dev_manager_deactivate(struct dev_manager *dm, struct logical_volume *lv);
 | 
			
		||||
 | 
			
		||||
int dev_manager_mknodes(const struct logical_volume *lv);
 | 
			
		||||
int dev_manager_rmnodes(const struct logical_volume *lv);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Put the desired changes into effect.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -182,7 +182,9 @@ static int _rm_link(const char *dev_dir, const char *vg_name,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (lstat(lv_path, &buf) || !S_ISLNK(buf.st_mode)) {
 | 
			
		||||
		log_error("%s not symbolic link - not removing", lv_path);
 | 
			
		||||
		if (errno != ENOENT)
 | 
			
		||||
			log_error("%s not symbolic link - not removing",
 | 
			
		||||
				  lv_path);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -309,13 +311,13 @@ static int _fs_op(fs_op_t type, const char *dev_dir, const char *vg_name,
 | 
			
		||||
	return _do_fs_op(type, dev_dir, vg_name, lv_name, dev, old_lv_name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int fs_add_lv(struct logical_volume *lv, const char *dev)
 | 
			
		||||
int fs_add_lv(const struct logical_volume *lv, const char *dev)
 | 
			
		||||
{
 | 
			
		||||
	return _fs_op(FS_ADD, lv->vg->cmd->dev_dir, lv->vg->name, lv->name,
 | 
			
		||||
		      dev, "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int fs_del_lv(struct logical_volume *lv)
 | 
			
		||||
int fs_del_lv(const struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	return _fs_op(FS_DEL, lv->vg->cmd->dev_dir, lv->vg->name, lv->name,
 | 
			
		||||
		      "", "");
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@
 | 
			
		||||
 * up the volume group directory in /dev and the
 | 
			
		||||
 * symbolic links to the dm device.
 | 
			
		||||
 */
 | 
			
		||||
int fs_add_lv(struct logical_volume *lv, const char *dev);
 | 
			
		||||
int fs_del_lv(struct logical_volume *lv);
 | 
			
		||||
int fs_add_lv(const struct logical_volume *lv, const char *dev);
 | 
			
		||||
int fs_del_lv(const struct logical_volume *lv);
 | 
			
		||||
int fs_rename_lv(struct logical_volume *lv,
 | 
			
		||||
		 const char *dev, const char *old_name);
 | 
			
		||||
void fs_unlock(void);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								lib/cache/lvmcache.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								lib/cache/lvmcache.c
									
									
									
									
										vendored
									
									
								
							@@ -13,6 +13,7 @@
 | 
			
		||||
#include "metadata.h"
 | 
			
		||||
#include "filter.h"
 | 
			
		||||
#include "memlock.h"
 | 
			
		||||
#include "str_list.h"
 | 
			
		||||
 | 
			
		||||
static struct hash_table *_pvid_hash = NULL;
 | 
			
		||||
static struct hash_table *_vgid_hash = NULL;
 | 
			
		||||
@@ -207,31 +208,22 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
 | 
			
		||||
 | 
			
		||||
struct list *lvmcache_get_vgnames(struct cmd_context *cmd, int full_scan)
 | 
			
		||||
{
 | 
			
		||||
	struct list *vgih, *vgnames;
 | 
			
		||||
	struct str_list *sl;
 | 
			
		||||
	struct list *vgnames;
 | 
			
		||||
	struct lvmcache_vginfo *vgi;
 | 
			
		||||
 | 
			
		||||
	lvmcache_label_scan(cmd, full_scan);
 | 
			
		||||
 | 
			
		||||
	if (!(vgnames = pool_alloc(cmd->mem, sizeof(struct list)))) {
 | 
			
		||||
	if (!(vgnames = str_list_create(cmd->mem))) {
 | 
			
		||||
		log_error("vgnames list allocation failed");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list_init(vgnames);
 | 
			
		||||
 | 
			
		||||
	list_iterate(vgih, &_vginfos) {
 | 
			
		||||
		if (!(sl = pool_alloc(cmd->mem, sizeof(*sl)))) {
 | 
			
		||||
	list_iterate_items(vgi, &_vginfos) {
 | 
			
		||||
		if (!str_list_add(cmd->mem, vgnames, 
 | 
			
		||||
				  pool_strdup(cmd->mem, vgi->vgname))) {
 | 
			
		||||
			log_error("strlist allocation failed");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		if (!(sl->str = pool_strdup(cmd->mem,
 | 
			
		||||
					    list_item(vgih,
 | 
			
		||||
						      struct lvmcache_vginfo)->
 | 
			
		||||
					    vgname))) {
 | 
			
		||||
			log_error("vgname allocation failed");
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		list_add(vgnames, &sl->list);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return vgnames;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@
 | 
			
		||||
#ifndef _LVM_ERRORS_H
 | 
			
		||||
#define _LVM_ERRORS_H
 | 
			
		||||
 | 
			
		||||
#define EINVALID_CMD_LINE	1
 | 
			
		||||
#define ENO_SUCH_CMD		3
 | 
			
		||||
#define ECMD_PROCESSED		4
 | 
			
		||||
#define ECMD_PROCESSED		1
 | 
			
		||||
#define ENO_SUCH_CMD		2
 | 
			
		||||
#define EINVALID_CMD_LINE	3
 | 
			
		||||
#define ECMD_FAILED		5
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@
 | 
			
		||||
#include "filter-composite.h"
 | 
			
		||||
#include "filter-persistent.h"
 | 
			
		||||
#include "filter-regex.h"
 | 
			
		||||
#include "filter-sysfs.h"
 | 
			
		||||
#include "label.h"
 | 
			
		||||
#include "lvm-file.h"
 | 
			
		||||
#include "format-text.h"
 | 
			
		||||
@@ -261,33 +262,43 @@ static int _init_dev_cache(struct cmd_context *cmd)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define MAX_FILTERS 3
 | 
			
		||||
 | 
			
		||||
static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
 | 
			
		||||
{
 | 
			
		||||
	unsigned nr_filt = 0;
 | 
			
		||||
	struct config_node *cn;
 | 
			
		||||
	struct dev_filter *f1, *f2, *f3;
 | 
			
		||||
	struct dev_filter *filters[MAX_FILTERS];
 | 
			
		||||
 | 
			
		||||
	cn = find_config_node(cmd->cf->root, "devices/types", '/');
 | 
			
		||||
	memset(filters, 0, sizeof(filters));
 | 
			
		||||
 | 
			
		||||
	if (!(f2 = lvm_type_filter_create(cmd->proc_dir, cn)))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(cn = find_config_node(cmd->cf->root, "devices/filter", '/'))) {
 | 
			
		||||
		log_debug("devices/filter not found in config file: no regex "
 | 
			
		||||
			  "filter installed");
 | 
			
		||||
		return f2;
 | 
			
		||||
	/* sysfs filter */
 | 
			
		||||
	if (find_config_bool(cmd->cf->root, "devices/sysfs_scan", '/',
 | 
			
		||||
			     DEFAULT_SYSFS_SCAN)) {
 | 
			
		||||
		if ((filters[nr_filt] = sysfs_filter_create(cmd->proc_dir)))
 | 
			
		||||
			nr_filt++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(f1 = regex_filter_create(cn->v))) {
 | 
			
		||||
	/* regex filter */
 | 
			
		||||
	if (!(cn = find_config_node(cmd->cf->root, "devices/filter", '/')))
 | 
			
		||||
		log_debug("devices/filter not found in config file: no regex "
 | 
			
		||||
			  "filter installed");
 | 
			
		||||
 | 
			
		||||
	else if (!(filters[nr_filt++] = regex_filter_create(cn->v))) {
 | 
			
		||||
		log_error("Failed to create regex device filter");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(f3 = composite_filter_create(2, f1, f2))) {
 | 
			
		||||
		log_error("Failed to create composite device filter");
 | 
			
		||||
	/* device type filter */
 | 
			
		||||
	cn = find_config_node(cmd->cf->root, "devices/types", '/');
 | 
			
		||||
	if (!(filters[nr_filt++] = lvm_type_filter_create(cmd->proc_dir, cn))) {
 | 
			
		||||
		log_error("Failed to create lvm type filter");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return f3;
 | 
			
		||||
	/* only build a composite filter if we really need it */
 | 
			
		||||
	return (nr_filt == 1) ?
 | 
			
		||||
	    filters[0] : composite_filter_create(nr_filt, filters);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _init_filters(struct cmd_context *cmd)
 | 
			
		||||
@@ -425,6 +436,10 @@ struct cmd_context *create_toolcontext(struct arg *the_args)
 | 
			
		||||
	if (!setlocale(LC_ALL, ""))
 | 
			
		||||
		log_error("setlocale failed");
 | 
			
		||||
 | 
			
		||||
#ifdef INTL_PACKAGE
 | 
			
		||||
	bindtextdomain(INTL_PACKAGE, LOCALEDIR);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	init_syslog(DEFAULT_LOG_FACILITY);
 | 
			
		||||
 | 
			
		||||
	if (!(cmd = dbg_malloc(sizeof(*cmd)))) {
 | 
			
		||||
 
 | 
			
		||||
@@ -385,17 +385,25 @@ static int _write_config(struct config_node *n, FILE *fp, int level)
 | 
			
		||||
int write_config_file(struct config_tree *cf, const char *file)
 | 
			
		||||
{
 | 
			
		||||
	int r = 1;
 | 
			
		||||
	FILE *fp = fopen(file, "w");
 | 
			
		||||
	if (!fp) {
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
 | 
			
		||||
	if (!file) {
 | 
			
		||||
		fp = stdout;
 | 
			
		||||
		file = "stdout";
 | 
			
		||||
	} else if (!(fp = fopen(file, "w"))) {
 | 
			
		||||
		log_sys_error("open", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log_verbose("Dumping configuration to %s", file);
 | 
			
		||||
	if (!_write_config(cf->root, fp, 0)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		log_error("Failure while writing configuration");
 | 
			
		||||
		r = 0;
 | 
			
		||||
	}
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
 | 
			
		||||
	if (fp != stdout)
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@
 | 
			
		||||
#define DEFAULT_SYS_DIR "/etc/lvm"
 | 
			
		||||
#define DEFAULT_DEV_DIR "/dev"
 | 
			
		||||
#define DEFAULT_PROC_DIR "/proc"
 | 
			
		||||
#define DEFAULT_SYSFS_SCAN 1
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_LOCK_DIR "/var/lock/lvm"
 | 
			
		||||
#define DEFAULT_LOCKING_LIB "lvm2_locking.so"
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,7 @@ void hash_destroy(struct hash_table *t)
 | 
			
		||||
	dbg_free(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline struct hash_node **_find(struct hash_table *t, const char *key)
 | 
			
		||||
static struct hash_node **_find(struct hash_table *t, const char *key)
 | 
			
		||||
{
 | 
			
		||||
	unsigned h = _hash(key) & (t->num_slots - 1);
 | 
			
		||||
	struct hash_node **c;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										80
									
								
								lib/datastruct/str_list.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								lib/datastruct/str_list.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2003 Sistina Software
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the LGPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "lib.h"
 | 
			
		||||
#include "str_list.h"
 | 
			
		||||
 | 
			
		||||
struct list *str_list_create(struct pool *mem)
 | 
			
		||||
{
 | 
			
		||||
	struct list *sl;
 | 
			
		||||
 | 
			
		||||
	if (!(sl = pool_alloc(mem, sizeof(struct list)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list_init(sl);
 | 
			
		||||
 | 
			
		||||
	return sl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int str_list_add(struct pool *mem, struct list *sll, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	struct str_list *sln;
 | 
			
		||||
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Already in list? */
 | 
			
		||||
	if (str_list_match_item(sll, str))
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (!(sln = pool_alloc(mem, sizeof(*sln)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sln->str = str;
 | 
			
		||||
	list_add(sll, &sln->list);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int str_list_del(struct list *sll, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	struct list *slh, *slht;
 | 
			
		||||
 | 
			
		||||
	list_iterate_safe(slh, slht, sll) {
 | 
			
		||||
		if (!strcmp(str, list_item(slh, struct str_list)->str))
 | 
			
		||||
			 list_del(slh);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int str_list_match_item(struct list *sll, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	struct str_list *sl;
 | 
			
		||||
 | 
			
		||||
	list_iterate_items(sl, sll)
 | 
			
		||||
	    if (!strcmp(str, sl->str))
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int str_list_match_list(struct list *sll, struct list *sll2)
 | 
			
		||||
{
 | 
			
		||||
	struct str_list *sl;
 | 
			
		||||
 | 
			
		||||
	list_iterate_items(sl, sll)
 | 
			
		||||
	    if (str_list_match_item(sll2, sl->str))
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								lib/datastruct/str_list.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								lib/datastruct/str_list.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2003 Sistina Software (UK) Limited.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the GPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _LVM_STR_LIST_H
 | 
			
		||||
#define _LVM_STR_LIST_H
 | 
			
		||||
 | 
			
		||||
#include "pool.h"
 | 
			
		||||
 | 
			
		||||
struct list *str_list_create(struct pool *mem);
 | 
			
		||||
int str_list_add(struct pool *mem, struct list *sll, const char *str);
 | 
			
		||||
int str_list_del(struct list *sll, const char *str);
 | 
			
		||||
int str_list_match_item(struct list *sll, const char *str);
 | 
			
		||||
int str_list_match_list(struct list *sll, struct list *sll2);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -313,6 +313,17 @@ static int _insert(const char *path, int rec)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (S_ISDIR(info.st_mode)) {	/* add a directory */
 | 
			
		||||
		/* check it's not a symbolic link */
 | 
			
		||||
		if (lstat(path, &info) < 0) {
 | 
			
		||||
			log_sys_very_verbose("lstat", path);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (S_ISLNK(info.st_mode)) {
 | 
			
		||||
			log_debug("%s: Symbolic link to directory", path);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (rec)
 | 
			
		||||
			r = _insert_dir(path);
 | 
			
		||||
 | 
			
		||||
@@ -406,11 +417,22 @@ static inline void _check_for_open_devices(void)
 | 
			
		||||
 | 
			
		||||
void dev_cache_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	_check_for_open_devices();
 | 
			
		||||
 | 
			
		||||
	pool_destroy(_cache.mem);
 | 
			
		||||
	if (_cache.names)
 | 
			
		||||
		_check_for_open_devices();
 | 
			
		||||
 | 
			
		||||
	if (_cache.mem) {
 | 
			
		||||
		pool_destroy(_cache.mem);
 | 
			
		||||
		_cache.mem = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (_cache.names) {
 | 
			
		||||
		hash_destroy(_cache.names);
 | 
			
		||||
		_cache.names = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_cache.devices = NULL;
 | 
			
		||||
	_cache.has_scanned = 0;
 | 
			
		||||
	list_init(&_cache.dirs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_cache_add_dir(const char *path)
 | 
			
		||||
@@ -460,7 +482,7 @@ const char *dev_name_confirmed(struct device *dev, int quiet)
 | 
			
		||||
		}
 | 
			
		||||
		if (quiet)
 | 
			
		||||
			log_debug("Path %s no longer valid for device(%d,%d)",
 | 
			
		||||
			  	  name, (int) MAJOR(dev->dev),
 | 
			
		||||
				  name, (int) MAJOR(dev->dev),
 | 
			
		||||
				  (int) MINOR(dev->dev));
 | 
			
		||||
		else
 | 
			
		||||
			log_error("Path %s no longer valid for device(%d,%d)",
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
#include "metadata.h"
 | 
			
		||||
#include "lvmcache.h"
 | 
			
		||||
#include "memlock.h"
 | 
			
		||||
#include "locking.h"
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
@@ -23,6 +24,9 @@
 | 
			
		||||
#  undef WUNTRACED		/* Avoid redefinition */
 | 
			
		||||
#  include <linux/fs.h>		/* For block ioctl definitions */
 | 
			
		||||
#  define BLKSIZE_SHIFT SECTOR_SHIFT
 | 
			
		||||
#  ifndef BLKGETSIZE64		/* fs.h out-of-date */
 | 
			
		||||
#    define BLKGETSIZE64 _IOR(0x12, 114, size_t)
 | 
			
		||||
#  endif /* BLKGETSIZE64 */
 | 
			
		||||
#else
 | 
			
		||||
#  include <sys/disk.h>
 | 
			
		||||
#  define BLKBSZGET DKIOCGETBLOCKSIZE
 | 
			
		||||
@@ -30,11 +34,15 @@
 | 
			
		||||
#  define BLKGETSIZE64 DKIOCGETBLOCKCOUNT
 | 
			
		||||
#  define BLKFLSBUF DKIOCSYNCHRONIZECACHE
 | 
			
		||||
#  define BLKSIZE_SHIFT 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef O_DIRECT_SUPPORT
 | 
			
		||||
#  ifndef O_DIRECT
 | 
			
		||||
#    define O_DIRECT	0
 | 
			
		||||
#    error O_DIRECT support configured but O_DIRECT definition not found in headers
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* FIXME Use _llseek for 64-bit
 | 
			
		||||
_syscall5(int,  _llseek,  uint,  fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh);
 | 
			
		||||
 if (_llseek((unsigned) fd, (ulong) (offset >> 32), (ulong) (offset & 0xFFFFFFFF), &pos, SEEK_SET) < 0) { 
 | 
			
		||||
@@ -151,7 +159,7 @@ static int _aligned_io(struct device_area *where, void *buffer,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!block_size)
 | 
			
		||||
		block_size = SECTOR_SIZE * 2;
 | 
			
		||||
		block_size = getpagesize();
 | 
			
		||||
 | 
			
		||||
	_widen_region(block_size, where, &widened);
 | 
			
		||||
 | 
			
		||||
@@ -284,8 +292,10 @@ int dev_open_flags(struct device *dev, int flags, int direct, int quiet)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef O_DIRECT_SUPPORT
 | 
			
		||||
	if (direct)
 | 
			
		||||
		flags |= O_DIRECT;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if ((dev->fd = open(name, flags, 0777)) < 0) {
 | 
			
		||||
		log_sys_error("open", name);
 | 
			
		||||
@@ -302,7 +312,8 @@ int dev_open_flags(struct device *dev, int flags, int direct, int quiet)
 | 
			
		||||
		dev->fd = -1;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
#if !O_DIRECT
 | 
			
		||||
 | 
			
		||||
#ifndef O_DIRECT_SUPPORT
 | 
			
		||||
	if (!(dev->flags & DEV_REGULAR))
 | 
			
		||||
		dev_flush(dev);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -319,14 +330,20 @@ int dev_open_flags(struct device *dev, int flags, int direct, int quiet)
 | 
			
		||||
 | 
			
		||||
int dev_open_quiet(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	/* FIXME Open O_RDONLY if vg read lock? */
 | 
			
		||||
	return dev_open_flags(dev, O_RDWR, 1, 1);
 | 
			
		||||
	int flags;
 | 
			
		||||
 | 
			
		||||
	flags = vg_write_lock_held() ? O_RDWR : O_RDONLY;
 | 
			
		||||
 | 
			
		||||
	return dev_open_flags(dev, flags, 1, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_open(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	/* FIXME Open O_RDONLY if vg read lock? */
 | 
			
		||||
	return dev_open_flags(dev, O_RDWR, 1, 0);
 | 
			
		||||
	int flags;
 | 
			
		||||
 | 
			
		||||
	flags = vg_write_lock_held() ? O_RDWR : O_RDONLY;
 | 
			
		||||
 | 
			
		||||
	return dev_open_flags(dev, flags, 1, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void _close(struct device *dev)
 | 
			
		||||
@@ -346,25 +363,36 @@ static void _close(struct device *dev)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_close(struct device *dev)
 | 
			
		||||
static int _dev_close(struct device *dev, int immediate)
 | 
			
		||||
{
 | 
			
		||||
	if (dev->fd < 0) {
 | 
			
		||||
		log_error("Attempt to close device '%s' "
 | 
			
		||||
			  "which is not open.", dev_name(dev));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
#if !O_DIRECT
 | 
			
		||||
 | 
			
		||||
#ifndef O_DIRECT_SUPPORT
 | 
			
		||||
	if (dev->flags & DEV_ACCESSED_W)
 | 
			
		||||
		dev_flush(dev);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* FIXME lookup device in cache to get vgname and see if it's locked? */
 | 
			
		||||
	if (--dev->open_count < 1 && !vgs_locked())
 | 
			
		||||
	if (--dev->open_count < 1 && (immediate || !vgs_locked()))
 | 
			
		||||
		_close(dev);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_close(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	return _dev_close(dev, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dev_close_immediate(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	return _dev_close(dev, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dev_close_all(void)
 | 
			
		||||
{
 | 
			
		||||
	struct list *doh, *doht;
 | 
			
		||||
@@ -406,7 +434,7 @@ int dev_append(struct device *dev, size_t len, void *buffer)
 | 
			
		||||
	r = dev_write(dev, dev->end, len, buffer);
 | 
			
		||||
	dev->end += (uint64_t) len;
 | 
			
		||||
 | 
			
		||||
#if !O_DIRECT
 | 
			
		||||
#ifndef O_DIRECT_SUPPORT
 | 
			
		||||
	dev_flush(dev);
 | 
			
		||||
#endif
 | 
			
		||||
	return r;
 | 
			
		||||
@@ -455,6 +483,8 @@ int dev_zero(struct device *dev, uint64_t offset, size_t len)
 | 
			
		||||
		len -= s;
 | 
			
		||||
		if (!len)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		offset += s;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dev->flags |= DEV_ACCESSED_W;
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,7 @@ int dev_open(struct device *dev);
 | 
			
		||||
int dev_open_quiet(struct device *dev);
 | 
			
		||||
int dev_open_flags(struct device *dev, int flags, int append, int quiet);
 | 
			
		||||
int dev_close(struct device *dev);
 | 
			
		||||
int dev_close_immediate(struct device *dev);
 | 
			
		||||
void dev_close_all(void);
 | 
			
		||||
 | 
			
		||||
static inline int dev_fd(struct device *dev)
 | 
			
		||||
 
 | 
			
		||||
@@ -37,35 +37,32 @@ static void _destroy(struct dev_filter *f)
 | 
			
		||||
	dbg_free(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct dev_filter *composite_filter_create(int n, ...)
 | 
			
		||||
struct dev_filter *composite_filter_create(int n, struct dev_filter **filters)
 | 
			
		||||
{
 | 
			
		||||
	struct dev_filter **filters = dbg_malloc(sizeof(*filters) * (n + 1));
 | 
			
		||||
	struct dev_filter *cf;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	int i;
 | 
			
		||||
	struct dev_filter **filters_copy, *cf;
 | 
			
		||||
 | 
			
		||||
	if (!filters) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(cf = dbg_malloc(sizeof(*cf)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		dbg_free(filters);
 | 
			
		||||
	if (!(filters_copy = dbg_malloc(sizeof(*filters) * (n + 1)))) {
 | 
			
		||||
		log_error("composite filters allocation failed");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	va_start(ap, n);
 | 
			
		||||
	for (i = 0; i < n; i++) {
 | 
			
		||||
		struct dev_filter *f = va_arg(ap, struct dev_filter *);
 | 
			
		||||
		filters[i] = f;
 | 
			
		||||
	memcpy(filters_copy, filters, sizeof(*filters) * n);
 | 
			
		||||
	filters_copy[n] = NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(cf = dbg_malloc(sizeof(*cf)))) {
 | 
			
		||||
		log_error("compsoite filters allocation failed");
 | 
			
		||||
		dbg_free(filters_copy);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	filters[i] = NULL;
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	cf->passes_filter = _and_p;
 | 
			
		||||
	cf->destroy = _destroy;
 | 
			
		||||
	cf->private = filters;
 | 
			
		||||
	cf->private = filters_copy;
 | 
			
		||||
 | 
			
		||||
	return cf;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,6 @@
 | 
			
		||||
 | 
			
		||||
#include "dev-cache.h"
 | 
			
		||||
 | 
			
		||||
struct dev_filter *composite_filter_create(int n, ...);
 | 
			
		||||
struct dev_filter *composite_filter_create(int n, struct dev_filter **filters);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										273
									
								
								lib/filters/filter-sysfs.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								lib/filters/filter-sysfs.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,273 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2004 Red Hat Inc
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the GPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "lib.h"
 | 
			
		||||
#include "filter-sysfs.h"
 | 
			
		||||
#include "lvm-string.h"
 | 
			
		||||
#include "pool.h"
 | 
			
		||||
 | 
			
		||||
#include <sys/sysmacros.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
 | 
			
		||||
static int _locate_sysfs_blocks(const char *proc, char *path, size_t len)
 | 
			
		||||
{
 | 
			
		||||
	char proc_mounts[PATH_MAX];
 | 
			
		||||
	int r = 0;
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
	char *split[2], buffer[PATH_MAX + 16];
 | 
			
		||||
 | 
			
		||||
	if (!*proc) {
 | 
			
		||||
		log_verbose("No proc filesystem found: skipping sysfs filter");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
	if (lvm_snprintf(proc_mounts, sizeof(proc_mounts),
 | 
			
		||||
			 "%s/mounts", proc) < 0) {
 | 
			
		||||
		log_error("Failed to create /proc/mounts string");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(fp = fopen(proc_mounts, "r"))) {
 | 
			
		||||
		log_sys_error("fopen %s", proc_mounts);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (fgets(buffer, sizeof(buffer), fp)) {
 | 
			
		||||
		if (split_words(buffer, 2, split) == 2 &&
 | 
			
		||||
		    !strcmp(split[0], "sysfs")) {
 | 
			
		||||
			if (lvm_snprintf(path, len, "%s/%s", split[1],
 | 
			
		||||
					 "block") >= 0) {
 | 
			
		||||
				r = 1;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------
 | 
			
		||||
 * We need to store a set of dev_t.
 | 
			
		||||
 *--------------------------------------------------------------*/
 | 
			
		||||
struct entry {
 | 
			
		||||
	struct entry *next;
 | 
			
		||||
	dev_t dev;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define SET_BUCKETS 64
 | 
			
		||||
struct dev_set {
 | 
			
		||||
	struct pool *mem;
 | 
			
		||||
	const char *sys_block;
 | 
			
		||||
	int initialised;
 | 
			
		||||
	struct entry *slots[SET_BUCKETS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct dev_set *_dev_set_create(struct pool *mem, const char *sys_block)
 | 
			
		||||
{
 | 
			
		||||
	struct dev_set *ds;
 | 
			
		||||
 | 
			
		||||
	if (!(ds = pool_zalloc(mem, sizeof(*ds))))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	ds->mem = mem;
 | 
			
		||||
	ds->sys_block = pool_strdup(mem, sys_block);
 | 
			
		||||
	ds->initialised = 0;
 | 
			
		||||
 | 
			
		||||
	return ds;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline unsigned _hash_dev(dev_t dev)
 | 
			
		||||
{
 | 
			
		||||
	return (major(dev) ^ minor(dev)) & (SET_BUCKETS - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Doesn't check that the set already contains dev.
 | 
			
		||||
 */
 | 
			
		||||
static int _set_insert(struct dev_set *ds, dev_t dev)
 | 
			
		||||
{
 | 
			
		||||
	struct entry *e;
 | 
			
		||||
	unsigned h = _hash_dev(dev);
 | 
			
		||||
 | 
			
		||||
	if (!(e = pool_alloc(ds->mem, sizeof(*e))))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	e->next = ds->slots[h];
 | 
			
		||||
	e->dev = dev;
 | 
			
		||||
	ds->slots[h] = e;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _set_lookup(struct dev_set *ds, dev_t dev)
 | 
			
		||||
{
 | 
			
		||||
	unsigned h = _hash_dev(dev);
 | 
			
		||||
	struct entry *e;
 | 
			
		||||
 | 
			
		||||
	for (e = ds->slots[h]; e; e = e->next)
 | 
			
		||||
		if (e->dev == dev)
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------
 | 
			
		||||
 * filter methods
 | 
			
		||||
 *--------------------------------------------------------------*/
 | 
			
		||||
static int _parse_dev(const char *file, FILE *fp, dev_t *result)
 | 
			
		||||
{
 | 
			
		||||
	unsigned major, minor;
 | 
			
		||||
	char buffer[64];
 | 
			
		||||
 | 
			
		||||
	if (!fgets(buffer, sizeof(buffer), fp)) {
 | 
			
		||||
		log_error("Empty sysfs device file: %s", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (sscanf(buffer, "%u:%u", &major, &minor) != 2) {
 | 
			
		||||
		log_info("sysfs device file not correct format");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*result = makedev(major, minor);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _read_dev(const char *file, dev_t *result)
 | 
			
		||||
{
 | 
			
		||||
	int r;
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
 | 
			
		||||
	if (!(fp = fopen(file, "r"))) {
 | 
			
		||||
		log_sys_error("fopen", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r = _parse_dev(file, fp, result);
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Recurse through sysfs directories, inserting any devs found.
 | 
			
		||||
 */
 | 
			
		||||
static int _read_devs(struct dev_set *ds, const char *dir)
 | 
			
		||||
{
 | 
			
		||||
        struct dirent *d;
 | 
			
		||||
        DIR *dr;
 | 
			
		||||
	char path[PATH_MAX];
 | 
			
		||||
	dev_t dev;
 | 
			
		||||
	int r = 1;
 | 
			
		||||
 | 
			
		||||
        if (!(dr = opendir(dir))) {
 | 
			
		||||
                log_sys_error("opendir", dir);
 | 
			
		||||
                return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        while ((d = readdir(dr))) {
 | 
			
		||||
                if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (lvm_snprintf(path, sizeof(path), "%s/%s", dir,
 | 
			
		||||
				 d->d_name) < 0) {
 | 
			
		||||
			log_error("sysfs path name too long: %s in %s",
 | 
			
		||||
				  d->d_name, dir);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (d->d_type == DT_DIR) {
 | 
			
		||||
			if (!_read_devs(ds, path)) {
 | 
			
		||||
				r = 0;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ((d->d_type == DT_REG && !strcmp(d->d_name, "dev")))
 | 
			
		||||
			if (!_read_dev(path, &dev) || !_set_insert(ds, dev)) {
 | 
			
		||||
				r = 0;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        if (closedir(dr))
 | 
			
		||||
                log_sys_error("closedir", dir);
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _init_devs(struct dev_set *ds)
 | 
			
		||||
{
 | 
			
		||||
	if (!_read_devs(ds, ds->sys_block)) {
 | 
			
		||||
		ds->initialised = -1;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ds->initialised = 1;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int _accept_p(struct dev_filter *f, struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct dev_set *ds = (struct dev_set *) f->private;
 | 
			
		||||
 | 
			
		||||
	if (!ds->initialised)
 | 
			
		||||
		_init_devs(ds);
 | 
			
		||||
 | 
			
		||||
	/* Pass through if initialisation failed */
 | 
			
		||||
	if (ds->initialised != 1)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return _set_lookup(ds, dev->dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void _destroy(struct dev_filter *f)
 | 
			
		||||
{
 | 
			
		||||
	struct dev_set *ds = (struct dev_set *) f->private;
 | 
			
		||||
	pool_destroy(ds->mem);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct dev_filter *sysfs_filter_create(const char *proc)
 | 
			
		||||
{
 | 
			
		||||
	char sys_block[PATH_MAX];
 | 
			
		||||
	struct pool *mem;
 | 
			
		||||
	struct dev_set *ds;
 | 
			
		||||
	struct dev_filter *f;
 | 
			
		||||
 | 
			
		||||
	if (!_locate_sysfs_blocks(proc, sys_block, sizeof(sys_block)))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(mem = pool_create(256))) {
 | 
			
		||||
		log_error("sysfs pool creation failed");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(ds = _dev_set_create(mem, sys_block))) {
 | 
			
		||||
		log_error("sysfs dev_set creation failed");
 | 
			
		||||
		goto bad;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(f = pool_zalloc(mem, sizeof(*f)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		goto bad;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	f->passes_filter = _accept_p;
 | 
			
		||||
	f->destroy = _destroy;
 | 
			
		||||
	f->private = ds;
 | 
			
		||||
	return f;
 | 
			
		||||
 | 
			
		||||
 bad:
 | 
			
		||||
	pool_destroy(mem);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								lib/filters/filter-sysfs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lib/filters/filter-sysfs.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2004 Red Hat Inc
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the GPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _LVM_FILTER_SYSFS_H
 | 
			
		||||
#define _LVM_FILTER_SYSFS_H
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "dev-cache.h"
 | 
			
		||||
 | 
			
		||||
struct dev_filter *sysfs_filter_create(const char *proc);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -57,6 +57,7 @@ static const device_info_t device_info[] = {
 | 
			
		||||
	{"cciss", 16},		/* Compaq CCISS array */
 | 
			
		||||
	{"ubd", 16},		/* User-mode virtual block device */
 | 
			
		||||
	{"ataraid", 16},	/* ATA Raid */
 | 
			
		||||
	{"drbd", 16},		/* Distributed Replicated Block Device */
 | 
			
		||||
	{NULL, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -150,6 +150,10 @@ static int _read_pvd(struct device *dev, struct pv_disk *pvd)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* If UUID is missing, create one */
 | 
			
		||||
	if (pvd->pv_uuid[0] == '\0')
 | 
			
		||||
		uuid_from_num(pvd->pv_uuid, pvd->pv_number);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -172,6 +176,10 @@ static int _read_vgd(struct disk_list *data)
 | 
			
		||||
 | 
			
		||||
	_xlate_vgd(vgd);
 | 
			
		||||
 | 
			
		||||
	/* If UUID is missing, create one */
 | 
			
		||||
	if (vgd->vg_uuid[0] == '\0')
 | 
			
		||||
		uuid_from_num(vgd->vg_uuid, vgd->vg_number);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -263,14 +271,13 @@ void munge_exported_vg(struct pv_disk *pvd)
 | 
			
		||||
	/* Return if PV not in a VG */
 | 
			
		||||
	if ((!*pvd->vg_name))
 | 
			
		||||
		return;
 | 
			
		||||
	/* FIXME also check vgd->status & VG_EXPORTED? */
 | 
			
		||||
 | 
			
		||||
	l = strlen(pvd->vg_name);
 | 
			
		||||
	s = sizeof(EXPORTED_TAG);
 | 
			
		||||
	if (!strncmp(pvd->vg_name + l - s + 1, EXPORTED_TAG, s))
 | 
			
		||||
		pvd->vg_name[l - s + 1] = '\0';
 | 
			
		||||
 | 
			
		||||
	pvd->pv_status |= VG_EXPORTED;
 | 
			
		||||
	if (!strncmp(pvd->vg_name + l - s + 1, EXPORTED_TAG, s)) {
 | 
			
		||||
		pvd->vg_name[l - s + 1] = '\0'; 
 | 
			
		||||
		pvd->pv_status |= VG_EXPORTED;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct disk_list *__read_disk(const struct format_type *fmt,
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,8 @@
 | 
			
		||||
#define MAX_LV 256
 | 
			
		||||
#define MAX_VG 99
 | 
			
		||||
 | 
			
		||||
#define LVM_BLK_MAJOR 58
 | 
			
		||||
 | 
			
		||||
#define MAX_PV_SIZE	((uint32_t) -1)	/* 2TB in sectors - 1 */
 | 
			
		||||
#define MIN_PE_SIZE	(8192L >> SECTOR_SHIFT)	/* 8 KB in sectors */
 | 
			
		||||
#define MAX_PE_SIZE	(16L * 1024L * (1024L >> SECTOR_SHIFT) * 1024L)
 | 
			
		||||
@@ -171,7 +173,7 @@ struct disk_list {
 | 
			
		||||
 */
 | 
			
		||||
int calculate_layout(struct disk_list *dl);
 | 
			
		||||
int calculate_extent_count(struct physical_volume *pv, uint32_t extent_size,
 | 
			
		||||
			   uint32_t max_extent_count);
 | 
			
		||||
			   uint32_t max_extent_count, uint64_t pe_start);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Low level io routines which read/write
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,35 @@ static int _check_vgs(struct list *pvs, int *partial)
 | 
			
		||||
		else if (memcmp(&first->vgd, &dl->vgd, sizeof(first->vgd))) {
 | 
			
		||||
			log_error("VG data differs between PVs %s and %s",
 | 
			
		||||
				  dev_name(first->dev), dev_name(dl->dev));
 | 
			
		||||
			log_debug("VG data on %s: %s %s %" PRIu32 " %" PRIu32
 | 
			
		||||
				  "  %" PRIu32 " %" PRIu32 " %" PRIu32 " %"
 | 
			
		||||
				  PRIu32 " %" PRIu32 " %" PRIu32 " %" PRIu32
 | 
			
		||||
				  " %" PRIu32 " %" PRIu32 " %" PRIu32 " %"
 | 
			
		||||
				  PRIu32 " %" PRIu32 " %" PRIu32,
 | 
			
		||||
				  dev_name(first->dev), first->vgd.vg_uuid,
 | 
			
		||||
				  first->vgd.vg_name_dummy,
 | 
			
		||||
				  first->vgd.vg_number, first->vgd.vg_access,
 | 
			
		||||
				  first->vgd.vg_status, first->vgd.lv_max,
 | 
			
		||||
				  first->vgd.lv_cur, first->vgd.lv_open,
 | 
			
		||||
				  first->vgd.pv_max, first->vgd.pv_cur,
 | 
			
		||||
				  first->vgd.pv_act, first->vgd.dummy,
 | 
			
		||||
				  first->vgd.vgda, first->vgd.pe_size,
 | 
			
		||||
				  first->vgd.pe_total, first->vgd.pe_allocated,
 | 
			
		||||
				  first->vgd.pvg_total);
 | 
			
		||||
			log_debug("VG data on %s: %s %s %" PRIu32 " %" PRIu32
 | 
			
		||||
				  "  %" PRIu32 " %" PRIu32 " %" PRIu32 " %"
 | 
			
		||||
				  PRIu32 " %" PRIu32 " %" PRIu32 " %" PRIu32
 | 
			
		||||
				  " %" PRIu32 " %" PRIu32 " %" PRIu32 " %"
 | 
			
		||||
				  PRIu32 " %" PRIu32 " %" PRIu32,
 | 
			
		||||
				  dev_name(dl->dev), dl->vgd.vg_uuid,
 | 
			
		||||
				  dl->vgd.vg_name_dummy, dl->vgd.vg_number,
 | 
			
		||||
				  dl->vgd.vg_access, dl->vgd.vg_status,
 | 
			
		||||
				  dl->vgd.lv_max, dl->vgd.lv_cur,
 | 
			
		||||
				  dl->vgd.lv_open, dl->vgd.pv_max,
 | 
			
		||||
				  dl->vgd.pv_cur, dl->vgd.pv_act, dl->vgd.dummy,
 | 
			
		||||
				  dl->vgd.vgda, dl->vgd.pe_size,
 | 
			
		||||
				  dl->vgd.pe_total, dl->vgd.pe_allocated,
 | 
			
		||||
				  dl->vgd.pvg_total);
 | 
			
		||||
			list_del(pvh);
 | 
			
		||||
			if (partial_mode()) {
 | 
			
		||||
				*partial = 1;
 | 
			
		||||
@@ -317,14 +346,12 @@ static int _pv_setup(const struct format_type *fmt,
 | 
			
		||||
	/*
 | 
			
		||||
	 * This works out pe_start and pe_count.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!calculate_extent_count(pv, extent_size, extent_count)) {
 | 
			
		||||
	if (!calculate_extent_count(pv, extent_size, extent_count, pe_start)) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Retain existing extent locations exactly */
 | 
			
		||||
	/* FIXME Relax this so a non-overlapping existing pe_start can also 
 | 
			
		||||
	 * be used in place of the calculated one */
 | 
			
		||||
	if (((pe_start || extent_count) && (pe_start != pv->pe_start)) ||
 | 
			
		||||
	    (extent_count && (extent_count != pv->pe_count))) {
 | 
			
		||||
		log_error("Metadata would overwrite physical extents");
 | 
			
		||||
@@ -334,32 +361,12 @@ static int _pv_setup(const struct format_type *fmt,
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t _find_free_lvnum(struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	int lvnum_used[MAX_LV];
 | 
			
		||||
	uint32_t i = 0;
 | 
			
		||||
	struct list *lvh;
 | 
			
		||||
	struct lv_list *lvl;
 | 
			
		||||
 | 
			
		||||
	memset(&lvnum_used, 0, sizeof(lvnum_used));
 | 
			
		||||
 | 
			
		||||
	list_iterate(lvh, &lv->vg->lvs) {
 | 
			
		||||
		lvl = list_item(lvh, struct lv_list);
 | 
			
		||||
		lvnum_used[lvnum_from_lvid(&lvl->lv->lvid)] = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (lvnum_used[i])
 | 
			
		||||
		i++;
 | 
			
		||||
 | 
			
		||||
	return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _lv_setup(struct format_instance *fid, struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	uint64_t max_size = UINT_MAX;
 | 
			
		||||
 | 
			
		||||
	if (!*lv->lvid.s)
 | 
			
		||||
		lvid_from_lvnum(&lv->lvid, &lv->vg->id, _find_free_lvnum(lv));
 | 
			
		||||
		lvid_from_lvnum(&lv->lvid, &lv->vg->id, find_free_lvnum(lv));
 | 
			
		||||
 | 
			
		||||
	if (lv->le_count > MAX_LE_TOTAL) {
 | 
			
		||||
		log_error("logical volumes cannot contain more than "
 | 
			
		||||
@@ -442,10 +449,10 @@ static int _pv_write(const struct format_type *fmt, struct physical_volume *pv,
 | 
			
		||||
static int _vg_setup(struct format_instance *fid, struct volume_group *vg)
 | 
			
		||||
{
 | 
			
		||||
	/* just check max_pv and max_lv */
 | 
			
		||||
	if (vg->max_lv >= MAX_LV)
 | 
			
		||||
	if (!vg->max_lv || vg->max_lv >= MAX_LV)
 | 
			
		||||
		vg->max_lv = MAX_LV - 1;
 | 
			
		||||
 | 
			
		||||
	if (vg->max_pv >= MAX_PV)
 | 
			
		||||
	if (!vg->max_pv || vg->max_pv >= MAX_PV)
 | 
			
		||||
		vg->max_pv = MAX_PV - 1;
 | 
			
		||||
 | 
			
		||||
	if (vg->extent_size > MAX_PE_SIZE || vg->extent_size < MIN_PE_SIZE) {
 | 
			
		||||
@@ -550,7 +557,7 @@ struct format_type *init_format(struct cmd_context *cmd)
 | 
			
		||||
	fmt->ops = &_format1_ops;
 | 
			
		||||
	fmt->name = FMT_LVM1_NAME;
 | 
			
		||||
	fmt->alias = NULL;
 | 
			
		||||
	fmt->features = 0;
 | 
			
		||||
	fmt->features = FMT_RESTRICTED_LVIDS | FMT_ORPHAN_ALLOCATABLE;
 | 
			
		||||
	fmt->private = NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(fmt->labeller = lvm1_labeller_create(fmt))) {
 | 
			
		||||
 
 | 
			
		||||
@@ -339,6 +339,8 @@ static void _export_lv(struct lv_disk *lvd, struct volume_group *vg,
 | 
			
		||||
	if (lv->status & FIXED_MINOR) {
 | 
			
		||||
		lvd->lv_status |= LV_PERSISTENT_MINOR;
 | 
			
		||||
		lvd->lv_dev = MKDEV(lv->major, lv->minor);
 | 
			
		||||
	} else {
 | 
			
		||||
		lvd->lv_dev = MKDEV(LVM_BLK_MAJOR, lvnum_from_lvid(&lv->lvid));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	lvd->lv_read_ahead = lv->read_ahead;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
#include "hash.h"
 | 
			
		||||
#include "pool.h"
 | 
			
		||||
#include "disk-rep.h"
 | 
			
		||||
#include "lv_alloc.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * After much thought I have decided it is easier,
 | 
			
		||||
@@ -191,26 +192,13 @@ static int _check_maps_are_complete(struct hash_table *maps)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct lv_segment *_alloc_seg(struct pool *mem, uint32_t stripes)
 | 
			
		||||
{
 | 
			
		||||
	struct lv_segment *seg;
 | 
			
		||||
	uint32_t len = sizeof(*seg) + (stripes * sizeof(seg->area[0]));
 | 
			
		||||
 | 
			
		||||
	if (!(seg = pool_zalloc(mem, len))) {
 | 
			
		||||
		stack;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return seg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _read_linear(struct pool *mem, struct lv_map *lvm)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t le = 0;
 | 
			
		||||
	struct lv_segment *seg;
 | 
			
		||||
 | 
			
		||||
	while (le < lvm->lv->le_count) {
 | 
			
		||||
		seg = _alloc_seg(mem, 1);
 | 
			
		||||
		seg = alloc_lv_segment(mem, 1);
 | 
			
		||||
 | 
			
		||||
		seg->lv = lvm->lv;
 | 
			
		||||
		seg->type = SEG_STRIPED;
 | 
			
		||||
@@ -276,7 +264,7 @@ static int _read_stripes(struct pool *mem, struct lv_map *lvm)
 | 
			
		||||
	len = lvm->lv->le_count / lvm->stripes;
 | 
			
		||||
 | 
			
		||||
	while (le < len) {
 | 
			
		||||
		if (!(seg = _alloc_seg(mem, lvm->stripes))) {
 | 
			
		||||
		if (!(seg = alloc_lv_segment(mem, lvm->stripes))) {
 | 
			
		||||
			stack;
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -103,9 +103,10 @@ int calculate_layout(struct disk_list *dl)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The number of extents that can fit on a disk is metadata format dependant.
 | 
			
		||||
 * pe_start is any existing value for pe_start
 | 
			
		||||
 */
 | 
			
		||||
int calculate_extent_count(struct physical_volume *pv, uint32_t extent_size,
 | 
			
		||||
			   uint32_t max_extent_count)
 | 
			
		||||
			   uint32_t max_extent_count, uint64_t pe_start)
 | 
			
		||||
{
 | 
			
		||||
	struct pv_disk *pvd = dbg_malloc(sizeof(*pvd));
 | 
			
		||||
	uint32_t end;
 | 
			
		||||
@@ -138,6 +139,9 @@ int calculate_extent_count(struct physical_volume *pv, uint32_t extent_size,
 | 
			
		||||
		end = ((pvd->pe_on_disk.base + pvd->pe_on_disk.size +
 | 
			
		||||
			SECTOR_SIZE - 1) >> SECTOR_SHIFT);
 | 
			
		||||
 | 
			
		||||
		if (pe_start && end < pe_start)
 | 
			
		||||
			end = pe_start;
 | 
			
		||||
 | 
			
		||||
		pvd->pe_start = _round_up(end, PE_ALIGN);
 | 
			
		||||
 | 
			
		||||
	} while ((pvd->pe_start + (pvd->pe_total * extent_size))
 | 
			
		||||
 
 | 
			
		||||
@@ -63,23 +63,6 @@ static struct flag *_get_flags(int type)
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _emit(char **buffer, size_t *size, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int n;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	n = vsnprintf(*buffer, *size, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	if (n < 0 || (n == *size))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	*buffer += n;
 | 
			
		||||
	*size -= n;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Converts a bitset to an array of string values,
 | 
			
		||||
 * using one of the tables defined at the top of
 | 
			
		||||
@@ -95,27 +78,27 @@ int print_flags(uint32_t status, int type, char *buffer, size_t size)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_emit(&buffer, &size, "["))
 | 
			
		||||
	if (!emit_to_buffer(&buffer, &size, "["))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	for (f = 0; flags[f].mask; f++) {
 | 
			
		||||
		if (status & flags[f].mask) {
 | 
			
		||||
			if (!first) {
 | 
			
		||||
				if (!_emit(&buffer, &size, ", "))
 | 
			
		||||
				if (!emit_to_buffer(&buffer, &size, ", "))
 | 
			
		||||
					return 0;
 | 
			
		||||
 | 
			
		||||
			} else
 | 
			
		||||
				first = 0;
 | 
			
		||||
 | 
			
		||||
			if (!_emit(&buffer, &size, "\"%s\"",
 | 
			
		||||
				   flags[f].description))
 | 
			
		||||
			if (!emit_to_buffer(&buffer, &size, "\"%s\"",
 | 
			
		||||
					    flags[f].description))
 | 
			
		||||
				return 0;
 | 
			
		||||
 | 
			
		||||
			status &= ~flags[f].mask;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_emit(&buffer, &size, "]"))
 | 
			
		||||
	if (!emit_to_buffer(&buffer, &size, "]"))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (status)
 | 
			
		||||
 
 | 
			
		||||
@@ -892,6 +892,17 @@ static int _mda_setup(const struct format_type *fmt,
 | 
			
		||||
	/* Place mda straight after label area at start of disk */
 | 
			
		||||
	start1 = LABEL_SCAN_SIZE;
 | 
			
		||||
 | 
			
		||||
	/* Ensure it's not going to be bigger than the disk! */
 | 
			
		||||
	if (mda_size1 > disk_size) {
 | 
			
		||||
		log_print("Warning: metadata area fills disk %s",
 | 
			
		||||
			  dev_name(pv->dev));
 | 
			
		||||
		/* Leave some free space for rounding */
 | 
			
		||||
		/* Avoid empty data area as could cause tools problems */
 | 
			
		||||
		mda_size1 = disk_size - start1 - alignment * 2;
 | 
			
		||||
		/* Only have 1 mda in this case */
 | 
			
		||||
		pvmetadatacopies = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Round up to PE_ALIGN boundary */
 | 
			
		||||
	mda_adjustment = (mda_size1 + start1) % alignment;
 | 
			
		||||
	if (mda_adjustment)
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@
 | 
			
		||||
#include "hash.h"
 | 
			
		||||
#include "toolcontext.h"
 | 
			
		||||
#include "lvmcache.h"
 | 
			
		||||
#include "lv_alloc.h"
 | 
			
		||||
 | 
			
		||||
typedef int (*section_fn) (struct format_instance * fid, struct pool * mem,
 | 
			
		||||
			   struct volume_group * vg, struct config_node * pvn,
 | 
			
		||||
@@ -279,9 +280,8 @@ static int _read_segment(struct pool *mem, struct volume_group *vg,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(seg = pool_zalloc(mem, sizeof(*seg) +
 | 
			
		||||
				(sizeof(seg->area[0]) * area_count)))) {
 | 
			
		||||
		stack;
 | 
			
		||||
	if (!(seg = alloc_lv_segment(mem, area_count))) {
 | 
			
		||||
		log_error("Segment allocation failed");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,8 @@
 | 
			
		||||
static struct locking_type _locking;
 | 
			
		||||
static sigset_t _oldset;
 | 
			
		||||
 | 
			
		||||
static int _lock_count = 0;	/* Number of locks held */
 | 
			
		||||
static int _vg_lock_count = 0;		/* Number of locks held */
 | 
			
		||||
static int _vg_write_lock_held = 0;	/* VG write lock held? */
 | 
			
		||||
static int _signals_blocked = 0;
 | 
			
		||||
 | 
			
		||||
static void _block_signals(int flags)
 | 
			
		||||
@@ -48,7 +49,7 @@ static void _block_signals(int flags)
 | 
			
		||||
static void _unblock_signals(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Don't unblock signals while any locks are held */
 | 
			
		||||
	if (!_signals_blocked || _lock_count)
 | 
			
		||||
	if (!_signals_blocked || _vg_lock_count)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (sigprocmask(SIG_SETMASK, &_oldset, NULL)) {
 | 
			
		||||
@@ -63,9 +64,10 @@ static void _unblock_signals(void)
 | 
			
		||||
 | 
			
		||||
void reset_locking(void)
 | 
			
		||||
{
 | 
			
		||||
	int was_locked = _lock_count;
 | 
			
		||||
	int was_locked = _vg_lock_count;
 | 
			
		||||
 | 
			
		||||
	_lock_count = 0;
 | 
			
		||||
	_vg_lock_count = 0;
 | 
			
		||||
	_vg_write_lock_held = 0;
 | 
			
		||||
 | 
			
		||||
	_locking.reset_locking();
 | 
			
		||||
 | 
			
		||||
@@ -73,12 +75,21 @@ void reset_locking(void)
 | 
			
		||||
		_unblock_signals();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void _update_lock_count(int flags)
 | 
			
		||||
static inline void _update_vg_lock_count(int flags)
 | 
			
		||||
{
 | 
			
		||||
	if ((flags & LCK_SCOPE_MASK) != LCK_VG)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if ((flags & LCK_TYPE_MASK) == LCK_UNLOCK)
 | 
			
		||||
		_lock_count--;
 | 
			
		||||
		_vg_lock_count--;
 | 
			
		||||
	else
 | 
			
		||||
		_lock_count++;
 | 
			
		||||
		_vg_lock_count++;
 | 
			
		||||
 | 
			
		||||
	/* We don't bother to reset this until all VG locks are dropped */
 | 
			
		||||
	if ((flags & LCK_TYPE_MASK) == LCK_WRITE)
 | 
			
		||||
		_vg_write_lock_held = 1;
 | 
			
		||||
	else if (!_vg_lock_count)
 | 
			
		||||
		_vg_write_lock_held = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -171,7 +182,7 @@ static int _lock_vol(struct cmd_context *cmd, const char *resource, int flags)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_update_lock_count(flags);
 | 
			
		||||
	_update_vg_lock_count(flags);
 | 
			
		||||
	_unblock_signals();
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
@@ -209,3 +220,8 @@ int lock_vol(struct cmd_context *cmd, const char *vol, int flags)
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int vg_write_lock_held(void)
 | 
			
		||||
{
 | 
			
		||||
	return _vg_write_lock_held;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@
 | 
			
		||||
int init_locking(int type, struct config_tree *cf);
 | 
			
		||||
void fin_locking(void);
 | 
			
		||||
void reset_locking(void);
 | 
			
		||||
int vg_write_lock_held(void);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * LCK_VG:
 | 
			
		||||
@@ -33,7 +34,7 @@ int check_lvm1_vg_inactive(struct cmd_context *cmd, const char *vgname);
 | 
			
		||||
/*
 | 
			
		||||
 * Lock type - these numbers are the same as VMS and the IBM DLM
 | 
			
		||||
 */
 | 
			
		||||
#define LCK_TYPE_MASK	0x000000FF
 | 
			
		||||
#define LCK_TYPE_MASK	0x00000007
 | 
			
		||||
 | 
			
		||||
#define LCK_NULL	0x00000000	/* LCK$_NLMODE */
 | 
			
		||||
#define LCK_READ	0x00000001	/* LCK$_CRMODE */
 | 
			
		||||
@@ -41,20 +42,20 @@ int check_lvm1_vg_inactive(struct cmd_context *cmd, const char *vgname);
 | 
			
		||||
					/* LCK$_PRMODE */
 | 
			
		||||
#define LCK_WRITE	0x00000004	/* LCK$_PWMODE */
 | 
			
		||||
#define LCK_EXCL	0x00000005	/* LCK$_EXMODE */
 | 
			
		||||
#define LCK_UNLOCK      0x00000010	/* This is ours */
 | 
			
		||||
#define LCK_UNLOCK      0x00000006	/* This is ours */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Lock scope
 | 
			
		||||
 */
 | 
			
		||||
#define LCK_SCOPE_MASK	0x0000FF00
 | 
			
		||||
#define LCK_SCOPE_MASK	0x00000008
 | 
			
		||||
#define LCK_VG		0x00000000
 | 
			
		||||
#define LCK_LV		0x00000100
 | 
			
		||||
#define LCK_LV		0x00000008
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Lock bits
 | 
			
		||||
 */
 | 
			
		||||
#define LCK_NONBLOCK	0x00010000	/* Don't block waiting for lock? */
 | 
			
		||||
#define LCK_HOLD	0x00020000	/* Hold lock when lock_vol returns? */
 | 
			
		||||
#define LCK_NONBLOCK	0x00000010	/* Don't block waiting for lock? */
 | 
			
		||||
#define LCK_HOLD	0x00000020	/* Hold lock when lock_vol returns? */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Common combinations
 | 
			
		||||
 
 | 
			
		||||
@@ -186,6 +186,9 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	char buf[1024];
 | 
			
		||||
	int bufused, n;
 | 
			
		||||
	char *trformat;		/* Translated format string */
 | 
			
		||||
 | 
			
		||||
	trformat = _(format);
 | 
			
		||||
 | 
			
		||||
	if (!_log_suppress) {
 | 
			
		||||
		va_start(ap, format);
 | 
			
		||||
@@ -197,7 +200,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
				printf("%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
				if (_indent)
 | 
			
		||||
					printf("      ");
 | 
			
		||||
				vprintf(format, ap);
 | 
			
		||||
				vprintf(trformat, ap);
 | 
			
		||||
				putchar('\n');
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
@@ -207,7 +210,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
				printf("%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
				if (_indent)
 | 
			
		||||
					printf("    ");
 | 
			
		||||
				vprintf(format, ap);
 | 
			
		||||
				vprintf(trformat, ap);
 | 
			
		||||
				putchar('\n');
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
@@ -216,24 +219,24 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
				printf("%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
				if (_indent)
 | 
			
		||||
					printf("  ");
 | 
			
		||||
				vprintf(format, ap);
 | 
			
		||||
				vprintf(trformat, ap);
 | 
			
		||||
				putchar('\n');
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case _LOG_WARN:
 | 
			
		||||
			printf("%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
			vprintf(format, ap);
 | 
			
		||||
			vprintf(trformat, ap);
 | 
			
		||||
			putchar('\n');
 | 
			
		||||
			break;
 | 
			
		||||
		case _LOG_ERR:
 | 
			
		||||
			fprintf(stderr, "%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
			vfprintf(stderr, format, ap);
 | 
			
		||||
			vfprintf(stderr, trformat, ap);
 | 
			
		||||
			fputc('\n', stderr);
 | 
			
		||||
			break;
 | 
			
		||||
		case _LOG_FATAL:
 | 
			
		||||
		default:
 | 
			
		||||
			fprintf(stderr, "%s%s", _cmd_name, _msg_prefix);
 | 
			
		||||
			vfprintf(stderr, format, ap);
 | 
			
		||||
			vfprintf(stderr, trformat, ap);
 | 
			
		||||
			fputc('\n', stderr);
 | 
			
		||||
			break;
 | 
			
		||||
			;
 | 
			
		||||
@@ -249,7 +252,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
			_msg_prefix);
 | 
			
		||||
 | 
			
		||||
		va_start(ap, format);
 | 
			
		||||
		vfprintf(_log_file, format, ap);
 | 
			
		||||
		vfprintf(_log_file, trformat, ap);
 | 
			
		||||
		va_end(ap);
 | 
			
		||||
 | 
			
		||||
		fprintf(_log_file, "\n");
 | 
			
		||||
@@ -258,7 +261,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
 | 
			
		||||
	if (_syslog && (_log_while_suspended || !memlock())) {
 | 
			
		||||
		va_start(ap, format);
 | 
			
		||||
		vsyslog(level, format, ap);
 | 
			
		||||
		vsyslog(level, trformat, ap);
 | 
			
		||||
		va_end(ap);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -276,7 +279,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
 | 
			
		||||
 | 
			
		||||
		va_start(ap, format);
 | 
			
		||||
		n = vsnprintf(buf + bufused - 1, sizeof(buf) - bufused - 1,
 | 
			
		||||
			      format, ap);
 | 
			
		||||
			      trformat, ap);
 | 
			
		||||
		va_end(ap);
 | 
			
		||||
		bufused += n;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,6 @@
 | 
			
		||||
 * Copyright (C) 2003 Sistina Software (UK) Limited.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the LGPL.
 | 
			
		||||
 *
 | 
			
		||||
 * This is the in core representation of a volume group and its
 | 
			
		||||
 * associated physical and logical volumes.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _LVM_LV_ALLOC_H
 | 
			
		||||
 
 | 
			
		||||
@@ -478,7 +478,7 @@ struct logical_volume *lv_create_empty(struct format_instance *fi,
 | 
			
		||||
	struct logical_volume *lv;
 | 
			
		||||
	char dname[32];
 | 
			
		||||
 | 
			
		||||
	if (vg->max_lv == vg->lv_count) {
 | 
			
		||||
	if (vg->max_lv && (vg->max_lv == vg->lv_count)) {
 | 
			
		||||
		log_error("Maximum number of logical volumes (%u) reached "
 | 
			
		||||
			  "in volume group %s", vg->max_lv, vg->name);
 | 
			
		||||
		return NULL;
 | 
			
		||||
@@ -743,3 +743,26 @@ int lock_lvs(struct cmd_context *cmd, struct list *lvs, int flags)
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t find_free_lvnum(struct logical_volume *lv)
 | 
			
		||||
{
 | 
			
		||||
	int lvnum_used[MAX_RESTRICTED_LVS + 1];
 | 
			
		||||
	uint32_t i = 0;
 | 
			
		||||
	struct list *lvh;
 | 
			
		||||
	struct lv_list *lvl;
 | 
			
		||||
	int lvnum;
 | 
			
		||||
 | 
			
		||||
	memset(&lvnum_used, 0, sizeof(lvnum_used));
 | 
			
		||||
 | 
			
		||||
	list_iterate(lvh, &lv->vg->lvs) {
 | 
			
		||||
		lvl = list_item(lvh, struct lv_list);
 | 
			
		||||
		lvnum = lvnum_from_lvid(&lvl->lv->lvid);
 | 
			
		||||
		if (lvnum <= MAX_RESTRICTED_LVS)
 | 
			
		||||
			lvnum_used[lvnum] = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (lvnum_used[i])
 | 
			
		||||
		i++;
 | 
			
		||||
 | 
			
		||||
	return i;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -83,7 +83,7 @@ static int _add_pv_to_vg(struct format_instance *fid, struct volume_group *vg,
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (vg->pv_count == vg->max_pv) {
 | 
			
		||||
	if (vg->pv_count && (vg->pv_count == vg->max_pv)) {
 | 
			
		||||
		log_error("No space for '%s' - volume group '%s' "
 | 
			
		||||
			  "holds max %d physical volume(s).", pv_name,
 | 
			
		||||
			  vg->name, vg->max_pv);
 | 
			
		||||
@@ -696,8 +696,8 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vgname,
 | 
			
		||||
 */
 | 
			
		||||
struct volume_group *vg_read_by_vgid(struct cmd_context *cmd, const char *vgid)
 | 
			
		||||
{
 | 
			
		||||
	// const char *vgname;
 | 
			
		||||
	// struct list *vgnames, *slh;
 | 
			
		||||
	const char *vgname;
 | 
			
		||||
	struct list *vgnames, *slh;
 | 
			
		||||
	struct volume_group *vg;
 | 
			
		||||
	struct lvmcache_vginfo *vginfo;
 | 
			
		||||
	int consistent = 0;
 | 
			
		||||
@@ -716,13 +716,14 @@ struct volume_group *vg_read_by_vgid(struct cmd_context *cmd, const char *vgid)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
	/* Mustn't scan if memory locked: ensure cache gets pre-populated! */
 | 
			
		||||
	if (memlock())
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	/* FIXME Need a genuine read by ID here - don't vg_read by name! */
 | 
			
		||||
	/* FIXME Disabled vgrenames while active for now because we aren't
 | 
			
		||||
	 *       allowed to do a full scan here any more. */
 | 
			
		||||
 | 
			
		||||
/*** FIXME Cope with vgrename here
 | 
			
		||||
	// The slow way - full scan required to cope with vgrename 
 | 
			
		||||
	if (!(vgnames = get_vgs(cmd, 1))) {
 | 
			
		||||
		log_error("vg_read_by_vgid: get_vgs failed");
 | 
			
		||||
@@ -746,7 +747,6 @@ struct volume_group *vg_read_by_vgid(struct cmd_context *cmd, const char *vgid)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
***/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Only called by activate.c */
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@
 | 
			
		||||
#define STRIPE_SIZE_MAX ( 512L * 1024L >> SECTOR_SHIFT)	/* 512 KB in sectors */
 | 
			
		||||
#define PV_MIN_SIZE ( 512L * 1024L >> SECTOR_SHIFT)	/* 512 KB in sectors */
 | 
			
		||||
#define PE_ALIGN (65536UL >> SECTOR_SHIFT)	/* PE alignment */
 | 
			
		||||
#define MAX_RESTRICTED_LVS 255	/* Used by FMT_RESTRICTED_LVIDS */
 | 
			
		||||
 | 
			
		||||
/* Various flags */
 | 
			
		||||
/* Note that the bits no longer necessarily correspond to LVM1 disk format */
 | 
			
		||||
@@ -50,7 +51,11 @@
 | 
			
		||||
/* Format features flags */
 | 
			
		||||
#define FMT_SEGMENTS		0x00000001	/* Arbitrary segment params? */
 | 
			
		||||
#define FMT_MDAS		0x00000002	/* Proper metadata areas? */
 | 
			
		||||
 | 
			
		||||
#define FMT_TAGS		0x00000004	/* Tagging? */
 | 
			
		||||
#define FMT_UNLIMITED_VOLS	0x00000008	/* Unlimited PVs/LVs? */
 | 
			
		||||
#define FMT_RESTRICTED_LVIDS	0x00000010	/* LVID <= 255 */
 | 
			
		||||
#define FMT_ORPHAN_ALLOCATABLE	0x00000020	/* Orphan PV allocatable? */
 | 
			
		||||
  
 | 
			
		||||
typedef enum {
 | 
			
		||||
	ALLOC_DEFAULT,
 | 
			
		||||
	ALLOC_NEXT_FREE,
 | 
			
		||||
@@ -511,6 +516,8 @@ float pvmove_percent(struct logical_volume *lv_mirr);
 | 
			
		||||
struct list *lvs_using_lv(struct cmd_context *cmd, struct volume_group *vg,
 | 
			
		||||
			  struct logical_volume *lv);
 | 
			
		||||
 | 
			
		||||
uint32_t find_free_lvnum(struct logical_volume *lv);
 | 
			
		||||
 | 
			
		||||
static inline int validate_name(const char *n)
 | 
			
		||||
{
 | 
			
		||||
	register char c;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								lib/misc/intl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/misc/intl.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2004 Sistina Software (UK) Limited.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the LGPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _LVM_INTL_H
 | 
			
		||||
#define _LVM_INTL_H
 | 
			
		||||
 | 
			
		||||
#ifdef INTL_PACKAGE
 | 
			
		||||
#  include <libintl.h>
 | 
			
		||||
#  define _(String) dgettext(INTL_PACKAGE, (String))
 | 
			
		||||
#else
 | 
			
		||||
#  define _(String) (String)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -15,5 +15,6 @@
 | 
			
		||||
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "dbg_malloc.h"
 | 
			
		||||
#include "intl.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@
 | 
			
		||||
#include "lvm-types.h"
 | 
			
		||||
#include "lvm-string.h"
 | 
			
		||||
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * On error, up to glibc 2.0.6, snprintf returned -1 if buffer was too small;
 | 
			
		||||
 * From glibc 2.1 it returns number of chars (excl. trailing null) that would 
 | 
			
		||||
@@ -29,3 +31,61 @@ int lvm_snprintf(char *buf, size_t bufsize, const char *format, ...)
 | 
			
		||||
 | 
			
		||||
	return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int emit_to_buffer(char **buffer, size_t *size, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int n;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	n = vsnprintf(*buffer, *size, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	if (n < 0 || (n == *size))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	*buffer += n;
 | 
			
		||||
	*size -= n;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * consume characters while they match the predicate function.
 | 
			
		||||
 */
 | 
			
		||||
static char *_consume(char *buffer, int (*fn) (int))
 | 
			
		||||
{
 | 
			
		||||
	while (*buffer && fn(*buffer))
 | 
			
		||||
		buffer++;
 | 
			
		||||
 | 
			
		||||
	return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _isword(int c)
 | 
			
		||||
{
 | 
			
		||||
	return !isspace(c);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Split buffer into NULL-separated words in argv.
 | 
			
		||||
 * Returns number of words.
 | 
			
		||||
 */
 | 
			
		||||
int split_words(char *buffer, unsigned max, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	unsigned arg;
 | 
			
		||||
 | 
			
		||||
	for (arg = 0; arg < max; arg++) {
 | 
			
		||||
		buffer = _consume(buffer, isspace);
 | 
			
		||||
		if (!*buffer)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		argv[arg] = buffer;
 | 
			
		||||
		buffer = _consume(buffer, _isword);
 | 
			
		||||
 | 
			
		||||
		if (*buffer) {
 | 
			
		||||
			*buffer = '\0';
 | 
			
		||||
			buffer++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return arg;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,4 +19,8 @@
 | 
			
		||||
 */
 | 
			
		||||
int lvm_snprintf(char *buf, size_t bufsize, const char *format, ...);
 | 
			
		||||
 | 
			
		||||
int emit_to_buffer(char **buffer, size_t *size, const char *fmt, ...);
 | 
			
		||||
 | 
			
		||||
int split_words(char *buffer, unsigned max, char **argv);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,12 @@ void *malloc_aux(size_t s, const char *file, int line)
 | 
			
		||||
	struct memblock *nb;
 | 
			
		||||
	size_t tsize = s + sizeof(*nb) + sizeof(unsigned long);
 | 
			
		||||
 | 
			
		||||
	if (s > 50000000) {
 | 
			
		||||
		log_error("Huge memory allocation (size %" PRIuPTR
 | 
			
		||||
			  ") rejected - bug?", s);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(nb = malloc(tsize))) {
 | 
			
		||||
		log_error("couldn't allocate any memory, size = %" PRIuPTR, s);
 | 
			
		||||
		return 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -195,25 +195,3 @@ void pool_abandon_object(struct pool *p)
 | 
			
		||||
	p->begun = 0;
 | 
			
		||||
	p->object = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *pool_strdup(struct pool *p, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, strlen(str) + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret)
 | 
			
		||||
		strcpy(ret, str);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *pool_strndup(struct pool *p, const char *str, size_t n)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, n + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		strncpy(ret, str, n);
 | 
			
		||||
		ret[n] = '\0';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -195,28 +195,6 @@ void pool_abandon_object(struct pool *p)
 | 
			
		||||
	p->object_alignment = DEFAULT_ALIGNMENT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *pool_strdup(struct pool *p, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, strlen(str) + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret)
 | 
			
		||||
		strcpy(ret, str);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *pool_strndup(struct pool *p, const char *str, size_t n)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, n + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		strncpy(ret, str, n);
 | 
			
		||||
		ret[n] = '\0';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _align_chunk(struct chunk *c, unsigned alignment)
 | 
			
		||||
{
 | 
			
		||||
	c->begin += alignment - ((unsigned long) c->begin & (alignment - 1));
 | 
			
		||||
 
 | 
			
		||||
@@ -9,3 +9,35 @@
 | 
			
		||||
#else
 | 
			
		||||
#include "pool-fast.c"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
char *pool_strdup(struct pool *p, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, strlen(str) + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret)
 | 
			
		||||
		strcpy(ret, str);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *pool_strndup(struct pool *p, const char *str, size_t n)
 | 
			
		||||
{
 | 
			
		||||
	char *ret = pool_alloc(p, n + 1);
 | 
			
		||||
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		strncpy(ret, str, n);
 | 
			
		||||
		ret[n] = '\0';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *pool_zalloc(struct pool *p, size_t s)
 | 
			
		||||
{
 | 
			
		||||
	void *ptr = pool_alloc(p, s);
 | 
			
		||||
 | 
			
		||||
	if (ptr)
 | 
			
		||||
		memset(ptr, 0, s);
 | 
			
		||||
 | 
			
		||||
	return ptr;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -107,15 +107,6 @@ void pool_abandon_object(struct pool *p);
 | 
			
		||||
/* utilities */
 | 
			
		||||
char *pool_strdup(struct pool *p, const char *str);
 | 
			
		||||
char *pool_strndup(struct pool *p, const char *str, size_t n);
 | 
			
		||||
 | 
			
		||||
static inline void *pool_zalloc(struct pool *p, size_t s)
 | 
			
		||||
{
 | 
			
		||||
	void *ptr = pool_alloc(p, s);
 | 
			
		||||
 | 
			
		||||
	if (ptr)
 | 
			
		||||
		memset(ptr, 0, s);
 | 
			
		||||
 | 
			
		||||
	return ptr;
 | 
			
		||||
}
 | 
			
		||||
void *pool_zalloc(struct pool *p, size_t s);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,18 @@ int lvid_create(union lvid *lvid, struct id *vgid)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void uuid_from_num(char *uuid, uint32_t num)
 | 
			
		||||
{
 | 
			
		||||
	unsigned i;
 | 
			
		||||
 | 
			
		||||
	for (i = ID_LEN; i; i--) {
 | 
			
		||||
		uuid[i - 1] = _c[num % (sizeof(_c) - 1)];
 | 
			
		||||
		num /= sizeof(_c) - 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uuid[ID_LEN] = '\0';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lvid_from_lvnum(union lvid *lvid, struct id *vgid, uint32_t lv_num)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@ union lvid {
 | 
			
		||||
int lvid_from_lvnum(union lvid *lvid, struct id *vgid, uint32_t lv_num);
 | 
			
		||||
int lvnum_from_lvid(union lvid *lvid);
 | 
			
		||||
 | 
			
		||||
void uuid_from_num(char *uuid, uint32_t num);
 | 
			
		||||
 | 
			
		||||
int lvid_create(union lvid *lvid, struct id *vgid);
 | 
			
		||||
int id_create(struct id *id);
 | 
			
		||||
int id_valid(struct id *id);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
Base {
 | 
			
		||||
	global:
 | 
			
		||||
		dm_log_init;
 | 
			
		||||
		dm_log_init_verbose;
 | 
			
		||||
		dm_task_create;
 | 
			
		||||
		dm_task_destroy;
 | 
			
		||||
		dm_task_set_name;
 | 
			
		||||
		dm_task_set_uuid;
 | 
			
		||||
		dm_get_library_version;
 | 
			
		||||
		dm_task_get_driver_version;
 | 
			
		||||
		dm_task_get_info;
 | 
			
		||||
		dm_task_get_deps;
 | 
			
		||||
		dm_task_get_name;
 | 
			
		||||
		dm_task_get_names;
 | 
			
		||||
		dm_task_get_uuid;
 | 
			
		||||
		dm_task_set_ro;
 | 
			
		||||
		dm_task_set_newname;
 | 
			
		||||
		dm_task_set_event_nr;
 | 
			
		||||
		dm_task_set_major;
 | 
			
		||||
		dm_task_set_minor;
 | 
			
		||||
		dm_task_add_target;
 | 
			
		||||
		dm_get_next_target;
 | 
			
		||||
		dm_task_run;
 | 
			
		||||
		dm_set_dev_dir;
 | 
			
		||||
		dm_dir;
 | 
			
		||||
		dm_format_dev;
 | 
			
		||||
		dm_lib_release;
 | 
			
		||||
		dm_lib_exit;
 | 
			
		||||
	local:
 | 
			
		||||
		*;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										27
									
								
								libdm/.exported_symbols
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								libdm/.exported_symbols
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
dm_log_init
 | 
			
		||||
dm_log_init_verbose
 | 
			
		||||
dm_task_create
 | 
			
		||||
dm_task_destroy
 | 
			
		||||
dm_task_set_name
 | 
			
		||||
dm_task_set_uuid
 | 
			
		||||
dm_get_library_version
 | 
			
		||||
dm_task_get_driver_version
 | 
			
		||||
dm_task_get_info
 | 
			
		||||
dm_task_get_deps
 | 
			
		||||
dm_task_get_name
 | 
			
		||||
dm_task_get_names
 | 
			
		||||
dm_task_get_versions
 | 
			
		||||
dm_task_get_uuid
 | 
			
		||||
dm_task_set_ro
 | 
			
		||||
dm_task_set_newname
 | 
			
		||||
dm_task_set_event_nr
 | 
			
		||||
dm_task_set_major
 | 
			
		||||
dm_task_set_minor
 | 
			
		||||
dm_task_add_target
 | 
			
		||||
dm_get_next_target
 | 
			
		||||
dm_task_run
 | 
			
		||||
dm_set_dev_dir
 | 
			
		||||
dm_dir
 | 
			
		||||
dm_format_dev
 | 
			
		||||
dm_lib_release
 | 
			
		||||
dm_lib_exit
 | 
			
		||||
@@ -13,7 +13,10 @@ SOURCES=libdm-common.c $(interface)/libdevmapper.c
 | 
			
		||||
 | 
			
		||||
INCLUDES=-I$(interface)
 | 
			
		||||
 | 
			
		||||
TARGETS=$(interface)/libdevmapper.so
 | 
			
		||||
LIB_STATIC = $(interface)/libdevmapper.a
 | 
			
		||||
LIB_SHARED = $(interface)/libdevmapper.so
 | 
			
		||||
 | 
			
		||||
TARGETS = $(LIB_STATIC) $(LIB_SHARED)
 | 
			
		||||
 | 
			
		||||
include ../make.tmpl
 | 
			
		||||
 | 
			
		||||
@@ -23,7 +26,13 @@ install: install_@interface@
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 444 libdevmapper.h \
 | 
			
		||||
		$(includedir)/libdevmapper.h
 | 
			
		||||
 | 
			
		||||
.PHONY: install install_@interface@
 | 
			
		||||
install_static: install_@interface@_static
 | 
			
		||||
	$(LN_S) -f libdevmapper.a.$(LIB_VERSION) $(libdir)/libdevmapper.a
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 444 libdevmapper.h \
 | 
			
		||||
		$(includedir)/libdevmapper.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: install install_@interface@ install_static install_@interface@_static
 | 
			
		||||
 | 
			
		||||
install_fs: fs/libdevmapper.so
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
 | 
			
		||||
@@ -33,6 +42,10 @@ install_ioctl: ioctl/libdevmapper.so
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
 | 
			
		||||
		$(libdir)/libdevmapper.so.$(LIB_VERSION)
 | 
			
		||||
 | 
			
		||||
install_ioctl_static: ioctl/libdevmapper.a
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
 | 
			
		||||
		$(libdir)/libdevmapper.a.$(LIB_VERSION)
 | 
			
		||||
 | 
			
		||||
distclean_lib: 
 | 
			
		||||
	$(RM) libdm-common.h
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,11 @@
 | 
			
		||||
 | 
			
		||||
#include "libdm-targets.h"
 | 
			
		||||
#include "libdm-common.h"
 | 
			
		||||
#include "libdm-compat.h"
 | 
			
		||||
#include "log.h"
 | 
			
		||||
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
#  include "libdm-compat.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
@@ -16,8 +20,18 @@
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <linux/limits.h>
 | 
			
		||||
 | 
			
		||||
#ifdef linux
 | 
			
		||||
#  include <linux/limits.h>
 | 
			
		||||
#  include <linux/kdev_t.h>
 | 
			
		||||
#  include <linux/dm-ioctl.h>
 | 
			
		||||
#else
 | 
			
		||||
#  define MAJOR(x) major((x))
 | 
			
		||||
#  define MINOR(x) minor((x))
 | 
			
		||||
#  define MKDEV(x,y) makedev((x),(y))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Ensure build compatibility.  
 | 
			
		||||
@@ -66,6 +80,8 @@ static struct cmd_data _cmd_data_v4[] = {
 | 
			
		||||
	{"waitevent",	DM_DEV_WAIT,		{4, 0, 0}},
 | 
			
		||||
	{"names",	DM_LIST_DEVICES,	{4, 0, 0}},
 | 
			
		||||
	{"clear",	DM_TABLE_CLEAR,		{4, 0, 0}},
 | 
			
		||||
	{"mknodes",	DM_DEV_STATUS,		{4, 0, 0}},
 | 
			
		||||
	{"versions",	DM_LIST_VERSIONS,	{4, 1, 0}},
 | 
			
		||||
};
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
@@ -84,6 +100,56 @@ static void *_align(void *ptr, unsigned int a)
 | 
			
		||||
	return (void *) (((unsigned long) ptr + agn) & ~agn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _open_control(void)
 | 
			
		||||
{
 | 
			
		||||
	char control[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
	if (_control_fd != -1)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	snprintf(control, sizeof(control), "%s/control", dm_dir());
 | 
			
		||||
 | 
			
		||||
	if ((_control_fd = open(control, O_RDWR)) < 0) {
 | 
			
		||||
		log_error("%s: open failed: %s", control, strerror(errno));
 | 
			
		||||
		log_error("Is device-mapper driver missing from kernel?");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dm_task_destroy(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	struct target *t, *n;
 | 
			
		||||
 | 
			
		||||
	for (t = dmt->head; t; t = n) {
 | 
			
		||||
		n = t->next;
 | 
			
		||||
		free(t->params);
 | 
			
		||||
		free(t->type);
 | 
			
		||||
		free(t);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (dmt->dev_name)
 | 
			
		||||
		free(dmt->dev_name);
 | 
			
		||||
 | 
			
		||||
	if (dmt->newname)
 | 
			
		||||
		free(dmt->newname);
 | 
			
		||||
 | 
			
		||||
	if (dmt->dmi.v4)
 | 
			
		||||
		free(dmt->dmi.v4);
 | 
			
		||||
 | 
			
		||||
	if (dmt->uuid)
 | 
			
		||||
		free(dmt->uuid);
 | 
			
		||||
 | 
			
		||||
	free(dmt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Protocol Version 1 compatibility functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
 | 
			
		||||
static int _dm_task_get_driver_version_v1(struct dm_task *dmt, char *version,
 | 
			
		||||
					  size_t size)
 | 
			
		||||
{
 | 
			
		||||
@@ -122,7 +188,8 @@ static int _unmarshal_status_v1(struct dm_task *dmt, struct dm_ioctl_v1 *dmi)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _dm_format_dev_v1(char *buf, int bufsize, uint32_t dev_major, uint32_t dev_minor)
 | 
			
		||||
static int _dm_format_dev_v1(char *buf, int bufsize, uint32_t dev_major,
 | 
			
		||||
			     uint32_t dev_minor)
 | 
			
		||||
{
 | 
			
		||||
	int r;
 | 
			
		||||
 | 
			
		||||
@@ -319,6 +386,10 @@ static int _dm_names_v1(struct dm_ioctl_v1 *dmi)
 | 
			
		||||
	struct stat buf;
 | 
			
		||||
	char path[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
	log_print("Warning: Device list may be incomplete with interface "
 | 
			
		||||
		  "version 1.");
 | 
			
		||||
	log_print("Please upgrade your kernel device-mapper driver.");
 | 
			
		||||
 | 
			
		||||
	if (!(d = opendir(dev_dir))) {
 | 
			
		||||
		log_error("%s: opendir failed: %s", dev_dir, strerror(errno));
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -365,24 +436,6 @@ static int _dm_names_v1(struct dm_ioctl_v1 *dmi)
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _open_control(void)
 | 
			
		||||
{
 | 
			
		||||
	char control[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
	if (_control_fd != -1)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	snprintf(control, sizeof(control), "%s/control", dm_dir());
 | 
			
		||||
 | 
			
		||||
	if ((_control_fd = open(control, O_RDWR)) < 0) {
 | 
			
		||||
		log_error("%s: open failed: %s", control, strerror(errno));
 | 
			
		||||
		log_error("Is device-mapper driver missing from kernel?");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _dm_task_run_v1(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	struct dm_ioctl_v1 *dmi;
 | 
			
		||||
@@ -437,6 +490,14 @@ static int _dm_task_run_v1(struct dm_task *dmt)
 | 
			
		||||
		rename_dev_node(dmt->dev_name, dmt->newname);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case DM_DEVICE_MKNODES:
 | 
			
		||||
		if (dmi->flags & DM_EXISTS_FLAG)
 | 
			
		||||
			add_dev_node(dmt->dev_name, MAJOR(dmi->dev),
 | 
			
		||||
				     MINOR(dmi->dev));
 | 
			
		||||
		else
 | 
			
		||||
			rm_dev_node(dmt->dev_name);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case DM_DEVICE_STATUS:
 | 
			
		||||
	case DM_DEVICE_TABLE:
 | 
			
		||||
		if (!_unmarshal_status_v1(dmt, dmi))
 | 
			
		||||
@@ -460,38 +521,20 @@ static int _dm_task_run_v1(struct dm_task *dmt)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dm_task_destroy(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	struct target *t, *n;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (t = dmt->head; t; t = n) {
 | 
			
		||||
		n = t->next;
 | 
			
		||||
		free(t->params);
 | 
			
		||||
		free(t->type);
 | 
			
		||||
		free(t);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (dmt->dev_name)
 | 
			
		||||
		free(dmt->dev_name);
 | 
			
		||||
 | 
			
		||||
	if (dmt->newname)
 | 
			
		||||
		free(dmt->newname);
 | 
			
		||||
 | 
			
		||||
	if (dmt->dmi.v4)
 | 
			
		||||
		free(dmt->dmi.v4);
 | 
			
		||||
 | 
			
		||||
	if (dmt->uuid)
 | 
			
		||||
		free(dmt->uuid);
 | 
			
		||||
 | 
			
		||||
	free(dmt);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 * Protocol Version 4 functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int dm_task_get_driver_version(struct dm_task *dmt, char *version, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int *v;
 | 
			
		||||
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_driver_version_v1(dmt, version, size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!dmt->dmi.v4) {
 | 
			
		||||
		version[0] = '\0';
 | 
			
		||||
@@ -607,12 +650,15 @@ static int _unmarshal_status(struct dm_task *dmt, struct dm_ioctl *dmi)
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dm_format_dev(char *buf, int bufsize, uint32_t dev_major, uint32_t dev_minor)
 | 
			
		||||
int dm_format_dev(char *buf, int bufsize, uint32_t dev_major,
 | 
			
		||||
		  uint32_t dev_minor)
 | 
			
		||||
{
 | 
			
		||||
	int r;
 | 
			
		||||
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_format_dev_v1(buf, bufsize, dev_major, dev_minor);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (bufsize < 8)
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -626,8 +672,10 @@ int dm_format_dev(char *buf, int bufsize, uint32_t dev_major, uint32_t dev_minor
 | 
			
		||||
 | 
			
		||||
int dm_task_get_info(struct dm_task *dmt, struct dm_info *info)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_info_v1(dmt, info);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!dmt->dmi.v4)
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -654,24 +702,30 @@ int dm_task_get_info(struct dm_task *dmt, struct dm_info *info)
 | 
			
		||||
 | 
			
		||||
const char *dm_task_get_name(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_name_v1(dmt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return (dmt->dmi.v4->name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *dm_task_get_uuid(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_uuid_v1(dmt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return (dmt->dmi.v4->uuid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct dm_deps *dm_task_get_deps(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_deps_v1(dmt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return (struct dm_deps *) (((void *) dmt->dmi.v4) +
 | 
			
		||||
				   dmt->dmi.v4->data_start);
 | 
			
		||||
@@ -679,13 +733,21 @@ struct dm_deps *dm_task_get_deps(struct dm_task *dmt)
 | 
			
		||||
 | 
			
		||||
struct dm_names *dm_task_get_names(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_get_names_v1(dmt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return (struct dm_names *) (((void *) dmt->dmi.v4) +
 | 
			
		||||
				    dmt->dmi.v4->data_start);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct dm_versions *dm_task_get_versions(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	return (struct dm_versions *) (((void *) dmt->dmi.v4) +
 | 
			
		||||
				       dmt->dmi.v4->data_start);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dm_task_set_ro(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	dmt->read_only = 1;
 | 
			
		||||
@@ -933,11 +995,13 @@ static int _create_and_load_v4(struct dm_task *dmt)
 | 
			
		||||
 | 
			
		||||
int dm_task_run(struct dm_task *dmt)
 | 
			
		||||
{
 | 
			
		||||
	struct dm_ioctl *dmi;
 | 
			
		||||
	struct dm_ioctl *dmi = NULL;
 | 
			
		||||
	unsigned int command;
 | 
			
		||||
 | 
			
		||||
#ifdef DM_COMPAT
 | 
			
		||||
	if (_dm_version == 1)
 | 
			
		||||
		return _dm_task_run_v1(dmt);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if ((unsigned) dmt->type >=
 | 
			
		||||
	    (sizeof(_cmd_data_v4) / sizeof(*_cmd_data_v4))) {
 | 
			
		||||
@@ -968,7 +1032,8 @@ int dm_task_run(struct dm_task *dmt)
 | 
			
		||||
	log_debug("dm %s %s %s %s", _cmd_data_v4[dmt->type].name, dmi->name,
 | 
			
		||||
		  dmi->uuid, dmt->newname ? dmt->newname : "");
 | 
			
		||||
	if (ioctl(_control_fd, command, dmi) < 0) {
 | 
			
		||||
		if (errno == ENXIO && dmt->type == DM_DEVICE_INFO) {
 | 
			
		||||
		if (errno == ENXIO && ((dmt->type == DM_DEVICE_INFO) ||
 | 
			
		||||
				       (dmt->type == DM_DEVICE_MKNODES))) {
 | 
			
		||||
			dmi->flags &= ~DM_EXISTS_FLAG;	/* FIXME */
 | 
			
		||||
			goto ignore_error;
 | 
			
		||||
		}
 | 
			
		||||
@@ -995,6 +1060,14 @@ int dm_task_run(struct dm_task *dmt)
 | 
			
		||||
		rename_dev_node(dmt->dev_name, dmt->newname);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case DM_DEVICE_MKNODES:
 | 
			
		||||
		if (dmi->flags & DM_EXISTS_FLAG)
 | 
			
		||||
			add_dev_node(dmt->dev_name, MAJOR(dmi->dev),
 | 
			
		||||
				     MINOR(dmi->dev));
 | 
			
		||||
		else
 | 
			
		||||
			rm_dev_node(dmt->dev_name);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case DM_DEVICE_STATUS:
 | 
			
		||||
	case DM_DEVICE_TABLE:
 | 
			
		||||
	case DM_DEVICE_WAITEVENT:
 | 
			
		||||
 
 | 
			
		||||
@@ -89,20 +89,23 @@ enum {
 | 
			
		||||
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
static struct cmd_data _cmd_data_v1[] = {
 | 
			
		||||
        { "create",	DM_DEV_CREATE_V1,	{1, 0, 0} },
 | 
			
		||||
        { "reload",	DM_DEV_RELOAD_V1,	{1, 0, 0} },
 | 
			
		||||
        { "remove",	DM_DEV_REMOVE_V1,	{1, 0, 0} },
 | 
			
		||||
        { "remove_all",	DM_REMOVE_ALL_V1,	{1, 0, 0} },
 | 
			
		||||
        { "suspend",	DM_DEV_SUSPEND_V1,	{1, 0, 0} },
 | 
			
		||||
        { "resume",	DM_DEV_SUSPEND_V1,	{1, 0, 0} },
 | 
			
		||||
        { "info",	DM_DEV_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
        { "deps",	DM_DEV_DEPS_V1,		{1, 0, 0} },
 | 
			
		||||
        { "rename",	DM_DEV_RENAME_V1,	{1, 0, 0} },
 | 
			
		||||
        { "version",	DM_VERSION_V1,		{1, 0, 0} },
 | 
			
		||||
        { "status",	DM_TARGET_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
        { "table",	DM_TARGET_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
        { "waitevent",	DM_TARGET_WAIT_V1,	{1, 0, 0} },
 | 
			
		||||
        { "names",	0,			{4, 0, 0} }
 | 
			
		||||
	{ "create",	DM_DEV_CREATE_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "reload",	DM_DEV_RELOAD_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "remove",	DM_DEV_REMOVE_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "remove_all",	DM_REMOVE_ALL_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "suspend",	DM_DEV_SUSPEND_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "resume",	DM_DEV_SUSPEND_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "info",	DM_DEV_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "deps",	DM_DEV_DEPS_V1,		{1, 0, 0} },
 | 
			
		||||
	{ "rename",	DM_DEV_RENAME_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "version",	DM_VERSION_V1,		{1, 0, 0} },
 | 
			
		||||
	{ "status",	DM_TARGET_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "table",	DM_TARGET_STATUS_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "waitevent",	DM_TARGET_WAIT_V1,	{1, 0, 0} },
 | 
			
		||||
	{ "names",	0,			{4, 0, 0} },
 | 
			
		||||
	{ "clear",	0,			{4, 0, 0} },
 | 
			
		||||
	{ "mknodes",	0,			{4, 0, 0} },
 | 
			
		||||
	{ "versions",	0,			{4, 1, 0} },
 | 
			
		||||
};
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,10 @@
 | 
			
		||||
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
#ifdef linux
 | 
			
		||||
#  include <linux/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Since it is quite laborious to build the ioctl
 | 
			
		||||
@@ -25,8 +28,8 @@ typedef void (*dm_log_fn) (int level, const char *file, int line,
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The library user may wish to register their own
 | 
			
		||||
 * logging function, by default errors go to
 | 
			
		||||
 * stderr.
 | 
			
		||||
 * logging function, by default errors go to stderr.
 | 
			
		||||
 * Use dm_log_init(NULL) to restore the default log fn.
 | 
			
		||||
 */
 | 
			
		||||
void dm_log_init(dm_log_fn fn);
 | 
			
		||||
void dm_log_init_verbose(int level);
 | 
			
		||||
@@ -52,7 +55,11 @@ enum {
 | 
			
		||||
 | 
			
		||||
	DM_DEVICE_LIST,
 | 
			
		||||
 | 
			
		||||
	DM_DEVICE_CLEAR
 | 
			
		||||
	DM_DEVICE_CLEAR,
 | 
			
		||||
 | 
			
		||||
	DM_DEVICE_MKNODES,
 | 
			
		||||
 | 
			
		||||
	DM_DEVICE_LIST_VERSIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct dm_task;
 | 
			
		||||
@@ -92,6 +99,13 @@ struct dm_names {
 | 
			
		||||
	char name[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct dm_versions {
 | 
			
		||||
        uint32_t next;		/* Offset to next struct from start of this struct */
 | 
			
		||||
        uint32_t version[3];
 | 
			
		||||
 | 
			
		||||
        char name[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int dm_get_library_version(char *version, size_t size);
 | 
			
		||||
int dm_task_get_driver_version(struct dm_task *dmt, char *version, size_t size);
 | 
			
		||||
int dm_task_get_info(struct dm_task *dmt, struct dm_info *dmi);
 | 
			
		||||
@@ -100,6 +114,7 @@ const char *dm_task_get_uuid(struct dm_task *dmt);
 | 
			
		||||
 | 
			
		||||
struct dm_deps *dm_task_get_deps(struct dm_task *dmt);
 | 
			
		||||
struct dm_names *dm_task_get_names(struct dm_task *dmt);
 | 
			
		||||
struct dm_versions *dm_task_get_versions(struct dm_task *dmt);
 | 
			
		||||
 | 
			
		||||
int dm_task_set_ro(struct dm_task *dmt);
 | 
			
		||||
int dm_task_set_newname(struct dm_task *dmt, const char *newname);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
#include "libdm-targets.h"
 | 
			
		||||
#include "libdm-common.h"
 | 
			
		||||
#include "list.h"
 | 
			
		||||
#include "log.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
@@ -56,7 +57,10 @@ dm_log_fn _log = _default_log;
 | 
			
		||||
 | 
			
		||||
void dm_log_init(dm_log_fn fn)
 | 
			
		||||
{
 | 
			
		||||
	_log = fn;
 | 
			
		||||
	if (fn)
 | 
			
		||||
		_log = fn;
 | 
			
		||||
	else
 | 
			
		||||
		_log = _default_log;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dm_log_init_verbose(int level)
 | 
			
		||||
 
 | 
			
		||||
@@ -9,21 +9,6 @@
 | 
			
		||||
 | 
			
		||||
#include "libdevmapper.h"
 | 
			
		||||
 | 
			
		||||
#define _LOG_DEBUG 7
 | 
			
		||||
#define _LOG_INFO 6
 | 
			
		||||
#define _LOG_NOTICE 5
 | 
			
		||||
#define _LOG_WARN 4
 | 
			
		||||
#define _LOG_ERR 3
 | 
			
		||||
#define _LOG_FATAL 2
 | 
			
		||||
 | 
			
		||||
extern dm_log_fn _log;
 | 
			
		||||
 | 
			
		||||
#define log_error(msg, x...) _log(_LOG_ERR, __FILE__, __LINE__, msg, ## x)
 | 
			
		||||
#define log_print(msg, x...) _log(_LOG_WARN, __FILE__, __LINE__, msg, ## x)
 | 
			
		||||
#define log_verbose(msg, x...) _log(_LOG_NOTICE, __FILE__, __LINE__, msg, ## x)
 | 
			
		||||
#define log_very_verbose(msg, x...) _log(_LOG_INFO, __FILE__, __LINE__, msg, ## x)
 | 
			
		||||
#define log_debug(msg, x...) _log(_LOG_DEBUG, __FILE__, __LINE__, msg, ## x)
 | 
			
		||||
 | 
			
		||||
struct target *create_target(uint64_t start,
 | 
			
		||||
			     uint64_t len,
 | 
			
		||||
			     const char *type, const char *params);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								make.tmpl.in
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								make.tmpl.in
									
									
									
									
									
								
							@@ -25,9 +25,10 @@ CC = @CC@
 | 
			
		||||
RANLIB = @RANLIB@
 | 
			
		||||
SHELL = /bin/sh
 | 
			
		||||
INSTALL = @INSTALL@
 | 
			
		||||
MSGFMT = @MSGFMT@
 | 
			
		||||
LN_S = @LN_S@
 | 
			
		||||
LIBS = @LIBS@
 | 
			
		||||
CFLAGS = @CFLAGS@
 | 
			
		||||
CFLAGS += @CFLAGS@
 | 
			
		||||
 | 
			
		||||
# Setup directory variables
 | 
			
		||||
prefix = $(DESTDIR)@prefix@
 | 
			
		||||
@@ -37,6 +38,7 @@ libdir = @libdir@
 | 
			
		||||
sbindir = @sbindir@
 | 
			
		||||
infodir = @infodir@
 | 
			
		||||
mandir = @mandir@
 | 
			
		||||
localedir = @LOCALEDIR@
 | 
			
		||||
 | 
			
		||||
# setup misc variables
 | 
			
		||||
# define the ownership variables for the binaries and man pages
 | 
			
		||||
@@ -49,7 +51,7 @@ MAKEFLAGS = @JOBS@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SUFFIXES=
 | 
			
		||||
SUFFIXES=.c .d .o .so
 | 
			
		||||
SUFFIXES=.c .d .o .so .po .pot .mo
 | 
			
		||||
 | 
			
		||||
CFLAGS+=-fPIC -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline
 | 
			
		||||
 | 
			
		||||
@@ -61,6 +63,10 @@ else
 | 
			
		||||
  CFLAGS+=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ("@INTL@", "yes")
 | 
			
		||||
  CFLAGS+=-DINTL_PACKAGE=\"@INTL_PACKAGE@\" -DLOCALEDIR=\"@LOCALEDIR@\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#CFLAGS+=-DDEBUG_POOL
 | 
			
		||||
#CFLAGS+=-DBOUNDS_CHECK
 | 
			
		||||
 | 
			
		||||
@@ -83,13 +89,16 @@ STRIP=
 | 
			
		||||
DEPS=$(top_srcdir)/make.tmpl Makefile $(INC_LNS)
 | 
			
		||||
 | 
			
		||||
OBJECTS=$(SOURCES:%.c=%.o)
 | 
			
		||||
POTFILES=$(SOURCES:%.c=%.pot)
 | 
			
		||||
 | 
			
		||||
SUBDIRS.install := $(SUBDIRS:=.install)
 | 
			
		||||
SUBDIRS.pofile := $(SUBDIRS:=.pofile)
 | 
			
		||||
SUBDIRS.clean := $(SUBDIRS:=.clean)
 | 
			
		||||
SUBDIRS.distclean := $(SUBDIRS:=.distclean)
 | 
			
		||||
 | 
			
		||||
.PHONY: all install distclean clean 
 | 
			
		||||
.PHONY: all install pofile distclean clean 
 | 
			
		||||
.PHONY: $(SUBDIRS) $(SUBDIRS.install) $(SUBDIRS.clean) $(SUBDIRS.distclean)
 | 
			
		||||
.PHONY: $(SUBDIRS.pofile)
 | 
			
		||||
 | 
			
		||||
all: $(SUBDIRS) $(TARGETS)
 | 
			
		||||
 | 
			
		||||
@@ -107,9 +116,22 @@ $(SUBDIRS.clean):
 | 
			
		||||
$(SUBDIRS.distclean):
 | 
			
		||||
	-$(MAKE) -C $(@:.distclean=) distclean
 | 
			
		||||
 | 
			
		||||
ifeq ("@INTL@", "yes")
 | 
			
		||||
pofile: $(SUBDIRS.pofile) $(POTFILES)
 | 
			
		||||
 | 
			
		||||
$(SUBDIRS.pofile):
 | 
			
		||||
	$(MAKE) -C $(@:.pofile=) pofile
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
%.o: %.c
 | 
			
		||||
	$(CC) -c $(INCLUDES) $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
%.pot: %.c
 | 
			
		||||
	$(CC) -E -P $(INCLUDES) -include $(top_srcdir)/include/pogen.h \
 | 
			
		||||
		$(CFLAGS) $< > $@
 | 
			
		||||
 | 
			
		||||
%.pot: Makefile
 | 
			
		||||
	
 | 
			
		||||
%.so: %.o
 | 
			
		||||
	$(CC) -c $(INCLUDES) $(CFLAGS) %< -o $@
 | 
			
		||||
 | 
			
		||||
@@ -121,16 +143,22 @@ $(SUBDIRS.distclean):
 | 
			
		||||
	set -e; FILE=`echo $@ | sed 's/\\//\\\\\\//g;s/\\.d//g'`; \
 | 
			
		||||
		DEPS=`echo $(DEPS) | sed -e 's/\\//\\\\\\//g'`; \
 | 
			
		||||
		$(CC) -MM $(INCLUDES) $(CFLAGS) $< | \
 | 
			
		||||
		sed "s/\(.*\)\.o[ :]*/$$FILE.o $$FILE.d : $$DEPS /g" > $@; \
 | 
			
		||||
		sed "s/\(.*\)\.o[ :]*/$$FILE.o $$FILE.d $$FILE.pot: $$DEPS /g" \
 | 
			
		||||
			> $@; \
 | 
			
		||||
		[ -s $@ ] || $(RM) $@
 | 
			
		||||
 | 
			
		||||
%.mo: %.po
 | 
			
		||||
	$(MSGFMT) -o $@ $<
 | 
			
		||||
 | 
			
		||||
clean: $(SUBDIRS.clean)
 | 
			
		||||
	$(RM) $(OBJECTS) $(TARGETS) $(SOURCES:%.c=%.d)
 | 
			
		||||
	$(RM) $(OBJECTS) $(TARGETS) $(SOURCES:%.c=%.d) \
 | 
			
		||||
	$(SOURCES:%.c=%.pot)
 | 
			
		||||
 | 
			
		||||
distclean: $(SUBDIRS.distclean)
 | 
			
		||||
	$(RM) $(OBJECTS) $(TARGETS) $(SOURCES:%.c=%.d)
 | 
			
		||||
	$(RM) $(SOURCES:%.c=%.pot)
 | 
			
		||||
	$(RM) config.cache config.log config.status
 | 
			
		||||
	$(RM) Makefile make.tmpl version.h core
 | 
			
		||||
	$(RM) Makefile make.tmpl version.h core lvm2.po
 | 
			
		||||
 | 
			
		||||
ifneq ($(MAKECMDGOALS),clean)
 | 
			
		||||
  ifneq ($(MAKECMDGOALS),distclean)
 | 
			
		||||
 
 | 
			
		||||
@@ -22,11 +22,12 @@ VPATH = @srcdir@
 | 
			
		||||
 | 
			
		||||
MAN5=lvm.conf.5
 | 
			
		||||
MAN8=lvchange.8 lvcreate.8 lvdisplay.8 lvextend.8 lvm.8 lvmchange.8 \
 | 
			
		||||
	lvreduce.8 lvremove.8 lvrename.8 lvs.8 lvscan.8 pvchange.8 \
 | 
			
		||||
	pvcreate.8 pvdisplay.8 pvmove.8 pvremove.8 pvs.8 pvscan.8 \
 | 
			
		||||
	vgcfgbackup.8 vgcfgrestore.8 vgchange.8 vgck.8 vgcreate.8 \
 | 
			
		||||
	vgconvert.8 vgdisplay.8 vgextend.8 vgmerge.8 vgreduce.8 vgremove.8 \
 | 
			
		||||
	vgrename.8 vgs.8 vgscan.8
 | 
			
		||||
	lvmdiskscan.8 lvreduce.8 lvremove.8 lvrename.8 lvresize.8 lvs.8 \
 | 
			
		||||
	lvscan.8 pvchange.8 pvcreate.8 pvdisplay.8 pvmove.8 pvremove.8 pvs.8 \
 | 
			
		||||
	pvscan.8 vgcfgbackup.8 vgcfgrestore.8 vgchange.8 vgck.8 vgcreate.8 \
 | 
			
		||||
	vgconvert.8 vgdisplay.8 vgexport.8 vgextend.8 vgimport.8 \
 | 
			
		||||
	vgmerge.8 vgmknodes.8 vgreduce.8 vgremove.8 vgrename.8 \
 | 
			
		||||
	vgs.8 vgscan.8 vgsplit.8
 | 
			
		||||
MAN5DIR=${mandir}/man5
 | 
			
		||||
MAN8DIR=${mandir}/man8
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										167
									
								
								man/dmsetup.8.in
									
									
									
									
									
								
							
							
						
						
									
										167
									
								
								man/dmsetup.8.in
									
									
									
									
									
								
							@@ -1,16 +1,19 @@
 | 
			
		||||
.TH DMSETUP 8 "Nov 29 2001" "Linux" "MAINTENTANCE COMMANDS"
 | 
			
		||||
.TH DMSETUP 8 "Sep 17 2003" "Linux" "MAINTENTANCE COMMANDS"
 | 
			
		||||
.SH NAME
 | 
			
		||||
dmsetup \- low level logical volume management
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.ad l
 | 
			
		||||
.B dmsetup create
 | 
			
		||||
.I device_name table_file [uuid]
 | 
			
		||||
.B dmsetup create 
 | 
			
		||||
.I device_name [-u uuid] [--notable] [table_file]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup remove
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup rename
 | 
			
		||||
.I device_name new_name
 | 
			
		||||
.B dmsetup load
 | 
			
		||||
.I device_name [table_file]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup clear
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup suspend
 | 
			
		||||
.I device_name
 | 
			
		||||
@@ -19,112 +22,150 @@ dmsetup \- low level logical volume management
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup reload
 | 
			
		||||
.I device_name table_file
 | 
			
		||||
.I device_name [table_file]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup rename
 | 
			
		||||
.I device_name new_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup ls
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup info
 | 
			
		||||
.I device_name
 | 
			
		||||
.I [device_name]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup deps
 | 
			
		||||
.I device_name
 | 
			
		||||
.I [device_name]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup mknodes
 | 
			
		||||
.I [device_name]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup status
 | 
			
		||||
.I device_name
 | 
			
		||||
.I [device_name]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup table
 | 
			
		||||
.I device_name
 | 
			
		||||
.I [device_name]
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup wait
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup remove_all
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
.B dmsetup version
 | 
			
		||||
.ad b
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
dmsetup manages logical devices that use the device-mapper driver.  
 | 
			
		||||
Devices are created by loading a table that specifies a target for
 | 
			
		||||
each sector in the logical device.
 | 
			
		||||
each sector (512 bytes) in the logical device.
 | 
			
		||||
 | 
			
		||||
The first argument to dmsetup is a command. 
 | 
			
		||||
The second argument is the logical device name or uuid.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
.IP \fB-j|--major\ \fImajor
 | 
			
		||||
.br
 | 
			
		||||
Specify the major number to use on creation.
 | 
			
		||||
.IP \fB-j|--minor\ \fIminor
 | 
			
		||||
.br
 | 
			
		||||
Specify the minor number to use on creation.
 | 
			
		||||
.IP \fB-r|--readonly
 | 
			
		||||
.br
 | 
			
		||||
Set the table being loaded read-only.
 | 
			
		||||
.IP \fB-v|--verbose [-v|--verbose]
 | 
			
		||||
.br
 | 
			
		||||
Produce additional output.
 | 
			
		||||
.IP \fB--version
 | 
			
		||||
.br
 | 
			
		||||
Display the library and kernel driver version.
 | 
			
		||||
.SH COMMANDS
 | 
			
		||||
.IP \fBcreate
 | 
			
		||||
.I device_name table_file [uuid]
 | 
			
		||||
.I device_name [-u uuid] [--notable] [table_file]
 | 
			
		||||
.br
 | 
			
		||||
Attempts to create a device using the table file given.
 | 
			
		||||
Creates a device with the given name.
 | 
			
		||||
If table_file is supplied, the table is loaded and made live.
 | 
			
		||||
Otherwise a table is read from standard input unless --notable is used.
 | 
			
		||||
The optional uuid can be used in place of
 | 
			
		||||
device_name in subsequent dmsetup commands.  If
 | 
			
		||||
successful a device will appear as
 | 
			
		||||
/dev/device-mapper/<device-name>.  See below for information
 | 
			
		||||
on the table file format.
 | 
			
		||||
device_name in subsequent dmsetup commands.  
 | 
			
		||||
If successful a device will appear as
 | 
			
		||||
/dev/device-mapper/<device-name>.  
 | 
			
		||||
See below for information on the table format.
 | 
			
		||||
.IP \fBdeps
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs a list of (major, minor) pairs for devices referenced by the
 | 
			
		||||
live table for the specified device.
 | 
			
		||||
.IP \fBinfo
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs some brief information about the device in the form:
 | 
			
		||||
.br
 | 
			
		||||
    State: SUSPENDED|ACTIVE, READ-ONLY
 | 
			
		||||
.br
 | 
			
		||||
    Tables present: LIVE and/or INACTIVE
 | 
			
		||||
.br
 | 
			
		||||
    Open reference count
 | 
			
		||||
.br
 | 
			
		||||
    Last event sequence number (used by \fBwait\fP)
 | 
			
		||||
.br
 | 
			
		||||
    Major and minor device number
 | 
			
		||||
.br
 | 
			
		||||
    Number of targets in the live table
 | 
			
		||||
.br
 | 
			
		||||
    UUID
 | 
			
		||||
.IP \fBls
 | 
			
		||||
.br
 | 
			
		||||
List device names.
 | 
			
		||||
.IP \fBload|reload
 | 
			
		||||
.I device_name [table_file]
 | 
			
		||||
.br
 | 
			
		||||
Loads table_file into the inactive table slot for device_name.
 | 
			
		||||
If table_file is not supplied, reads a table from standard input.
 | 
			
		||||
.IP \fBremove
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Removes a device
 | 
			
		||||
Removes a device.  It will no longer be visible to dmsetup and
 | 
			
		||||
will be deleted when its open_count is zero.
 | 
			
		||||
.IP \fBremove_all
 | 
			
		||||
.br
 | 
			
		||||
Attempts to remove all device definitions i.e. reset the driver.
 | 
			
		||||
Use with care!
 | 
			
		||||
.IP \fBrename
 | 
			
		||||
.I device_name new_name
 | 
			
		||||
.br
 | 
			
		||||
Renames a device
 | 
			
		||||
Renames a device.
 | 
			
		||||
.IP \fBresume
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Un-suspends a device.  
 | 
			
		||||
If an inactive table has been loaded, it becomes live.
 | 
			
		||||
Postponed I/O then gets re-queued for processing.
 | 
			
		||||
.IP \fBstatus
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs status information for each of the device's targets.
 | 
			
		||||
.IP \fBsuspend
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Suspends a device.  Any I/O that has already been mapped by the device
 | 
			
		||||
but has not yet completed will be flushed.  Any further I/O to that
 | 
			
		||||
device will be postponed for as long as the device is suspended.
 | 
			
		||||
.IP \fBresume
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Un-suspends a device.  Postponed I/O now gets re-queued for processing.
 | 
			
		||||
.IP \fBreload
 | 
			
		||||
.I device_name table_file
 | 
			
		||||
.br
 | 
			
		||||
This command will only work if a device is in the suspended state.
 | 
			
		||||
It changes the mapping table for an existing device.
 | 
			
		||||
.IP \fBinfo
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs some brief information about the device in the form:
 | 
			
		||||
.br
 | 
			
		||||
    SUSPENDED|ACTIVE
 | 
			
		||||
.br
 | 
			
		||||
    open_count
 | 
			
		||||
.br
 | 
			
		||||
    major,minor
 | 
			
		||||
.br
 | 
			
		||||
    target_count
 | 
			
		||||
.IP \fBdeps
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs a list of (major, minor) pairs for devices referenced by the
 | 
			
		||||
specified device.
 | 
			
		||||
.IP \fBstatus
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs status information for each of the device's targets.
 | 
			
		||||
.IP \fBtable
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs the current table for the device in a format than can be fed
 | 
			
		||||
back in using the create or reload commands.
 | 
			
		||||
.IP \fBwait
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Sleeps until an event is triggered against a device.
 | 
			
		||||
.IP \fBremove_all
 | 
			
		||||
.br
 | 
			
		||||
Attempts to remove all device definitions i.e. reset the driver.
 | 
			
		||||
Use with care!
 | 
			
		||||
Outputs the current table for the device in a format that can be fed
 | 
			
		||||
back in using the create or load commands.
 | 
			
		||||
.IP \fBversion
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Outputs version information.
 | 
			
		||||
.IP \fBwait
 | 
			
		||||
.I device_name
 | 
			
		||||
.br
 | 
			
		||||
Sleeps until an event is triggered against a device.
 | 
			
		||||
.SH TABLE FORMAT
 | 
			
		||||
Each line of the table specifies a single target and is of the form:
 | 
			
		||||
.br
 | 
			
		||||
    logical_start_sector num_sectors target_type target_args
 | 
			
		||||
.br
 | 
			
		||||
.br
 | 
			
		||||
 | 
			
		||||
There are currently three simple target types available together 
 | 
			
		||||
with more complex optional ones that implement snapshots and mirrors.
 | 
			
		||||
 | 
			
		||||
@@ -151,16 +192,13 @@ will map the first chunk (16k) as follows:
 | 
			
		||||
.br
 | 
			
		||||
    etc.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.IP \fBio-err
 | 
			
		||||
.IP \fBerror
 | 
			
		||||
.br
 | 
			
		||||
Errors any I/O that goes to this area.  Useful for testing or
 | 
			
		||||
for creating devices with holes in them.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.SH EXAMPLES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# A table to join two disks together
 | 
			
		||||
.br
 | 
			
		||||
.br
 | 
			
		||||
@@ -169,7 +207,6 @@ for creating devices with holes in them.
 | 
			
		||||
1028160 3903762 linear /dev/hdb 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# A table to stripe across the two disks, 
 | 
			
		||||
.br
 | 
			
		||||
# and add the spare space from
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ lvextend \- extend the size of a logical volume
 | 
			
		||||
lvextend allows you to extend the size of a logical volume.
 | 
			
		||||
Extension of snapshot logical volumes (see
 | 
			
		||||
.B lvcreate(8)
 | 
			
		||||
for information to create snapshots) is supprted as well.
 | 
			
		||||
for information to create snapshots) is supported as well.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
@@ -30,13 +30,13 @@ of the logical volume and without it, the value is taken as an absolute one.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-i, \-\-stripes Stripes
 | 
			
		||||
Gives the number of stripes for the extension.
 | 
			
		||||
Not applicable to PVs using the original metadata LVM format.
 | 
			
		||||
This is equal to the number of physical volumes to scatter
 | 
			
		||||
the logical volume.
 | 
			
		||||
Not applicable to LVs using the original metadata LVM format, which must
 | 
			
		||||
use a single value throughout.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-I, \-\-stripesize StripeSize
 | 
			
		||||
Gives the number of kilobytes for the granularity of the stripes.
 | 
			
		||||
Not applicable to PVs using the original metadata LVM format.
 | 
			
		||||
Not applicable to LVs using the original metadata LVM format, which must
 | 
			
		||||
use a single value throughout.
 | 
			
		||||
.br
 | 
			
		||||
StripeSize must be 2^n (n = 2 to 9)
 | 
			
		||||
.SH Examples
 | 
			
		||||
@@ -48,4 +48,5 @@ there are enough free physical extents in it.
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR lvcreate (8), 
 | 
			
		||||
.BR lvreduce (8), 
 | 
			
		||||
.BR lvresize (8), 
 | 
			
		||||
.BR lvchange (8)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								man/lvmdiskscan.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								man/lvmdiskscan.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
.TH LVMDISKSCAN 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
lvmdiskscan \- scan for all devices visible to LVM2
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B lvmdiskscan
 | 
			
		||||
[\-d/\-\-debug] [\-h/\-?/\-\-help] 
 | 
			
		||||
[\-l/\-\-lvmpartition]
 | 
			
		||||
[\-v/\-\-verbose]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
vgscan scans all SCSI, (E)IDE disks, multiple devices and a bunch
 | 
			
		||||
of other block devices in the system looking for LVM physical volumes.
 | 
			
		||||
The size reported is the real device size.
 | 
			
		||||
Define a filter in \fBlvm.conf\fP(5) to restrict 
 | 
			
		||||
the scan to avoid a CD ROM, for example.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-l, \-\-lvmpartition
 | 
			
		||||
Only reports Physical Volumes.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR lvm.conf (5),
 | 
			
		||||
.BR pvscan (8),
 | 
			
		||||
.BR vgscan (8)
 | 
			
		||||
@@ -13,7 +13,7 @@ lvreduce allows you to reduce the size of a logical volume.
 | 
			
		||||
Be careful when reducing a logical volume's size, because data in the
 | 
			
		||||
reduced part is lost!!! 
 | 
			
		||||
.br 
 | 
			
		||||
You should therefore ensure that the (eg) filesystem on the volume is 
 | 
			
		||||
You should therefore ensure that any filesystem on the volume is 
 | 
			
		||||
resized
 | 
			
		||||
.i before
 | 
			
		||||
running lvreduce so that the extents that are to be removed are not in use.
 | 
			
		||||
@@ -38,7 +38,7 @@ Reduce or set the logical volume size in units of megabyte by default.
 | 
			
		||||
A size suffix of k for kilobyte, m for megabyte, g for gigabyte or
 | 
			
		||||
t for terabyte is optional.
 | 
			
		||||
With the - sign the value will be subtracted from
 | 
			
		||||
the logical volume's actual size and without it the will be taken as
 | 
			
		||||
the logical volume's actual size and without it it will be taken as
 | 
			
		||||
an absolute size.
 | 
			
		||||
.SH Example
 | 
			
		||||
"lvreduce -l -3 /dev/vg00/lvol1" reduces the size of logical volume lvol1
 | 
			
		||||
@@ -47,4 +47,5 @@ in volume group vg00 by 3 logical extents.
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR lvcreate (8), 
 | 
			
		||||
.BR lvextend (8), 
 | 
			
		||||
.BR lvresize (8), 
 | 
			
		||||
.BR lvchange (8)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								man/lvresize.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								man/lvresize.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
.TH LVRESIZE 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
lvresize \- resize a logical volume
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B lvresize
 | 
			
		||||
[\-A/\-\-autobackup y/n] [\-d/\-\-debug] [\-h/\-?/\-\-help]
 | 
			
		||||
[\-i/\-\-stripes Stripes [\-I/\-\-stripesize StripeSize]]
 | 
			
		||||
{\-l/\-\-extents [+]LogicalExtentsNumber |
 | 
			
		||||
\-L/\-\-size [+]LogicalVolumeSize[kKmMgGtT]}
 | 
			
		||||
[\-t/\-\-test]
 | 
			
		||||
[\-v/\-\-verbose] LogicalVolumePath [PhysicalVolumePath...]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
lvresize allows you to resize a logical volume.
 | 
			
		||||
Be careful when reducing a logical volume's size, because data in the reduced
 | 
			
		||||
part is lost!!!
 | 
			
		||||
You should therefore ensure that any filesystem on the volume is
 | 
			
		||||
shrunk first so that the extents that are to be removed are not in use.
 | 
			
		||||
Resizing snapshot logical volumes (see
 | 
			
		||||
.B lvcreate(8)
 | 
			
		||||
for information about creating snapshots) is supported as well.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-l, \-\-extents [+/-]LogicalExtentsNumber
 | 
			
		||||
Change or set the logical volume size in units of logical extents.
 | 
			
		||||
With the + or - sign the value is added to or subtracted from the actual size
 | 
			
		||||
of the logical volume and without it, the value is taken as an absolute one.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-L, \-\-size [+/-]LogicalVolumeSize[kKmMgGtT]
 | 
			
		||||
Change or set the logical volume size in units in units of megabytes.
 | 
			
		||||
A size suffix of M for megabytes, G for gigabytes or T for terabytes is
 | 
			
		||||
optional.  With the + or - sign the value is added to or subtracted from
 | 
			
		||||
the actual size of the logical volume and without it, the value is taken as an
 | 
			
		||||
absolute one.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-i, \-\-stripes Stripes
 | 
			
		||||
Gives the number of stripes to use when extending a Logical Volume.
 | 
			
		||||
Defaults to whatever the last segment of the Logical Volume uses.
 | 
			
		||||
Not applicable to LVs using the original metadata LVM format, which must
 | 
			
		||||
use a single value throughout.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-I, \-\-stripesize StripeSize
 | 
			
		||||
Gives the number of kilobytes for the granularity of the stripes.
 | 
			
		||||
Defaults to whatever the last segment of the Logical Volume uses.
 | 
			
		||||
Not applicable to LVs using the original metadata LVM format, which
 | 
			
		||||
must use a single value throughout.
 | 
			
		||||
.br
 | 
			
		||||
StripeSize must be 2^n (n = 2 to 9)
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR lvcreate (8), 
 | 
			
		||||
.BR lvreduce (8), 
 | 
			
		||||
.BR lvchange (8)
 | 
			
		||||
							
								
								
									
										27
									
								
								man/vgexport.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								man/vgexport.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
.TH VGEXPORT 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
vgexport \- make volume groups unknown to the system
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B vgexport
 | 
			
		||||
[\-a/\-\-all]
 | 
			
		||||
[\-d/\-\-debug] [\-h/\-?/\-\-help] 
 | 
			
		||||
[\-v/\-\-verbose]
 | 
			
		||||
VolumeGroupName [VolumeGroupName...]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
vgexport allows you to make the inactive 
 | 
			
		||||
.IR VolumeGroupName (s)
 | 
			
		||||
unknown to the system.
 | 
			
		||||
You can then move all the Physical Volumes in that Volume Group to
 | 
			
		||||
a different system for later
 | 
			
		||||
.BR vgimport (8).
 | 
			
		||||
Most LVM2 tools ignore exported Volume Groups.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-a, \-\-all
 | 
			
		||||
Export all inactive Volume Groups.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR pvscan (8),
 | 
			
		||||
.BR vgimport (8), 
 | 
			
		||||
.BR vgscan (8)
 | 
			
		||||
							
								
								
									
										25
									
								
								man/vgimport.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								man/vgimport.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
.TH VGIMPORT 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
vgimport \- make exported volume groups known to the system
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B vgimport
 | 
			
		||||
[\-a/\-\-all]
 | 
			
		||||
[\-d/\-\-debug] [\-h/\-?/\-\-help] 
 | 
			
		||||
[\-v/\-\-verbose]
 | 
			
		||||
VolumeGroupName [VolumeGroupName...]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
.B vgimport
 | 
			
		||||
allows you to make a Volume Group that was previously exported using
 | 
			
		||||
.BR vgexport (8)
 | 
			
		||||
known to the system again, perhaps after moving its Physical Volumes
 | 
			
		||||
from a different machine.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-a, \-\-all
 | 
			
		||||
Import all exported Volume Groups.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR pvscan (8),
 | 
			
		||||
.BR vgexport (8), 
 | 
			
		||||
.BR vgscan (8)
 | 
			
		||||
							
								
								
									
										17
									
								
								man/vgmknodes.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								man/vgmknodes.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
.TH VGMKNODES 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
vgmknodes \- recreate volume group directory and logical volume special files
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B vgmknodes
 | 
			
		||||
[\-d/\-\-debug] [\-h/\-?/\-\-help] 
 | 
			
		||||
[\-v/\-\-verbose]
 | 
			
		||||
[[VolumeGroupName | LogicalVolumePath]...]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
Checks the LVM2 special files in /dev that are needed for active 
 | 
			
		||||
logical volumes and creates any missing ones and removes unused ones.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR vgscan (8),
 | 
			
		||||
.BR dmsetup (8)
 | 
			
		||||
@@ -5,6 +5,7 @@ vgscan \- scan all disks for volume groups and rebuild caches
 | 
			
		||||
.B vgscan
 | 
			
		||||
[\-d/\-\-debug] [\-h/\-?/\-\-help] 
 | 
			
		||||
[\-\-ignorelockingfailure]
 | 
			
		||||
[\-\-mknodes]
 | 
			
		||||
[\-P/\-\-partial]
 | 
			
		||||
[\-v/\-\-verbose]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
@@ -14,9 +15,13 @@ and volume groups.  Define a filter in \fBlvm.conf\fP(8) to restrict
 | 
			
		||||
the scan to avoid a CD ROM, for example.
 | 
			
		||||
.LP
 | 
			
		||||
In LVM2, vgscans take place automatically; but you might still need to
 | 
			
		||||
run one explicitly after changing hardware or filters.
 | 
			
		||||
run one explicitly after changing hardware.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.TP
 | 
			
		||||
.I \-\-mknodes
 | 
			
		||||
Also checks the LVM special files in /dev that are needed for active 
 | 
			
		||||
logical volumes and creates any missing ones and removes unused ones.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR vgcreate (8), 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								man/vgsplit.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								man/vgsplit.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
.TH VGMERGE 8 "LVM TOOLS" "Sistina Software UK" \" -*- nroff -*-
 | 
			
		||||
.SH NAME
 | 
			
		||||
vgsplit \- split a volume group into two
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.B vgsplit
 | 
			
		||||
[\-A/\-\-autobackup y/n] 
 | 
			
		||||
[\-d/\-\-debug] 
 | 
			
		||||
[\-h/\-?/\-\-help] 
 | 
			
		||||
[\-l/\-\-list]
 | 
			
		||||
[\-M/\-\-metadatatype 1/2]
 | 
			
		||||
[\-t/\-\-test] 
 | 
			
		||||
[\-v/\-\-verbose] 
 | 
			
		||||
ExistingVolumeGroupName NewVolumeGroupName
 | 
			
		||||
PhysicalVolumePath [PhysicalVolumePath...]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
.B vgsplit 
 | 
			
		||||
creates 
 | 
			
		||||
.I NewVolumeGroupName
 | 
			
		||||
and moves
 | 
			
		||||
.IR PhysicalVolumePath (s)
 | 
			
		||||
from
 | 
			
		||||
.I ExistingVolumeGroupName
 | 
			
		||||
into it.
 | 
			
		||||
Logical Volumes cannot be split between Volume Groups.
 | 
			
		||||
Each existing Logical Volumes must be entirely on the Physical Volumes forming
 | 
			
		||||
either the old or the new Volume Group.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
See \fBlvm\fP for common options.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR lvm (8), 
 | 
			
		||||
.BR vgcreate (8), 
 | 
			
		||||
.BR vgextend (8), 
 | 
			
		||||
.BR vgreduce (8),
 | 
			
		||||
.BR vgmerge (8)
 | 
			
		||||
							
								
								
									
										50
									
								
								po/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								po/Makefile.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2004 Sistina Software
 | 
			
		||||
#
 | 
			
		||||
# This LVM library is free software; you can redistribute it and/or
 | 
			
		||||
# modify it under the terms of the GNU Library General Public
 | 
			
		||||
# License as published by the Free Software Foundation; either
 | 
			
		||||
# version 2 of the License, or (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# This LVM 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
 | 
			
		||||
# Library General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU Library General Public
 | 
			
		||||
# License along with this LVM library; if not, write to the Free
 | 
			
		||||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 | 
			
		||||
# MA 02111-1307, USA
 | 
			
		||||
 | 
			
		||||
srcdir = @srcdir@
 | 
			
		||||
top_srcdir = @top_srcdir@
 | 
			
		||||
VPATH = @srcdir@
 | 
			
		||||
 | 
			
		||||
LANGS=de
 | 
			
		||||
 | 
			
		||||
TARGETS=$(LANGS:%=%.mo)
 | 
			
		||||
 | 
			
		||||
include ../make.tmpl
 | 
			
		||||
 | 
			
		||||
install: $(TARGETS)
 | 
			
		||||
	@echo Installing translation files in $(localedir)
 | 
			
		||||
	@( \
 | 
			
		||||
		for lang in $(LANGS); do \
 | 
			
		||||
			$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 444 $$lang.mo \
 | 
			
		||||
			    $(localedir)/$$lang/LC_MESSAGES/@INTL_PACKAGE@.mo;\
 | 
			
		||||
	  done; \
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
pofile: lvm2.po
 | 
			
		||||
 | 
			
		||||
lvm2.po: Makefile $(top_srcdir)/tools/*.pot $(top_srcdir)/lib/*/*.pot
 | 
			
		||||
	@echo Compiling string table
 | 
			
		||||
	@xgettext -C -F --keyword=print_log --keyword=log_debug \
 | 
			
		||||
		--keyword=log_info --keyword=_ --keyword=N_ \
 | 
			
		||||
		--keyword=log_notice --keyword=log_warn --keyword=log_err \
 | 
			
		||||
		--keyword=log_fatal --keyword=log_debug --keyword=log_error \
 | 
			
		||||
		--keyword=log_print --keyword=log_verbose \
 | 
			
		||||
		--keyword=log_very_verbose -d - \
 | 
			
		||||
		$(top_srcdir)/tools/*.pot $(top_srcdir)/lib/*/*.pot \
 | 
			
		||||
		> $@
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								po/de.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								po/de.po
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
# Dummy test file
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"PO-Revision-Date: 2004-02-13 20:35+0000\n"
 | 
			
		||||
"Last-Translator: Nobody <nobody@nowhere>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=ISO-8859-15\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5670
									
								
								po/lvm2.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5670
									
								
								po/lvm2.po
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								po/pogen.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								po/pogen.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Macro to change log messages into a format that xgettext can handle.
 | 
			
		||||
 *
 | 
			
		||||
 * Note that different PRI* definitions lead to different strings for
 | 
			
		||||
 * different architectures.
 | 
			
		||||
 */
 | 
			
		||||
#define print_log(level, file, line, format, args...) print_log(format, args)
 | 
			
		||||
@@ -22,6 +22,7 @@ VPATH = @srcdir@
 | 
			
		||||
 | 
			
		||||
SOURCES=\
 | 
			
		||||
	archive.c \
 | 
			
		||||
	dumpconfig.c \
 | 
			
		||||
	lvchange.c \
 | 
			
		||||
	lvcreate.c \
 | 
			
		||||
	lvdisplay.c \
 | 
			
		||||
@@ -53,6 +54,7 @@ SOURCES=\
 | 
			
		||||
	vgextend.c \
 | 
			
		||||
	vgimport.c \
 | 
			
		||||
	vgmerge.c \
 | 
			
		||||
	vgmknodes.c \
 | 
			
		||||
	vgreduce.c \
 | 
			
		||||
	vgremove.c \
 | 
			
		||||
	vgrename.c \
 | 
			
		||||
@@ -81,7 +83,7 @@ lvm: $(OBJECTS) $(top_srcdir)/lib/liblvm.a
 | 
			
		||||
 | 
			
		||||
.commands: commands.h cmdnames.h Makefile
 | 
			
		||||
	$(CC) -E -P cmdnames.h 2> /dev/null | \
 | 
			
		||||
		egrep -v '^ *(|#.*|help|pvdata|version) *$$' > .commands
 | 
			
		||||
		egrep -v '^ *(|#.*|dumpconfig|help|pvdata|version) *$$' > .commands
 | 
			
		||||
 | 
			
		||||
install: $(TARGETS)
 | 
			
		||||
	$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) lvm \
 | 
			
		||||
 
 | 
			
		||||
@@ -213,7 +213,6 @@ struct volume_group *backup_read_vg(struct cmd_context *cmd,
 | 
			
		||||
{
 | 
			
		||||
	struct volume_group *vg = NULL;
 | 
			
		||||
	struct format_instance *tf;
 | 
			
		||||
	struct list *mdah;
 | 
			
		||||
	struct metadata_area *mda;
 | 
			
		||||
	void *context;
 | 
			
		||||
 | 
			
		||||
@@ -225,8 +224,7 @@ struct volume_group *backup_read_vg(struct cmd_context *cmd,
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list_iterate(mdah, &tf->metadata_areas) {
 | 
			
		||||
		mda = list_item(mdah, struct metadata_area);
 | 
			
		||||
	list_iterate_items(mda, &tf->metadata_areas) {
 | 
			
		||||
		if (!(vg = mda->ops->vg_read(tf, vg_name, mda)))
 | 
			
		||||
			stack;
 | 
			
		||||
		break;
 | 
			
		||||
@@ -239,7 +237,7 @@ struct volume_group *backup_read_vg(struct cmd_context *cmd,
 | 
			
		||||
/* ORPHAN and VG locks held before calling this */
 | 
			
		||||
int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg)
 | 
			
		||||
{
 | 
			
		||||
	struct list *pvh;
 | 
			
		||||
	struct pv_list *pvl;
 | 
			
		||||
	struct physical_volume *pv;
 | 
			
		||||
	struct lvmcache_info *info;
 | 
			
		||||
 | 
			
		||||
@@ -256,8 +254,8 @@ int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Add any metadata areas on the PVs */
 | 
			
		||||
	list_iterate(pvh, &vg->pvs) {
 | 
			
		||||
		pv = list_item(pvh, struct pv_list)->pv;
 | 
			
		||||
	list_iterate_items(pvl, &vg->pvs) {
 | 
			
		||||
		pv = pvl->pv;
 | 
			
		||||
		if (!(info = info_from_pvid(pv->dev->pvid))) {
 | 
			
		||||
			log_error("PV %s missing from cache",
 | 
			
		||||
				  dev_name(pv->dev));
 | 
			
		||||
@@ -319,7 +317,6 @@ int backup_to_file(const char *file, const char *desc, struct volume_group *vg)
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
	struct format_instance *tf;
 | 
			
		||||
	struct list *mdah;
 | 
			
		||||
	struct metadata_area *mda;
 | 
			
		||||
	void *context;
 | 
			
		||||
	struct cmd_context *cmd;
 | 
			
		||||
@@ -334,8 +331,7 @@ int backup_to_file(const char *file, const char *desc, struct volume_group *vg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Write and commit the metadata area */
 | 
			
		||||
	list_iterate(mdah, &tf->metadata_areas) {
 | 
			
		||||
		mda = list_item(mdah, struct metadata_area);
 | 
			
		||||
	list_iterate_items(mda, &tf->metadata_areas) {
 | 
			
		||||
		if (!(r = mda->ops->vg_write(tf, vg, mda))) {
 | 
			
		||||
			stack;
 | 
			
		||||
			continue;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@ arg(units_ARG, '\0', "units", string_arg)
 | 
			
		||||
arg(nosuffix_ARG, '\0', "nosuffix", NULL)
 | 
			
		||||
arg(removemissing_ARG, '\0', "removemissing", NULL)
 | 
			
		||||
arg(abort_ARG, '\0', "abort", NULL)
 | 
			
		||||
arg(mknodes_ARG, '\0', "mknodes", NULL)
 | 
			
		||||
arg(minor_ARG, '\0', "minor", minor_arg)
 | 
			
		||||
 | 
			
		||||
/* Allow some variations */
 | 
			
		||||
arg(resizable_ARG, '\0', "resizable", yes_no_arg)
 | 
			
		||||
@@ -67,7 +69,6 @@ arg(logicalextent_ARG, 'L', "logicalextent", int_arg_with_sign)
 | 
			
		||||
arg(persistent_ARG, 'M', "persistent", yes_no_arg)
 | 
			
		||||
arg(major_ARG, 'j', "major", major_arg)
 | 
			
		||||
arg(metadatatype_ARG, 'M', "metadatatype", metadatatype_arg)
 | 
			
		||||
arg(minor_ARG, 'm', "minor", minor_arg)
 | 
			
		||||
arg(maps_ARG, 'm', "maps", NULL)
 | 
			
		||||
arg(name_ARG, 'n', "name", string_arg)
 | 
			
		||||
arg(oldpath_ARG, 'n', "oldpath", NULL)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,10 @@ xx(e2fsadm,
 | 
			
		||||
    extents_ARG, size_ARG, nofsck_ARG, test_ARG)
 | 
			
		||||
*********/
 | 
			
		||||
 | 
			
		||||
xx(dumpconfig,
 | 
			
		||||
   "Dump active configuration",
 | 
			
		||||
   "dumpconfig <filename>\n")
 | 
			
		||||
 | 
			
		||||
xx(help,
 | 
			
		||||
   "Display help for commands",
 | 
			
		||||
   "help <command>" "\n")
 | 
			
		||||
@@ -311,17 +315,18 @@ xx(lvscan,
 | 
			
		||||
xx(pvchange,
 | 
			
		||||
   "Change attributes of physical volume(s)",
 | 
			
		||||
   "pvchange\n"
 | 
			
		||||
   "\t[-a|--all]\n"
 | 
			
		||||
   "\t[-A|--autobackup y|n]\n"
 | 
			
		||||
   "\t[-d|--debug]\n"
 | 
			
		||||
   "\t[-h|--help]\n"
 | 
			
		||||
   "\t[-t|--test]\n"
 | 
			
		||||
   "\t[-u|--uuid]\n"
 | 
			
		||||
   "\t[-x|--allocatable y|n]\n"
 | 
			
		||||
   "\t[-v|--verbose]\n"
 | 
			
		||||
   "\t[--version]" "\n"
 | 
			
		||||
   "\t[-a|--all]\n"
 | 
			
		||||
   "\t[-t|--test]\n"
 | 
			
		||||
   "\t[-x|--allocatable y|n]\n"
 | 
			
		||||
   "\t[PhysicalVolumePath...]\n",
 | 
			
		||||
 | 
			
		||||
   all_ARG, allocatable_ARG, allocation_ARG, autobackup_ARG, test_ARG)
 | 
			
		||||
   all_ARG, allocatable_ARG, allocation_ARG, autobackup_ARG, test_ARG, uuid_ARG)
 | 
			
		||||
 | 
			
		||||
xx(pvcreate,
 | 
			
		||||
   "Initialize physical volume(s) for use by LVM",
 | 
			
		||||
@@ -527,6 +532,7 @@ xx(vgchange,
 | 
			
		||||
   "\t[-h|--help] " "\n"
 | 
			
		||||
   "\t[--ignorelockingfailure]\n"
 | 
			
		||||
   "\t[-t|--test]" "\n"
 | 
			
		||||
   "\t[-u|--uuid] " "\n"
 | 
			
		||||
   "\t[-v|--verbose] " "\n"
 | 
			
		||||
   "\t[--version]" "\n"
 | 
			
		||||
   "\t{-a|--available {y|n}  |" "\n"
 | 
			
		||||
@@ -535,7 +541,8 @@ xx(vgchange,
 | 
			
		||||
   "\t[VolumeGroupName...]\n",
 | 
			
		||||
 | 
			
		||||
   allocation_ARG, autobackup_ARG, available_ARG, ignorelockingfailure_ARG,
 | 
			
		||||
   logicalvolume_ARG, partial_ARG, resizeable_ARG, resizable_ARG, test_ARG)
 | 
			
		||||
   logicalvolume_ARG, partial_ARG, resizeable_ARG, resizable_ARG, test_ARG,
 | 
			
		||||
   uuid_ARG)
 | 
			
		||||
 | 
			
		||||
xx(vgck,
 | 
			
		||||
   "Check the consistency of volume group(s)",
 | 
			
		||||
@@ -748,11 +755,12 @@ xx(vgscan,
 | 
			
		||||
   "\t[-d|--debug]\n"
 | 
			
		||||
   "\t[-h|--help]\n"
 | 
			
		||||
   "\t[--ignorelockingfailure]\n"
 | 
			
		||||
   "\t[--mknodes]\n"
 | 
			
		||||
   "\t[-P|--partial] " "\n"
 | 
			
		||||
   "\t[-v|--verbose]\n" 
 | 
			
		||||
   "\t[--version]" "\n",
 | 
			
		||||
 | 
			
		||||
   ignorelockingfailure_ARG, partial_ARG)
 | 
			
		||||
   ignorelockingfailure_ARG, mknodes_ARG, partial_ARG)
 | 
			
		||||
 | 
			
		||||
xx(vgsplit,
 | 
			
		||||
   "Move physical volumes into a new volume group",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										228
									
								
								tools/dmsetup.c
									
									
									
									
									
								
							
							
						
						
									
										228
									
								
								tools/dmsetup.c
									
									
									
									
									
								
							@@ -1,17 +1,40 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2001 Sistina Software (UK) Limited.
 | 
			
		||||
 * Copyright (C) 2001-2003 Sistina Software (UK) Limited.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is released under the GPL.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "libdevmapper.h"
 | 
			
		||||
#include "log.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <getopt.h>
 | 
			
		||||
#include <linux/kdev_t.h>
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_GETOPTLONG
 | 
			
		||||
#  include <getopt.h>
 | 
			
		||||
#  define GETOPTLONG_FN(a, b, c, d, e) getopt_long((a), (b), (c), (d), (e))
 | 
			
		||||
#  define OPTIND_INIT 0
 | 
			
		||||
#else
 | 
			
		||||
struct option {
 | 
			
		||||
};
 | 
			
		||||
extern int optind;
 | 
			
		||||
extern char *optarg;
 | 
			
		||||
#  define GETOPTLONG_FN(a, b, c, d, e) getopt((a), (b), (c))
 | 
			
		||||
#  define OPTIND_INIT 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef linux
 | 
			
		||||
#  include <linux/kdev_t.h>
 | 
			
		||||
#else
 | 
			
		||||
#  define MAJOR(x) major((x))
 | 
			
		||||
#  define MINOR(x) minor((x))
 | 
			
		||||
#  define MKDEV(x,y) makedev((x),(y))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define LINE_SIZE 1024
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +47,8 @@ enum {
 | 
			
		||||
	READ_ONLY = 0,
 | 
			
		||||
	MAJOR_ARG,
 | 
			
		||||
	MINOR_ARG,
 | 
			
		||||
	NOTABLE_ARG,
 | 
			
		||||
	UUID_ARG,
 | 
			
		||||
	VERBOSE_ARG,
 | 
			
		||||
	VERSION_ARG,
 | 
			
		||||
	NUM_SWITCHES
 | 
			
		||||
@@ -31,6 +56,7 @@ enum {
 | 
			
		||||
 | 
			
		||||
static int _switches[NUM_SWITCHES];
 | 
			
		||||
static int _values[NUM_SWITCHES];
 | 
			
		||||
static char *_uuid;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Commands
 | 
			
		||||
@@ -38,14 +64,19 @@ static int _values[NUM_SWITCHES];
 | 
			
		||||
static int _parse_file(struct dm_task *dmt, const char *file)
 | 
			
		||||
{
 | 
			
		||||
	char buffer[LINE_SIZE], *ttype, *ptr, *comment;
 | 
			
		||||
	FILE *fp = fopen(file, "r");
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
	unsigned long long start, size;
 | 
			
		||||
	int r = 0, n, line = 0;
 | 
			
		||||
 | 
			
		||||
	if (!fp) {
 | 
			
		||||
		err("Couldn't open '%s' for reading", file);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	/* OK for empty stdin */
 | 
			
		||||
 | 
			
		||||
	if (file) {
 | 
			
		||||
		if (!(fp = fopen(file, "r"))) {
 | 
			
		||||
			err("Couldn't open '%s' for reading", file);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	} else
 | 
			
		||||
		fp = stdin;
 | 
			
		||||
 | 
			
		||||
	while (fgets(buffer, sizeof(buffer), fp)) {
 | 
			
		||||
		line++;
 | 
			
		||||
@@ -81,7 +112,8 @@ static int _parse_file(struct dm_task *dmt, const char *file)
 | 
			
		||||
	r = 1;
 | 
			
		||||
 | 
			
		||||
      out:
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
	if (file)
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -141,7 +173,7 @@ static int _load(int task, const char *name, const char *file, const char *uuid)
 | 
			
		||||
	if (uuid && !dm_task_set_uuid(dmt, uuid))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	if (file && !_parse_file(dmt, file))
 | 
			
		||||
	if (!_switches[NOTABLE_ARG] && !_parse_file(dmt, file))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	if (_switches[READ_ONLY] && !dm_task_set_ro(dmt))
 | 
			
		||||
@@ -169,16 +201,19 @@ static int _load(int task, const char *name, const char *file, const char *uuid)
 | 
			
		||||
 | 
			
		||||
static int _create(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	if (argc == 1)
 | 
			
		||||
		return _load(DM_DEVICE_CREATE, argv[1], NULL, NULL);
 | 
			
		||||
 | 
			
		||||
	return _load(DM_DEVICE_CREATE, argv[1], argv[2],
 | 
			
		||||
		     (argc == 3) ? argv[3] : NULL);
 | 
			
		||||
	return _load(DM_DEVICE_CREATE, argv[1], (argc == 3) ? argv[2] : NULL,
 | 
			
		||||
		     _switches[UUID_ARG] ? _uuid : NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _reload(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _load(DM_DEVICE_RELOAD, argv[1], argv[2], NULL);
 | 
			
		||||
	if (_switches[NOTABLE_ARG]) {
 | 
			
		||||
		err("--notable only available when creating new device\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return _load(DM_DEVICE_RELOAD, argv[1],
 | 
			
		||||
		     (argc == 3) ? argv[2] : NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _rename(int argc, char **argv, void *data)
 | 
			
		||||
@@ -235,7 +270,7 @@ static int _version(int argc, char **argv, void *data)
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _simple(int task, const char *name, int display)
 | 
			
		||||
static int _simple(int task, const char *name, uint32_t event_nr, int display)
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
 | 
			
		||||
@@ -248,6 +283,9 @@ static int _simple(int task, const char *name, int display)
 | 
			
		||||
	if (!dm_task_set_name(dmt, name))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	if (event_nr && !dm_task_set_event_nr(dmt, event_nr))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	r = dm_task_run(dmt);
 | 
			
		||||
 | 
			
		||||
	if (r && display && _switches[VERBOSE_ARG])
 | 
			
		||||
@@ -260,53 +298,94 @@ static int _simple(int task, const char *name, int display)
 | 
			
		||||
 | 
			
		||||
static int _remove_all(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_REMOVE_ALL, "", 0);
 | 
			
		||||
	return _simple(DM_DEVICE_REMOVE_ALL, "", 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _remove(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_REMOVE, argv[1], 0);
 | 
			
		||||
	return _simple(DM_DEVICE_REMOVE, argv[1], 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _suspend(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_SUSPEND, argv[1], 1);
 | 
			
		||||
	return _simple(DM_DEVICE_SUSPEND, argv[1], 0, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _resume(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_RESUME, argv[1], 1);
 | 
			
		||||
	return _simple(DM_DEVICE_RESUME, argv[1], 0, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _clear(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_CLEAR, argv[1], 1);
 | 
			
		||||
	return _simple(DM_DEVICE_CLEAR, argv[1], 0, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _wait(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	return _simple(DM_DEVICE_WAITEVENT, argv[1], 2);
 | 
			
		||||
	return _simple(DM_DEVICE_WAITEVENT, argv[1],
 | 
			
		||||
		       (argc == 3) ? atoi(argv[2]) : 0, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _process_mapper_dir(int argc, char **argv,
 | 
			
		||||
			       int (*fn) (int argc, char **argv, void *data))
 | 
			
		||||
{
 | 
			
		||||
	struct dirent *dirent;
 | 
			
		||||
	struct dm_names *names;
 | 
			
		||||
	DIR *d;
 | 
			
		||||
	const char *dir;
 | 
			
		||||
	int r = 1;
 | 
			
		||||
 | 
			
		||||
	dir = dm_dir();
 | 
			
		||||
	if (!(d = opendir(dir))) {
 | 
			
		||||
		fprintf(stderr, "opendir %s: %s", dir, strerror(errno));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while ((dirent = readdir(d))) {
 | 
			
		||||
		if (!strcmp(dirent->d_name, ".") ||
 | 
			
		||||
		    !strcmp(dirent->d_name, "..") ||
 | 
			
		||||
		    !strcmp(dirent->d_name, "control"))
 | 
			
		||||
			continue;
 | 
			
		||||
		/* Set up names->name for _info */
 | 
			
		||||
		names = (void *) dirent->d_name -
 | 
			
		||||
		    ((void *) &names->name - (void *) &names->dev);
 | 
			
		||||
		if (!fn(argc, argv, names))
 | 
			
		||||
			r = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (closedir(d)) {
 | 
			
		||||
		fprintf(stderr, "closedir %s: %s", dir, strerror(errno));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _process_all(int argc, char **argv,
 | 
			
		||||
			int (*fn)(int argc, char **argv, void *data))
 | 
			
		||||
			int (*fn) (int argc, char **argv, void *data))
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
	int r = 1;
 | 
			
		||||
	struct dm_names *names;
 | 
			
		||||
	unsigned next = 0;
 | 
			
		||||
 | 
			
		||||
	struct dm_task *dmt;
 | 
			
		||||
 | 
			
		||||
	if (!strcmp(argv[0], "mknodes"))
 | 
			
		||||
		r = _process_mapper_dir(argc, argv, fn);
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = dm_task_create(DM_DEVICE_LIST)))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (!dm_task_run(dmt))
 | 
			
		||||
	if (!dm_task_run(dmt)) {
 | 
			
		||||
		r = 0;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!(names = dm_task_get_names(dmt)))
 | 
			
		||||
	if (!(names = dm_task_get_names(dmt))) {
 | 
			
		||||
		r = 0;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r = 1;
 | 
			
		||||
	if (!names->dev) {
 | 
			
		||||
		printf("No devices found\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
@@ -314,7 +393,7 @@ static int _process_all(int argc, char **argv,
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
		names = (void *) names + next;
 | 
			
		||||
		if (!fn(argc, argv, (void *)names))
 | 
			
		||||
		if (!fn(argc, argv, (void *) names))
 | 
			
		||||
			r = 0;
 | 
			
		||||
		next = names->next;
 | 
			
		||||
	} while (next);
 | 
			
		||||
@@ -333,7 +412,7 @@ static int _status(int argc, char **argv, void *data)
 | 
			
		||||
	char *target_type = NULL;
 | 
			
		||||
	char *params;
 | 
			
		||||
	int cmd;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *)data;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *) data;
 | 
			
		||||
	char *name;
 | 
			
		||||
 | 
			
		||||
	if (argc == 1 && !data)
 | 
			
		||||
@@ -344,10 +423,10 @@ static int _status(int argc, char **argv, void *data)
 | 
			
		||||
	else
 | 
			
		||||
		name = argv[1];
 | 
			
		||||
 | 
			
		||||
	if (!strcmp(argv[0], "status"))
 | 
			
		||||
		cmd = DM_DEVICE_STATUS;
 | 
			
		||||
	else
 | 
			
		||||
	if (!strcmp(argv[0], "table"))
 | 
			
		||||
		cmd = DM_DEVICE_TABLE;
 | 
			
		||||
	else
 | 
			
		||||
		cmd = DM_DEVICE_STATUS;
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = dm_task_create(cmd)))
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -384,13 +463,48 @@ static int _status(int argc, char **argv, void *data)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Show target names and their version numbers */
 | 
			
		||||
static int _targets(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
	struct dm_task *dmt;
 | 
			
		||||
	struct dm_versions *target;
 | 
			
		||||
	struct dm_versions *last_target;
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = dm_task_create(DM_DEVICE_LIST_VERSIONS)))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (!dm_task_run(dmt))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	target = dm_task_get_versions(dmt);
 | 
			
		||||
 | 
			
		||||
	/* Fetch targets and print 'em */
 | 
			
		||||
	do {
 | 
			
		||||
		last_target = target;
 | 
			
		||||
 | 
			
		||||
		printf("%-16s v%d.%d.%d\n", target->name, target->version[0],
 | 
			
		||||
		       target->version[1], target->version[2]);
 | 
			
		||||
 | 
			
		||||
		target = (void *) target + target->next;
 | 
			
		||||
	} while (last_target != target);
 | 
			
		||||
 | 
			
		||||
	r = 1;
 | 
			
		||||
 | 
			
		||||
      out:
 | 
			
		||||
	dm_task_destroy(dmt);
 | 
			
		||||
	return r;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _info(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	int r = 0;
 | 
			
		||||
 | 
			
		||||
	struct dm_task *dmt;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *)data;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *) data;
 | 
			
		||||
	char *name;
 | 
			
		||||
	int taskno;
 | 
			
		||||
 | 
			
		||||
	if (argc == 1 && !data)
 | 
			
		||||
		return _process_all(argc, argv, _info);
 | 
			
		||||
@@ -400,7 +514,12 @@ static int _info(int argc, char **argv, void *data)
 | 
			
		||||
	else
 | 
			
		||||
		name = argv[1];
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = dm_task_create(DM_DEVICE_INFO)))
 | 
			
		||||
	if (!strcmp(argv[0], "mknodes"))
 | 
			
		||||
		taskno = DM_DEVICE_MKNODES;
 | 
			
		||||
	else
 | 
			
		||||
		taskno = DM_DEVICE_INFO;
 | 
			
		||||
 | 
			
		||||
	if (!(dmt = dm_task_create(taskno)))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (!dm_task_set_name(dmt, name))
 | 
			
		||||
@@ -409,7 +528,8 @@ static int _info(int argc, char **argv, void *data)
 | 
			
		||||
	if (!dm_task_run(dmt))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	_display_info(dmt);
 | 
			
		||||
	if (taskno == DM_DEVICE_INFO)
 | 
			
		||||
		_display_info(dmt);
 | 
			
		||||
 | 
			
		||||
	r = 1;
 | 
			
		||||
 | 
			
		||||
@@ -425,7 +545,7 @@ static int _deps(int argc, char **argv, void *data)
 | 
			
		||||
	struct dm_deps *deps;
 | 
			
		||||
	struct dm_task *dmt;
 | 
			
		||||
	struct dm_info info;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *)data;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *) data;
 | 
			
		||||
	char *name;
 | 
			
		||||
 | 
			
		||||
	if (argc == 1 && !data)
 | 
			
		||||
@@ -482,7 +602,7 @@ static int _deps(int argc, char **argv, void *data)
 | 
			
		||||
 | 
			
		||||
static int _display_name(int argc, char **argv, void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct dm_names *names = (struct dm_names *)data;
 | 
			
		||||
	struct dm_names *names = (struct dm_names *) data;
 | 
			
		||||
 | 
			
		||||
	printf("%s\t(%d, %d)\n", names->name,
 | 
			
		||||
	       (int) MAJOR(names->dev), (int) MINOR(names->dev));
 | 
			
		||||
@@ -509,21 +629,24 @@ struct command {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct command _commands[] = {
 | 
			
		||||
	{"create", "<dev_name> <table_file> [<uuid>]", 1, 3, _create},
 | 
			
		||||
	{"create", "<dev_name> [-u <uuid>] [--notable] [<table_file>]",
 | 
			
		||||
	 1, 2, _create},
 | 
			
		||||
	{"remove", "<dev_name>", 1, 1, _remove},
 | 
			
		||||
	{"remove_all", "", 0, 0, _remove_all},
 | 
			
		||||
	{"suspend", "<dev_name>", 1, 1, _suspend},
 | 
			
		||||
	{"resume", "<dev_name>", 1, 1, _resume},
 | 
			
		||||
	{"load", "<dev_name> <table_file>", 2, 2, _reload},
 | 
			
		||||
	{"load", "<dev_name> [<table_file>]", 1, 2, _reload},
 | 
			
		||||
	{"clear", "<dev_name>", 1, 1, _clear},
 | 
			
		||||
	{"reload", "<dev_name> <table_file>", 2, 2, _reload},
 | 
			
		||||
	{"reload", "<dev_name> [<table_file>]", 1, 2, _reload},
 | 
			
		||||
	{"rename", "<dev_name> <new_name>", 2, 2, _rename},
 | 
			
		||||
	{"ls", "", 0, 0, _ls},
 | 
			
		||||
	{"info", "[<dev_name>]", 0, 1, _info},
 | 
			
		||||
	{"deps", "[<dev_name>]", 0, 1, _deps},
 | 
			
		||||
	{"mknodes", "[<dev_name>]", 0, 1, _info},
 | 
			
		||||
	{"status", "[<dev_name>]", 0, 1, _status},
 | 
			
		||||
	{"table", "[<dev_name>]", 0, 1, _status},
 | 
			
		||||
	{"wait", "<dev_name>", 1, 1, _wait},
 | 
			
		||||
	{"wait", "<dev_name> [<event_nr>]", 1, 2, _wait},
 | 
			
		||||
	{"targets", "", 0, 0, _targets},
 | 
			
		||||
	{"version", "", 0, 0, _version},
 | 
			
		||||
	{NULL, NULL, 0, 0, NULL}
 | 
			
		||||
};
 | 
			
		||||
@@ -534,7 +657,8 @@ static void _usage(FILE *out)
 | 
			
		||||
 | 
			
		||||
	fprintf(out, "Usage:\n\n");
 | 
			
		||||
	fprintf(out, "dmsetup [--version] [-v|--verbose [-v|--verbose ...]]\n"
 | 
			
		||||
		     "        [-r|--readonly] [-j|--major <major>] [-m|--minor <minor>]\n\n");
 | 
			
		||||
		"        [-r|--readonly] [-j|--major <major>] "
 | 
			
		||||
		"[-m|--minor <minor>]\n\n");
 | 
			
		||||
	for (i = 0; _commands[i].name; i++)
 | 
			
		||||
		fprintf(out, "\t%s %s\n", _commands[i].name, _commands[i].help);
 | 
			
		||||
	return;
 | 
			
		||||
@@ -556,14 +680,20 @@ static int _process_switches(int *argc, char ***argv)
 | 
			
		||||
	int ind;
 | 
			
		||||
	int c;
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_GETOPTLONG
 | 
			
		||||
	static struct option long_options[] = {
 | 
			
		||||
		{"readonly", 0, NULL, READ_ONLY},
 | 
			
		||||
		{"major", 1, NULL, MAJOR_ARG},
 | 
			
		||||
		{"minor", 1, NULL, MINOR_ARG},
 | 
			
		||||
		{"notable", 0, NULL, NOTABLE_ARG},
 | 
			
		||||
		{"uuid", 1, NULL, UUID_ARG},
 | 
			
		||||
		{"verbose", 1, NULL, VERBOSE_ARG},
 | 
			
		||||
		{"version", 0, NULL, VERSION_ARG},
 | 
			
		||||
		{"", 0, NULL, 0}
 | 
			
		||||
	};
 | 
			
		||||
#else
 | 
			
		||||
	struct option long_options;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Zero all the index counts.
 | 
			
		||||
@@ -571,8 +701,10 @@ static int _process_switches(int *argc, char ***argv)
 | 
			
		||||
	memset(&_switches, 0, sizeof(_switches));
 | 
			
		||||
	memset(&_values, 0, sizeof(_values));
 | 
			
		||||
 | 
			
		||||
	while ((c = getopt_long(*argc, *argv, "j:m:rv",
 | 
			
		||||
				long_options, &ind)) != -1) {
 | 
			
		||||
	optarg = 0;
 | 
			
		||||
	optind = OPTIND_INIT;
 | 
			
		||||
	while ((c = GETOPTLONG_FN(*argc, *argv, "j:m:nru:v",
 | 
			
		||||
				  long_options, &ind)) != -1) {
 | 
			
		||||
		if (c == 'r' || ind == READ_ONLY)
 | 
			
		||||
			_switches[READ_ONLY]++;
 | 
			
		||||
		if (c == 'j' || ind == MAJOR_ARG) {
 | 
			
		||||
@@ -583,8 +715,14 @@ static int _process_switches(int *argc, char ***argv)
 | 
			
		||||
			_switches[MINOR_ARG]++;
 | 
			
		||||
			_values[MINOR_ARG] = atoi(optarg);
 | 
			
		||||
		}
 | 
			
		||||
		if (c == 'n' || ind == NOTABLE_ARG)
 | 
			
		||||
			_switches[NOTABLE_ARG]++;
 | 
			
		||||
		if (c == 'v' || ind == VERBOSE_ARG)
 | 
			
		||||
			_switches[VERBOSE_ARG]++;
 | 
			
		||||
		if (c == 'u' || ind == UUID_ARG) {
 | 
			
		||||
			_switches[UUID_ARG]++;
 | 
			
		||||
			_uuid = optarg;
 | 
			
		||||
		}
 | 
			
		||||
		if ((ind == VERSION_ARG))
 | 
			
		||||
			_switches[VERSION_ARG]++;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								tools/dumpconfig.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								tools/dumpconfig.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2003  Sistina Software
 | 
			
		||||
 *
 | 
			
		||||
 * LVM 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 2, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * LVM 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 LVM; see the file COPYING.  If not, write to
 | 
			
		||||
 * the Free Software Foundation, 59 Temple Place - Suite 330,
 | 
			
		||||
 * Boston, MA 02111-1307, USA.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "tools.h"
 | 
			
		||||
 | 
			
		||||
int dumpconfig(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	const char *file = NULL;
 | 
			
		||||
 | 
			
		||||
	if (argc == 1)
 | 
			
		||||
		file = argv[0];
 | 
			
		||||
 | 
			
		||||
	if (argc > 1) {
 | 
			
		||||
		log_error("Please specify one file for output");
 | 
			
		||||
		return EINVALID_CMD_LINE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!write_config_file(cmd->cf, file))
 | 
			
		||||
		return ECMD_FAILED;
 | 
			
		||||
 | 
			
		||||
	return ECMD_PROCESSED;
 | 
			
		||||
}
 | 
			
		||||
@@ -376,7 +376,7 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
 | 
			
		||||
		if (!lvchange_availability(cmd, lv))
 | 
			
		||||
			return ECMD_FAILED;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ECMD_PROCESSED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lvchange(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
 
 | 
			
		||||
@@ -347,7 +347,7 @@ static int _zero_lv(struct cmd_context *cmd, struct logical_volume *lv)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	dev_zero(dev, UINT64_C(0), (size_t) 4096);
 | 
			
		||||
	dev_close(dev);
 | 
			
		||||
	dev_close_immediate(dev);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
@@ -356,6 +356,7 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t size_rest;
 | 
			
		||||
	uint32_t status = 0;
 | 
			
		||||
	uint64_t tmp_size;
 | 
			
		||||
	alloc_policy_t alloc = ALLOC_DEFAULT;
 | 
			
		||||
	struct volume_group *vg;
 | 
			
		||||
	struct logical_volume *lv, *org = NULL;
 | 
			
		||||
@@ -412,17 +413,16 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
 | 
			
		||||
 | 
			
		||||
	if (lp->size) {
 | 
			
		||||
		/* No of 512-byte sectors */
 | 
			
		||||
		lp->extents = lp->size;
 | 
			
		||||
		tmp_size = lp->size;
 | 
			
		||||
 | 
			
		||||
		if (lp->extents % vg->extent_size) {
 | 
			
		||||
			lp->extents += vg->extent_size - lp->extents %
 | 
			
		||||
		if (tmp_size % vg->extent_size) {
 | 
			
		||||
			tmp_size += vg->extent_size - tmp_size %
 | 
			
		||||
			    vg->extent_size;
 | 
			
		||||
			log_print("Rounding up size to full physical extent %s",
 | 
			
		||||
				  display_size(cmd, (uint64_t) lp->extents / 2,
 | 
			
		||||
					       SIZE_SHORT));
 | 
			
		||||
				  display_size(cmd, tmp_size / 2, SIZE_SHORT));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		lp->extents /= vg->extent_size;
 | 
			
		||||
		lp->extents = tmp_size / vg->extent_size;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((size_rest = lp->extents % lp->stripes)) {
 | 
			
		||||
@@ -563,11 +563,11 @@ int lvcreate(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
	memset(&lp, 0, sizeof(lp));
 | 
			
		||||
 | 
			
		||||
	if (!_read_params(&lp, cmd, argc, argv))
 | 
			
		||||
		return -EINVALID_CMD_LINE;
 | 
			
		||||
		return EINVALID_CMD_LINE;
 | 
			
		||||
 | 
			
		||||
	if (!lock_vol(cmd, lp.vg_name, LCK_VG_WRITE)) {
 | 
			
		||||
		log_error("Can't get lock for %s", lp.vg_name);
 | 
			
		||||
		return 0;
 | 
			
		||||
		return ECMD_FAILED;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!_lvcreate(cmd, &lp)) {
 | 
			
		||||
@@ -575,7 +575,7 @@ int lvcreate(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r = 0;
 | 
			
		||||
	r = ECMD_PROCESSED;
 | 
			
		||||
 | 
			
		||||
      out:
 | 
			
		||||
	unlock_vg(cmd, lp.vg_name);
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ static int _lvdisplay_single(struct cmd_context *cmd, struct logical_volume *lv,
 | 
			
		||||
			lvdisplay_segments(lv);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ECMD_PROCESSED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lvdisplay(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
 
 | 
			
		||||
@@ -77,14 +77,11 @@ int yes_no_arg(struct cmd_context *cmd, struct arg *a)
 | 
			
		||||
int metadatatype_arg(struct cmd_context *cmd, struct arg *a)
 | 
			
		||||
{
 | 
			
		||||
	struct format_type *fmt;
 | 
			
		||||
	struct list *fmth;
 | 
			
		||||
 | 
			
		||||
	char *format;
 | 
			
		||||
 | 
			
		||||
	format = a->value;
 | 
			
		||||
 | 
			
		||||
	list_iterate(fmth, &cmd->formats) {
 | 
			
		||||
		fmt = list_item(fmth, struct format_type);
 | 
			
		||||
	list_iterate_items(fmt, &cmd->formats) {
 | 
			
		||||
		if (!strcasecmp(fmt->name, format) ||
 | 
			
		||||
		    !strcasecmp(fmt->name + 3, format) ||
 | 
			
		||||
		    (fmt->alias && !strcasecmp(fmt->alias, format))) {
 | 
			
		||||
@@ -125,6 +122,8 @@ static int _get_int_arg(struct arg *a, char **ptr)
 | 
			
		||||
 | 
			
		||||
	a->i_value = (int32_t) v;
 | 
			
		||||
	a->ui_value = (uint32_t) v;
 | 
			
		||||
	a->i64_value = (int64_t) v;
 | 
			
		||||
	a->ui64_value = (uint64_t) v;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,6 @@
 | 
			
		||||
 | 
			
		||||
int lvmchange(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	log_print("With the device mapper, this program is obsolete.");
 | 
			
		||||
	return 0;
 | 
			
		||||
	log_print("With LVM2 and the device mapper, this program is obsolete.");
 | 
			
		||||
	return ECMD_FAILED;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,7 @@ int lvmdiskscan(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (!(iter = dev_iter_create(cmd->filter))) {
 | 
			
		||||
		log_error("dev_iter_create failed");
 | 
			
		||||
		return 0;
 | 
			
		||||
		return ECMD_FAILED;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Do scan */
 | 
			
		||||
@@ -135,5 +135,5 @@ int lvmdiskscan(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
	log_print("%d LVM physical volume%s",
 | 
			
		||||
		  pv_parts_found, pv_parts_found == 1 ? "" : "s");
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ECMD_PROCESSED;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ static int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
 | 
			
		||||
					  lv->name) == 'n') {
 | 
			
		||||
				log_print("Logical volume \"%s\" not removed",
 | 
			
		||||
					  lv->name);
 | 
			
		||||
				return 0;
 | 
			
		||||
				return ECMD_FAILED;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -97,7 +97,7 @@ static int lvremove_single(struct cmd_context *cmd, struct logical_volume *lv,
 | 
			
		||||
		return ECMD_FAILED;
 | 
			
		||||
 | 
			
		||||
	log_print("Logical volume \"%s\" successfully removed", lv->name);
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ECMD_PROCESSED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lvremove(struct cmd_context *cmd, int argc, char **argv)
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user