summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-editors/emacs/emacs-20.7.ebuild54
-rw-r--r--app-editors/emacs/emacs-21.0.103.ebuild58
-rw-r--r--app-editors/nano/nano-1.0.3-r1.ebuild2
-rw-r--r--files/isoinitrd-20010726.packages13
-rw-r--r--files/isoinitrd/etc/inittab57
-rw-r--r--files/isoinitrd/etc/rc.d/init.d/cdboot12
-rw-r--r--files/isoinitrd/etc/rc.d/init.d/cdscan40
-rw-r--r--files/isoinitrd/etc/rc.d/init.d/devfsd13
-rw-r--r--media-libs/glide-v3/glide-v3-0.ebuild30
-rw-r--r--media-libs/glide-v5/glide-v5-0.ebuild30
-rw-r--r--net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild37
-rw-r--r--net-misc/dhcpcd/files/digest-dhcpcd-1.3.20_p0-r11
-rw-r--r--net-misc/rsync/rsync-2.4.6-r4.ebuild10
-rw-r--r--net-misc/wget/wget-1.7-r1.ebuild16
-rw-r--r--profiles/package.mask2
-rw-r--r--scripts/autodist.sh26
-rw-r--r--scripts/sortpkglist.py12
-rw-r--r--sys-apps/baselayout/files/fstab2
-rw-r--r--sys-apps/bash/bash-2.04-r4.ebuild3
-rw-r--r--sys-apps/bzip2/bzip2-1.0.1-r4.ebuild72
-rw-r--r--sys-apps/console-tools/console-tools-0.2.3-r4.ebuild69
-rw-r--r--sys-apps/console-tools/files/digest-console-tools-0.2.3-r41
-rw-r--r--sys-apps/debianutils/debianutils-1.13.3-r4.ebuild18
-rw-r--r--sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild82
-rw-r--r--sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild41
-rw-r--r--sys-apps/e2fsprogs/files/digest-e2fsprogs-1.22-r11
-rw-r--r--sys-apps/ed/ed-0.2-r3.ebuild36
-rw-r--r--sys-apps/ed/files/ed-0.2-r3-gentoo.diff15
-rw-r--r--sys-apps/file/file-3.33-r3.ebuild6
-rw-r--r--sys-apps/fileutils/fileutils-4.1-r2.ebuild33
-rw-r--r--sys-apps/gawk/gawk-3.0.6-r4.ebuild7
-rw-r--r--sys-apps/grep/grep-2.4.2-r4.ebuild4
-rw-r--r--sys-apps/modutils/files/digest-modutils-2.4.6-r11
-rw-r--r--sys-apps/modutils/modutils-2.4.6-r1.ebuild27
-rw-r--r--sys-apps/net-tools/files/digest-net-tools-1.60-r11
-rw-r--r--sys-apps/net-tools/net-tools-1.60-r1.ebuild57
-rw-r--r--sys-apps/netkit-base/files/digest-netkit-base-0.17-r31
-rw-r--r--sys-apps/netkit-base/netkit-base-0.17-r3.ebuild42
-rw-r--r--sys-apps/parted/files/digest-parted-1.4.14-r21
-rw-r--r--sys-apps/parted/files/digest-parted-1.4.171
-rw-r--r--sys-apps/parted/files/parted-1.4.14-r2-gentoo.diff2336
-rw-r--r--sys-apps/parted/files/parted-1.4.17-gentoo.diff13318
-rw-r--r--sys-apps/parted/parted-1.4.14-r2.ebuild63
-rw-r--r--sys-apps/parted/parted-1.4.17.ebuild70
-rw-r--r--sys-apps/procps/files/digest-procps-2.0.6-r21
-rw-r--r--sys-apps/procps/files/digest-procps-2.0.7-r41
-rw-r--r--sys-apps/procps/procps-2.0.6-r2.ebuild59
-rw-r--r--sys-apps/procps/procps-2.0.7-r3.ebuild8
-rw-r--r--sys-apps/procps/procps-2.0.7-r4.ebuild64
-rw-r--r--sys-apps/psmisc/files/digest-psmisc-19-r31
-rw-r--r--sys-apps/psmisc/psmisc-19-r3.ebuild41
-rw-r--r--sys-apps/reiserfs-utils/files/digest-reiserfs-utils-3.6.25-r71
-rw-r--r--sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild31
-rw-r--r--sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild22
-rw-r--r--sys-apps/shadow/shadow-20001016-r4.ebuild32
-rw-r--r--sys-apps/sysvinit/files/digest-sysvinit-2.78-r41
-rw-r--r--sys-apps/sysvinit/sysvinit-2.78-r4.ebuild49
-rw-r--r--sys-apps/tar/files/tar-1.13.19-r1-gentoo.diff40
-rw-r--r--sys-apps/tar/tar-1.13.19-r1.ebuild6
-rw-r--r--sys-apps/util-linux/files/digest-util-linux-2.11g-r11
-rw-r--r--sys-apps/util-linux/util-linux-2.11g-r1.ebuild63
-rw-r--r--sys-devel/gettext/files/digest-gettext-0.10.391
-rw-r--r--sys-devel/gettext/gettext-0.10.39.ebuild44
-rw-r--r--sys-devel/spython/files/spython-2.0-r7-gentoo.diff477
-rw-r--r--sys-devel/spython/spython-2.0-r6.ebuild93
-rw-r--r--sys-kernel/linux/linux-2.4.6-r2.ebuild451
-rw-r--r--sys-libs/glibc/glibc-2.2.3-r4.ebuild4
67 files changed, 18082 insertions, 130 deletions
diff --git a/app-editors/emacs/emacs-20.7.ebuild b/app-editors/emacs/emacs-20.7.ebuild
new file mode 100644
index 000000000000..b2ba603fddf6
--- /dev/null
+++ b/app-editors/emacs/emacs-20.7.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Mikael Hallendal <micke@hallendal.net>
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="An incredibly powerful, extensible text editor"
+SRC_URI="ftp://ftp.gnu.org/gnu/${PN}/${A}"
+HOMEPAGE="http://www.gnu.org/software/emacs"
+
+DEPEND=">=sys-libs/ncurses-5.2
+ X? ( virtual/x11 )
+ motif? ( >=x11-libs/openmotif-2.1.30 )
+ nls? ( >=sys-devel/gettext-0.10.35 )"
+
+PROVIDE="virtual/emacs"
+
+src_compile() {
+ local myconf
+
+ if [ -z "`use nls`" ] ; then
+ myconf="${myconf} --disable-nls"
+ fi
+ if [ "`use X`" ] ; then
+ myconf="${myconf} --with-x"
+ else
+ myconf="${myconf} --without-x"
+ fi
+ if [ "`use motif`" ] ; then
+ myconf="${myconf} --with-x-toolkit=motif"
+ fi
+
+ try ./configure --prefix=/usr --libexecdir=/usr/lib --host=${CHOST} \
+ --mandir=/usr/share/man --infodir=/usr/share/info ${myconf}
+
+ try make ${MAKEOPTS}
+}
+
+src_install () {
+ try make prefix=${D}/usr libexecdir=${D}/usr/lib \
+ mandir=${D}/usr/share/man infodir=${D}/usr/share/info install
+ cd ${D}/usr/share/info
+ rm dir
+ for i in *
+ do
+ mv ${i%.info} $i.info
+ done
+ dodoc BUGS ChangeLog README
+}
+
+
+
+
+
diff --git a/app-editors/emacs/emacs-21.0.103.ebuild b/app-editors/emacs/emacs-21.0.103.ebuild
new file mode 100644
index 000000000000..77f4b3d18e46
--- /dev/null
+++ b/app-editors/emacs/emacs-21.0.103.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Mikael Hallendal <micke@hallendal.net>
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="An incredibly powerful, extensible text editor"
+SRC_URI="ftp://ftp.eecs.umich.edu/pub/NetBSD/packages/distfiles/LOCAL_PORTS/${A}"
+HOMEPAGE="http://www.gnu.org/software/emacs"
+
+DEPEND=">=sys-libs/ncurses-5.2
+ X? ( virtual/x11
+ media-libs/libungif-4.1.0
+ media-libs/jpeg-6b-r2
+ media-libs/tiff-3.5.5-r3
+ media-libs/libpng-1.0.9 )
+ motif? ( >=x11-libs/openmotif-2.1.30 )
+ nls? ( >=sys-devel/gettext-0.10.35 )"
+
+PROVIDE="virtual/emacs"
+
+src_compile() {
+ local myconf
+
+ if [ -z "`use nls`" ] ; then
+ myconf="${myconf} --disable-nls"
+ fi
+ if [ "`use X`" ] ; then
+ myconf="${myconf} --with-x --with-xpm --with-jpeg --with-tiff --with-gif --with-png"
+ else
+ myconf="${myconf} --without-x"
+ fi
+ if [ "`use motif`" ] ; then
+ myconf="${myconf} --with-x-toolkit=motif"
+ fi
+
+ try ./configure --prefix=/usr --libexecdir=/usr/lib --host=${CHOST} \
+ --mandir=/usr/share/man --infodir=/usr/share/info ${myconf}
+
+ try make ${MAKEOPTS}
+}
+
+src_install () {
+ try make prefix=${D}/usr libexecdir=${D}/usr/lib \
+ mandir=${D}/usr/share/man infodir=${D}/usr/share/info install
+ cd ${D}/usr/share/info
+ rm dir
+ for i in *
+ do
+ mv ${i%.info} $i.info
+ done
+ dodoc BUGS ChangeLog README
+}
+
+
+
+
+
diff --git a/app-editors/nano/nano-1.0.3-r1.ebuild b/app-editors/nano/nano-1.0.3-r1.ebuild
index f53555af1430..860c45dc993d 100644
--- a/app-editors/nano/nano-1.0.3-r1.ebuild
+++ b/app-editors/nano/nano-1.0.3-r1.ebuild
@@ -24,6 +24,6 @@ src_install () {
then
dodoc COPYING ChangeLog README
else
- rm -rf ${D}/usr/share/{man,info}
+ rm -rf ${D}/usr/share
fi
}
diff --git a/files/isoinitrd-20010726.packages b/files/isoinitrd-20010726.packages
index 8dfe3da41298..db0f1a620dc9 100644
--- a/files/isoinitrd-20010726.packages
+++ b/files/isoinitrd-20010726.packages
@@ -9,21 +9,26 @@ sys-apps/findutils/findutils-4.1-r6.ebuild
sys-apps/gawk/gawk-3.0.6-r4.ebuild
sys-apps/grep/grep-2.4.2-r4.ebuild
sys-apps/gzip/gzip-1.2.4a-r4.ebuild
-sys-apps/portage/portage-1.5.2.ebuild
+sys-apps/portage/portage-1.5.3.ebuild
sys-apps/sed/sed-3.02.80-r3.ebuild
sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild
sys-apps/tar/tar-1.13.19-r1.ebuild
sys-apps/textutils/textutils-2.0.10-r3.ebuild
-sys-devel/spython/spython-2.0-r6.ebuild
+sys-devel/spython/spython-2.0-r7.ebuild
net-misc/wget/wget-1.7-r1.ebuild
net-misc/rsync/rsync-2.4.6-r4.ebuild
sys-apps/util-linux/util-linux-2.11g-r1.ebuild
-sys-apps/net-tools/net-tools-1.60-r1.ebuild
sys-apps/psmisc/psmisc-19-r3.ebuild
sys-apps/net-tools/net-tools-1.60-r1.ebuild
sys-apps/ed/ed-0.2-r2.ebuild
-sys-apps/procps/procps-2.0.6-r2.ebuild
+sys-apps/procps/procps-2.0.7-r4.ebuild
sys-apps/sysvinit/sysvinit-2.78-r4.ebuild
sys-apps/shadow/shadow-20001016-r4.ebuild
sys-apps/netkit-base/netkit-base-0.17-r3.ebuild
sys-apps/console-tools/console-tools-0.2.3-r4.ebuild
+sys-apps/parted/parted-1.4.17.ebuild
+app-editors/nano/nano-1.0.3-r1.ebuild
+net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild
+sys-apps/modutils/modutils-2.4.6-r1.ebuild
+sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild
+sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild
diff --git a/files/isoinitrd/etc/inittab b/files/isoinitrd/etc/inittab
new file mode 100644
index 000000000000..0dd9be2ffd82
--- /dev/null
+++ b/files/isoinitrd/etc/inittab
@@ -0,0 +1,57 @@
+#
+# inittab This file describes how the INIT process should set up
+# the system in a certain run-level.
+#
+# Author: Miquel van Smoorenburg, <miquels@cistron.nl>
+# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
+# Modified by: Daniel Robbins, <drobbins@gentoo.org>
+
+#
+# Default runlevel.
+
+id:1:initdefault:
+
+# System initialization (runs when system boots).
+si:S:sysinit:/etc/rc.d/init.d/rc S
+
+# Script to run when going single user (runlevel 1).
+~~:S:wait:/sbin/sulogin
+
+# RUNLEVELS
+# 0=halt
+# 1=single user
+# 2=multi-user, no net
+# 3=multi-user, network
+# 4=multi-user, xdm (graphical terminal)
+# 5=customize it to your own liking
+# 6=reboot
+
+l0:0:wait:/etc/rc.d/init.d/rc 0
+l1:1:wait:/etc/rc.d/init.d/rc 1
+l2:2:wait:/etc/rc.d/init.d/rc 2
+l3:3:wait:/etc/rc.d/init.d/rc 3
+l4:4:wait:/etc/rc.d/init.d/rc 4
+l5:5:wait:/etc/rc.d/init.d/rc 5
+l6:6:wait:/etc/rc.d/init.d/rc 6
+z6:6:respawn:/sbin/sulogin
+
+# If you use Login.app, this is how you get it working
+# x1:4:respawn:/usr/bin/Login.app >& /dev/null
+
+# TERMINALS
+c1:12345:respawn:/sbin/agetty 38400 tty1 linux
+c2:12345:respawn:/sbin/agetty 38400 tty2 linux
+c3:12345:respawn:/sbin/agetty 38400 tty3 linux
+c4:12345:respawn:/sbin/agetty 38400 tty4 linux
+c5:23:respawn:/sbin/agetty 38400 tty5 linux
+c6:23:respawn:/sbin/agetty 38400 tty6 linux
+
+# What to do at the "Three Finger Salute".
+ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now
+
+# Start svscan process in runlevels 2 through 5
+# Placing it here makes sure that it respawns if it dies, but keeping it our of runlevel 1 prevents
+# svscan from starting before the system is ready.
+#SV:2345:respawn:env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin svscan /var/lib/supervise/control < /dev/null > /dev/console 2>/dev/console
+
+# End of /etc/inittab
diff --git a/files/isoinitrd/etc/rc.d/init.d/cdboot b/files/isoinitrd/etc/rc.d/init.d/cdboot
new file mode 100644
index 000000000000..119c9b65d0b2
--- /dev/null
+++ b/files/isoinitrd/etc/rc.d/init.d/cdboot
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+if [ "$1" != "start" ]
+then
+ exit
+fi
+umask 022
+mount / -o remount,rw
+: > /etc/mtab
+mount /proc
+/bin/hostname cdimage
+
diff --git a/files/isoinitrd/etc/rc.d/init.d/cdscan b/files/isoinitrd/etc/rc.d/init.d/cdscan
new file mode 100644
index 000000000000..c0eccdbeec38
--- /dev/null
+++ b/files/isoinitrd/etc/rc.d/init.d/cdscan
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+#CD Detection
+for x in /dev/cdroms/*
+do
+ mount $x /mnt/cdrom -o iso9660,ro
+ if [ $? -ne 0 ]
+ then
+ continue
+ fi
+ if [ ! -e /mnt/cdrom/.id-gentoo-linux ]
+ then
+ umount /mnt/cdrom
+ continue
+ fi
+done
+if [ ! -e /mnt/cdrom/.id-gentoo-linux* ]
+then
+ echo "!!! Couldn't find and mount Gentoo Linux CD."
+ echo "!!! You may need to load some SCSI modules."
+fi
+
+#mount compressed loopback fs
+/bin/mknod /dev/cloop b 240 0
+/sbin/insmod /lib/cloop.o file=/mnt/cdrom/usr.iso /usr
+/bin/mount -o ro /dev/cloop /usr
+if [ -d /mnt/cdrom/gentoo/packages ]
+then
+ mount --bind /mnt/cdrom/gentoo/packages /usr/portage/packages
+fi
+if [ -d /mnt/cdrom/gentoo/distfiles ]
+then
+ mount --bind /mnt/cdrom/gentoo/distfiles /usr/portage/distfiles
+fi
+#LVM init
+/sbin/vgscan
+/sbin/vgchange -ay
+#general init
+/usr/sbin/env-update
+. /etc/profile
diff --git a/files/isoinitrd/etc/rc.d/init.d/devfsd b/files/isoinitrd/etc/rc.d/init.d/devfsd
new file mode 100644
index 000000000000..71afbdd55a08
--- /dev/null
+++ b/files/isoinitrd/etc/rc.d/init.d/devfsd
@@ -0,0 +1,13 @@
+#!/bin/sh
+#RCUPDATE:boot:04:This line is required for script management
+
+
+. /etc/rc.d/config/basic
+. /etc/rc.d/config/functions
+
+# Test if we use devfs and start devfsd
+mount --bind /dev /dev-state
+mount -t devfs none /dev
+//sbin/devfsd /dev
+
+
diff --git a/media-libs/glide-v3/glide-v3-0.ebuild b/media-libs/glide-v3/glide-v3-0.ebuild
new file mode 100644
index 000000000000..2b170f39bb08
--- /dev/null
+++ b/media-libs/glide-v3/glide-v3-0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2001 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Peter Gavin <your email>
+# $Header: /var/cvsroot/gentoo-x86/media-libs/glide-v3/glide-v3-0.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/${P}
+DESCRIPTION="the glide library (for voodoo3 cards)"
+SRC_URI="http://dri.sourceforge.net/res/glide3headers.tar.gz
+ http://dri.sourceforge.net/res/voodoo3/x86/libglide3.so"
+HOMEPAGE="http://dri.sourceforge.net/"
+DEPEND=""
+RDEPEND=""
+
+src_unpack() {
+ mkdir ${S}
+ cd ${S}
+ unpack glide3headers.tar.gz
+ chown -R 0.0 glide
+}
+
+src_compile() {
+
+}
+
+src_install () {
+ dodir /usr/include
+ cp -a ${S}/glide /usr/include
+ cp -a ${DISTDIR}/libglide.so /usr/lib
+}
+
diff --git a/media-libs/glide-v5/glide-v5-0.ebuild b/media-libs/glide-v5/glide-v5-0.ebuild
new file mode 100644
index 000000000000..565be9beaeac
--- /dev/null
+++ b/media-libs/glide-v5/glide-v5-0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2001 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Peter Gavin <your email>
+# $Header: /var/cvsroot/gentoo-x86/media-libs/glide-v5/glide-v5-0.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/${P}
+DESCRIPTION="the glide library (for voodoo5 cards)"
+SRC_URI="http://dri.sourceforge.net/res/glide3headers.tar.gz
+ http://dri.sourceforge.net/res/voodoo5/x86/libglide3.so"
+HOMEPAGE="http://dri.sourceforge.net/"
+DEPEND=""
+RDEPEND=""
+
+src_unpack() {
+ mkdir ${S}
+ cd ${S}
+ unpack glide3headers.tar.gz
+ chown -R 0.0 glide
+}
+
+src_compile() {
+
+}
+
+src_install () {
+ dodir /usr/include
+ cp -a ${S}/glide /usr/include
+ cp -a ${DISTDIR}/libglide.so /usr/lib
+}
+
diff --git a/net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild b/net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild
new file mode 100644
index 000000000000..ea302e05210b
--- /dev/null
+++ b/net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Your Name <your email>
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcpcd/dhcpcd-1.3.20_p0-r1.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${PN}-1.3.20-pl0.tar.gz
+S=${WORKDIR}/${PN}-1.3.20-pl0
+DESCRIPTION="A dhcp client only"
+SRC_URI="ftp://ftp.phystech.cm/pub/${A}"
+HOMEPAGE="http://"
+
+DEPEND=""
+
+src_compile() {
+
+ try ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --sbindir=/sbin --host=${CHOST}
+ try make
+
+}
+
+src_install () {
+
+ try make DESTDIR=${D} install
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc AUTHORS COPYING ChangeLog NEWS README
+ else
+ rm -rf ${D}/usr/share
+ fi
+ if [ "`use pcmcia`" ] || [ "`use pcmcia-cs`" ]
+ then
+ insinto /etc/pcmcia
+ doins pcmcia/network*
+ fi
+
+}
+
diff --git a/net-misc/dhcpcd/files/digest-dhcpcd-1.3.20_p0-r1 b/net-misc/dhcpcd/files/digest-dhcpcd-1.3.20_p0-r1
new file mode 100644
index 000000000000..66b474ce04c6
--- /dev/null
+++ b/net-misc/dhcpcd/files/digest-dhcpcd-1.3.20_p0-r1
@@ -0,0 +1 @@
+MD5 5f52904ac354295ce64f74f254ac1d0d dhcpcd-1.3.20-pl0.tar.gz
diff --git a/net-misc/rsync/rsync-2.4.6-r4.ebuild b/net-misc/rsync/rsync-2.4.6-r4.ebuild
index 9d5e0fa0b1aa..b159b27e53d6 100644
--- a/net-misc/rsync/rsync-2.4.6-r4.ebuild
+++ b/net-misc/rsync/rsync-2.4.6-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/net-misc/rsync/rsync-2.4.6-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-misc/rsync/rsync-2.4.6-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -34,13 +34,13 @@ src_compile() {
}
src_install () {
-
- if [ -z "`use build`" ] && [ -z "`use bootcd`" ] ; then
- try make prefix=${D}/usr mandir=${D}/usr/share/man install
+
+ try make prefix=${D}/usr mandir=${D}/usr/share/man install
+ if [ -z "`use build`" ] && [ -z "`use bootcd`" ] ; then
dodir /etc/rsync
dodoc COPYING README
else
- dobin rsync
+ rm -rf ${D}/usr/share
fi
}
diff --git a/net-misc/wget/wget-1.7-r1.ebuild b/net-misc/wget/wget-1.7-r1.ebuild
index 629be84dfbcc..ba8ed23f6bd2 100644
--- a/net-misc/wget/wget-1.7-r1.ebuild
+++ b/net-misc/wget/wget-1.7-r1.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/net-misc/wget/wget-1.7-r1.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-misc/wget/wget-1.7-r1.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A="${P}.tar.gz wget-new-percentage-1.7-20010606.diff"
S=${WORKDIR}/${P}
@@ -43,15 +43,15 @@ src_compile() {
}
src_install() {
-
+
+ try make prefix=${D}/usr sysconfdir=${D}/etc/wget \
+ mandir=${D}/usr/share/man infodir=${D}/usr/share/info install
+
if [ "`use build`" ] || [ "`use bootcd`" ] ; then
- dobin src/wget
+ rm -rf ${D}/usr
else
- try make prefix=${D}/usr sysconfdir=${D}/etc/wget \
- mandir=${D}/usr/share/man infodir=${D}/usr/share/info install
-
- dodoc AUTHORS COPYING ChangeLog MACHINES MAILING-LIST NEWS README TODO
- dodoc doc/sample.wgetrc
+ dodoc AUTHORS COPYING ChangeLog MACHINES MAILING-LIST NEWS README TODO
+ dodoc doc/sample.wgetrc
fi
}
diff --git a/profiles/package.mask b/profiles/package.mask
index 1463c0f7b782..71c6a916c032 100644
--- a/profiles/package.mask
+++ b/profiles/package.mask
@@ -24,7 +24,7 @@ sys-kernel/linux-sources-vanilla
app-admin/powertweak
media-video/avi-xmms
app-text/sgml2x
->=sys-apps/procps-2.0.7
+#>=sys-apps/procps-2.0.7
# unfinished
app-admin/va-systemimager-server
diff --git a/scripts/autodist.sh b/scripts/autodist.sh
index f68a6116fa03..68b146c195ef 100644
--- a/scripts/autodist.sh
+++ b/scripts/autodist.sh
@@ -17,6 +17,8 @@ ISOROOT="${AUTODISTDIR}/isoroot"
INITRDROOT="${AUTODISTDIR}/initrdroot"
[ -z "${BUILDTARBALL}" ] && BUILDTARBALL="build-${TODAY}.tbz2"
[ -z "${SYSTARBALL}" ] && SYSTARBALL="sys-${TODAY}.tbz2"
+# shouldn't allow CFLAGS to be overridden
+export CFLAGS="-O2 -mcpu=i486 -march=i486"
[ -d "${DISTRODIR}" ] || mkdir -p "${DISTRODIR}"
@@ -25,6 +27,9 @@ INITRDROOT="${AUTODISTDIR}/initrdroot"
[ -z "${SYS_PACKAGES}" ] && SYS_PACKAGES=`ls -1 ${PORTDIR}/files/sys-*.packages | sort | tail -1`
[ -z "${KERNEL_SRC}" ] && KERNEL_SRC="/usr/src/`readlink /usr/src/linux`"
[ -z "${KERNEL_VERSION}" ] && KERNEL_VERSION="`echo ${KERNEL_SRC} | sed 's,.*-\([0-9]\.[0-9]\.[0-9]\+\(-ac[0-9]\+\)\?\)$,\1,'`"
+export PORTDIR
+export DISTRODIR
+export AUTODISTDIR
if grep -qs "${AUTODISTDIR}" /proc/mounts
then
@@ -56,14 +61,25 @@ echo ">>> Cleaning up ${AUTODISTDIR}..."
rm -rf ${AUTODISTDIR}
echo ">>> Creating ISO directory tree..."
-mkdir -p
-mkdir -v ${ISOROOT}/{doc,gentoo{,/distfiles,/packages{,/All}},isolinux{,/kernels},stuff}
+mkdir -pv ${ISOROOT}/{doc,gentoo{,/distfiles,/packages{,/All}},isolinux{,/kernels},stuff}
-echo ">>> Building initrd..."
-mkdir -p "${INITRDROOT}"
+echo ">>> Building initrd packages..."
+mkdir -p ${INITRDROOT}
ERRQUIT=yes CHECK=no USE=bootcd ROOT="${INITRDROOT}" STEPS="clean unpack compile install qmerge clean" ${PORTDIR}/scripts/autocompile.sh ${ISOINITRD_PACKAGES}
if [ ${?} != 0 ]
then
- echo "Error building initrd, quitting"
+ echo "Error building initrd packages, quitting"
exit 1
fi
+echo ">>> Cleaning up ${INITRDROOT}/tmp"
+rm -rf ${INITRDROOT}/tmp/*
+
+echo ">>> Setting up initrd..."
+find ${INITRDROOT}/etc -name "*._cfg_*" exec rm -vf {} \;
+for dir in etc{,/rc.d{,/config,/init.d,/rc{1,2,3,4,5,boot,halt}}.d}
+do
+ cp -v ${PORTDIR}/files/isoinitrd/${dir}/* ${INITRDROOT}/${dir}
+done
+ROOT=${INITRDROOT} rc-update autogen boot force
+ROOT=${INITRDROOT} rc-update autogen normal force
+ROOT=${INITRDROOT} rc-update autogen halt force
diff --git a/scripts/sortpkglist.py b/scripts/sortpkglist.py
index 233fbb237c59..c589046e7476 100644
--- a/scripts/sortpkglist.py
+++ b/scripts/sortpkglist.py
@@ -8,15 +8,3 @@
import portage
import sys
-digraph = portage.digraph()
-
-if len(sys.argv) != 2:
- print 'usage: %s packagelist' % sys.argv[0]
-
-try:
- packagelist = open(sys.argv[1], "r")
-except:
- sys.stderr.write("could not open %s\n" % sys.argv[1])
- sys.exit(1)
-
-packages = packagelist.readlines()
diff --git a/sys-apps/baselayout/files/fstab b/sys-apps/baselayout/files/fstab
index f4c1dc991dc9..13e8e4f7af2c 100644
--- a/sys-apps/baselayout/files/fstab
+++ b/sys-apps/baselayout/files/fstab
@@ -7,7 +7,7 @@
#
# <fs> <mountpoint> <type> <opts> <dump/pass>
-/dev/#BOOT# /boot ext2 noauto,noatime 1 1
+/dev/#BOOT# /boot ext2 noauto,noatime,notail 1 1
/dev/#ROOT# / reiserfs notail,noatime 0 0
/dev/#SWAP# none swap sw 0 0
/dev/#CD# /mnt/cdrom iso9660 noauto,ro 0 0
diff --git a/sys-apps/bash/bash-2.04-r4.ebuild b/sys-apps/bash/bash-2.04-r4.ebuild
index 7e2e53740b16..891f8d4d0353 100644
--- a/sys-apps/bash/bash-2.04-r4.ebuild
+++ b/sys-apps/bash/bash-2.04-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/bash/bash-2.04-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/bash/bash-2.04-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -82,4 +82,3 @@ src_install() {
fi
}
-
diff --git a/sys-apps/bzip2/bzip2-1.0.1-r4.ebuild b/sys-apps/bzip2/bzip2-1.0.1-r4.ebuild
new file mode 100644
index 000000000000..2933690d6232
--- /dev/null
+++ b/sys-apps/bzip2/bzip2-1.0.1-r4.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/bzip2/bzip2-1.0.1-r4.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="A high-quality data compressor used extensively by Gentoo"
+SRC_URI="ftp://sourceware.cygnus.com/pub/bzip2/v100/${A}
+ ftp://ftp.freesoftware.com/pub/sourceware/bzip2/v100/${A}"
+
+HOMEPAGE="http://sourceware.cygnus.com/bzip2/"
+
+DEPEND="virtual/glibc"
+
+src_unpack() {
+
+ unpack ${A}
+
+ cd ${S}
+ patch -p0 < ${FILESDIR}/bzip2-1.0.1-Makefile-gentoo.diff
+ cp ${FILESDIR}/Makefile.dietlibc .
+}
+
+src_compile() {
+ if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
+ then
+ try pmake -f Makefile-libbz2_so all
+ fi
+ if [ -z "`use static`" ]
+ then
+ try pmake all
+ else
+ if [ "`use diet`" ]
+ then
+ try pmake LDFLAGS=-static -f Makefile.dietlibc all
+ else
+ try pmake LDFLAGS=-static all
+ fi
+ fi
+}
+src_install() {
+
+ if [ -z "`use build`" ]
+ then
+ try make DESTDIR=${D} install
+ mv ${D}/usr/bin ${D}
+
+ if [ -z "`use bootcd`" ]
+ then
+ try make DESTDIR=${D} -f Makefile-libbz2_so install
+
+ dodoc README LICENSE CHANGES Y2K_INFO
+ docinto txt
+ dodoc bzip2.txt
+ docinto ps
+ dodoc manual.ps
+ docinto html
+ dodoc manual_*.html
+ else
+ rm -rf ${D}/usr
+ fi
+ else
+ into /
+ dobin bzip2
+ cd ${D}/bin
+ ln -s bzip2 bunzip2
+ fi
+
+}
+
+
diff --git a/sys-apps/console-tools/console-tools-0.2.3-r4.ebuild b/sys-apps/console-tools/console-tools-0.2.3-r4.ebuild
new file mode 100644
index 000000000000..eb8328bee2b2
--- /dev/null
+++ b/sys-apps/console-tools/console-tools-0.2.3-r4.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/console-tools/console-tools-0.2.3-r4.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/${P}
+DESCRIPTION="Console and font utilities"
+SRC_URI="ftp://metalab.unc.edu/pub/Linux/system/keyboards/${P}.tar.gz"
+HOMEPAGE="http://altern.org/ydirson/en/lct/"
+
+DEPEND="virtual/glibc
+ sys-devel/autoconf sys-devel/automake sys-devel/libtool
+ nls? ( sys-devel/gettext )"
+RDEPEND="virtual/glibc"
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+ patch -p1 < ${FILESDIR}/${P}.patch
+
+ patch -p0 < ${FILESDIR}/${P}-po-Makefile.in.in-gentoo.diff
+ try aclocal
+ try libtoolize --force -c
+ try autoheader
+ try automake -c
+ try autoconf
+}
+
+src_compile() {
+
+ local myconf
+
+ if [ "$DEBUG" ]
+ then
+ myconf="--enable-debugging"
+ fi
+ if [ -z "`use nls`" ]
+ then
+ myconf="${myconf} --disable-nls"
+ fi
+
+ try ./configure --prefix=/usr --mandir=/usr/share/man --target=${CHOST} ${myconf}
+ try make $MAKEOPTS all
+}
+
+src_install() {
+
+ # DESTDIR does not work correct
+ try make DESTDIR=${D} install
+
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc BUGS COPYING* CREDITS ChangeLog NEWS README RELEASE TODO
+ docinto txt
+ dodoc doc/*.txt doc/README.*
+ docinto sgml
+ dodoc doc/*.sgml
+ docinto txt/contrib
+ dodoc doc/contrib/*
+ docinto txt/dvorak
+ dodoc doc/dvorak/*
+ docinto txt/file-formats
+ dodoc doc/file-formats/*
+ doman doc/man/*.[1-8]
+ else
+ rm -rf ${D}/usr/share ${D}/usr/include ${D}/usr/lib/lib*.{a,la}
+ fi
+}
diff --git a/sys-apps/console-tools/files/digest-console-tools-0.2.3-r4 b/sys-apps/console-tools/files/digest-console-tools-0.2.3-r4
new file mode 100644
index 000000000000..7c2347441144
--- /dev/null
+++ b/sys-apps/console-tools/files/digest-console-tools-0.2.3-r4
@@ -0,0 +1 @@
+MD5 983d4586a791b3fdfa0fbeff76aadf43 console-tools-0.2.3.tar.gz
diff --git a/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild b/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild
index e5fe3e532c77..7f329d74a14c 100644
--- a/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild
+++ b/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/debianutils/debianutils-1.13.3-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
S=${WORKDIR}/${P}
DESCRIPTION="A selection of tools from Debian"
@@ -33,17 +33,21 @@ src_install() {
into /
dobin readlink tempfile mktemp
- if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
+ if [ -z "`use build`" ]
then
dobin run-parts
insopts -m755
exeinto /usr/sbin
doexe savelog
-
- doman mktemp.1 readlink.1 tempfile.1 run-parts.8 savelog.8
-
- cd debian
- dodoc changelog control copyright
+
+ if [ -z "`use bootcd`" ]
+ then
+ into /usr
+ doman mktemp.1 readlink.1 tempfile.1 run-parts.8 savelog.8
+
+ cd debian
+ dodoc changelog control copyright
+ fi
fi
}
diff --git a/sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild b/sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild
new file mode 100644
index 000000000000..b56289dcf528
--- /dev/null
+++ b/sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/e2fsprogs/e2fsprogs-1.22-r1.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/${P}
+DESCRIPTION="Standard ext2 filesystem utilities"
+SRC_URI="ftp://download.sourceforge.net/pub/sourceforge/${PN}/${P}.tar.gz"
+HOMEPAGE="http://e2fsprogs.sourceforge.net/"
+
+DEPEND="virtual/glibc
+ nls? ( sys-devel/gettext )
+ sys-apps/texinfo"
+RDEPEND="virtual/glibc"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ patch -p0 < ${FILESDIR}/e2fsprogs-1.19-po-Makefile.in.in-gentoo.diff
+ cd ${S}/po
+ cp POTFILES.in POTFILES.in.orig
+ sed -e 's/recover\.c/recovery.c/g' POTFILES.in.orig > POTFILES.in
+}
+
+src_compile() {
+
+ local myconf
+ if [ "`use nls`" ]
+ then
+ myconf="--enable-nls"
+ else
+ myconf="--disable-nls"
+ fi
+ try ./configure --host=${CHOST} --prefix=/usr \
+ --mandir=/usr/share/man --infodir=/usr/share/info \
+ --enable-elf-shlibs ${myconf}
+
+ # Parallel make sometimes fails
+ try make
+
+}
+
+src_install() {
+
+ local myopts
+ if [ "$DEBUG" ]
+ then
+ myopts="STRIP=\"echo\""
+ fi
+
+ myopts="${myopts} mandir=/usr/share/man infodir=/usr/share/info"
+
+ try make DESTDIR=${D} ${myopts} install
+ try make DESTDIR=${D} ${myopts} install-libs
+
+ if [ "`use nls`" ]
+ then
+ cd po
+ try make DESTDIR=${D} install
+ fi
+ dodir /sbin
+ mv ${D}/usr/sbin/fsck* ${D}/sbin
+ dodoc COPYING ChangeLog README RELEASE-NOTES SHLIBS
+ docinto e2fsck
+ dodoc e2fsck/ChangeLog e2fsck/CHANGES
+ for i in e2p et ext2fs ss uuid
+ do
+ docinto lib/${i}
+ dodoc lib/${i}/ChangeLog
+ done
+ docinto misc
+ dodoc misc/ChangeLog
+ docinto resize
+ dodoc resize/ChangeLog
+ docinto util
+ dodoc util/ChangeLog
+ if [ "`use bootcd`" ]
+ then
+ rm -rf ${D}/usr/lib/lib*.a
+ rm -rf ${D}/usr/share ${D}/usr/include
+ fi
+}
diff --git a/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild b/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild
index 406bd53bee87..bc4e80de72b2 100644
--- a/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild
+++ b/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild,v 1.1 2001/07/09 21:55:03 drobbins Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/e2fsprogs/e2fsprogs-1.22.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
S=${WORKDIR}/${P}
DESCRIPTION="Standard ext2 filesystem utilities"
@@ -58,23 +58,28 @@ src_install() {
cd po
try make DESTDIR=${D} install
fi
- dodir /sbin
- mv ${D}/usr/sbin/fsck* ${D}/sbin
- dodoc COPYING ChangeLog README RELEASE-NOTES SHLIBS
- docinto e2fsck
- dodoc e2fsck/ChangeLog e2fsck/CHANGES
- for i in e2p et ext2fs ss uuid
- do
- docinto lib/${i}
- dodoc lib/${i}/ChangeLog
- done
- docinto misc
- dodoc misc/ChangeLog
- docinto resize
- dodoc resize/ChangeLog
- docinto util
- dodoc util/ChangeLog
-
+ dodir /sbin
+ mv ${D}/usr/sbin/fsck* ${D}/sbin
+
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc COPYING ChangeLog README RELEASE-NOTES SHLIBS
+ docinto e2fsck
+ dodoc e2fsck/ChangeLog e2fsck/CHANGES
+ for i in e2p et ext2fs ss uuid
+ do
+ docinto lib/${i}
+ dodoc lib/${i}/ChangeLog
+ done
+ docinto misc
+ dodoc misc/ChangeLog
+ docinto resize
+ dodoc resize/ChangeLog
+ docinto util
+ dodoc util/ChangeLog
+ else
+ rm -rf ${D}/usr/lib/lib*.a ${D}/usr/share ${D}/usr/include
+ fi
}
diff --git a/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.22-r1 b/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.22-r1
new file mode 100644
index 000000000000..8f6883ba0290
--- /dev/null
+++ b/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.22-r1
@@ -0,0 +1 @@
+MD5 a2b689fda4e954df0258c2605bc65d9b e2fsprogs-1.22.tar.gz
diff --git a/sys-apps/ed/ed-0.2-r3.ebuild b/sys-apps/ed/ed-0.2-r3.ebuild
new file mode 100644
index 000000000000..ce64a0a7b14e
--- /dev/null
+++ b/sys-apps/ed/ed-0.2-r3.ebuild
@@ -0,0 +1,36 @@
+#!/usr/bin/ebuild
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/ed/ed-0.2-r3.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="Your basic line editor"
+SRC_URI="ftp://gatekeeper.dec.com/pub/GNU/ed/${A}
+ ftp://ftp.gnu.org/pub/gnu/ed/${A}"
+HOMEPAGE="http://www.gnu.org/software/ed/"
+DEPEND="virtual/glibc"
+
+src_unpack() {
+ unpack ${A}
+ cd ${WORKDIR}
+ patch -p0 < ${FILESDIR}/${PF}-gentoo.diff
+}
+
+src_compile() {
+
+ try ./configure --prefix=/ --host=${CHOST}
+ try pmake
+}
+
+src_install() {
+ try make prefix=${D}/ mandir=${D}/usr/share/man/man1 infodir=${D}/usr/share/info \
+ install
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc COPYING ChangeLog NEWS POSIX README THANKS TODO
+ else
+ rm -rf ${D}/usr/share
+ fi
+}
diff --git a/sys-apps/ed/files/ed-0.2-r3-gentoo.diff b/sys-apps/ed/files/ed-0.2-r3-gentoo.diff
new file mode 100644
index 000000000000..f99b00fd7626
--- /dev/null
+++ b/sys-apps/ed/files/ed-0.2-r3-gentoo.diff
@@ -0,0 +1,15 @@
+diff -r -C2 ed-0.2.orig/ed.texinfo ed-0.2/ed.texinfo
+*** ed-0.2.orig/ed.texinfo Sat Nov 19 07:38:01 1994
+--- ed-0.2/ed.texinfo Fri Aug 3 19:03:33 2001
+***************
+*** 8,11 ****
+--- 8,16 ----
+
+ @ifinfo
++
++ @direntry
++ * ed: (ed). line editor.
++ @end direntry
++
+ This file documents the @code{ed} command, which has the purpose of
+ editing text files.
diff --git a/sys-apps/file/file-3.33-r3.ebuild b/sys-apps/file/file-3.33-r3.ebuild
index d3fde78e9cc1..48876dd62a8d 100644
--- a/sys-apps/file/file-3.33-r3.ebuild
+++ b/sys-apps/file/file-3.33-r3.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/file/file-3.33-r3.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/file/file-3.33-r3.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -25,15 +25,13 @@ src_compile() {
}
src_install() {
-
try make DESTDIR=${D} install
if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
then
dodoc LEGAL.NOTICE MAINT README
else
- rm -rf ${D}/usr/share/man
+ rm -rf ${D}/usr/share/man
fi
-
}
diff --git a/sys-apps/fileutils/fileutils-4.1-r2.ebuild b/sys-apps/fileutils/fileutils-4.1-r2.ebuild
index 557cd0b5a91d..0e3605ad8ace 100644
--- a/sys-apps/fileutils/fileutils-4.1-r2.ebuild
+++ b/sys-apps/fileutils/fileutils-4.1-r2.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/fileutils/fileutils-4.1-r2.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/fileutils/fileutils-4.1-r2.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -33,24 +33,19 @@ src_compile() {
src_install() {
- if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
- then
- make prefix=${D}/usr mandir=${D}/usr/share/man infodir=${D}/usr/share/info bindir=${D}/bin install
- cd ${D}
- dodir /usr/bin
- rm -rf usr/lib
- cd usr/bin
- ln -s ../../bin/* .
- cd ${S}
- dodoc COPYING NEWS README* THANKS TODO ChangeLog ChangeLog-1997 AUTHORS
- else
- cd ${S}/src
- into /
- dobin chgrp chown dd dir du ln mkdir mknod rm touch \
- chmod cp df ls mkfifo mv rmdir sync
- newbin ginstall install
- dosym /bin/install /usr/bin/install
- fi
+ make prefix=${D}/usr mandir=${D}/usr/share/man infodir=${D}/usr/share/info bindir=${D}/bin install
+ cd ${D}
+ dodir /usr/bin
+ rm -rf usr/lib
+ cd usr/bin
+ ln -s ../../bin/* .
+ if [ -z "`use bootcd`" ] && [ -z "`use build`" ]
+ then
+ cd ${S}
+ dodoc COPYING NEWS README* THANKS TODO ChangeLog ChangeLog-1997 AUTHORS
+ else
+ rm -rf ${D}/usr/share
+ fi
}
diff --git a/sys-apps/gawk/gawk-3.0.6-r4.ebuild b/sys-apps/gawk/gawk-3.0.6-r4.ebuild
index d8403962703e..0b04ab9d862c 100644
--- a/sys-apps/gawk/gawk-3.0.6-r4.ebuild
+++ b/sys-apps/gawk/gawk-3.0.6-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/gawk/gawk-3.0.6-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/gawk/gawk-3.0.6-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -43,10 +43,7 @@ src_install() {
docinto posix
dodoc posix/ChangeLog
else
- rm -rf ${D}/usr/share/man ${D}/usr/share/info
+ rm -rf ${D}/usr/share
fi
}
-
-
-
diff --git a/sys-apps/grep/grep-2.4.2-r4.ebuild b/sys-apps/grep/grep-2.4.2-r4.ebuild
index 5c788728afab..9e4e3026c20d 100644
--- a/sys-apps/grep/grep-2.4.2-r4.ebuild
+++ b/sys-apps/grep/grep-2.4.2-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Daniel Robbins <drobbins@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/grep/grep-2.4.2-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/grep/grep-2.4.2-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -39,7 +39,7 @@ src_install() {
if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
then
- dodoc AUTHORS COPYING ChangeLog NEWS README THANKS TODO
+ dodoc AUTHORS COPYING ChangeLog NEWS README THANKS TODO
else
rm -rf ${D}/usr/share
fi
diff --git a/sys-apps/modutils/files/digest-modutils-2.4.6-r1 b/sys-apps/modutils/files/digest-modutils-2.4.6-r1
new file mode 100644
index 000000000000..eec66e3ee301
--- /dev/null
+++ b/sys-apps/modutils/files/digest-modutils-2.4.6-r1
@@ -0,0 +1 @@
+MD5 76d17cc4db31d054654cbd48717739c4 modutils-2.4.6.tar.bz2
diff --git a/sys-apps/modutils/modutils-2.4.6-r1.ebuild b/sys-apps/modutils/modutils-2.4.6-r1.ebuild
new file mode 100644
index 000000000000..173833d37c19
--- /dev/null
+++ b/sys-apps/modutils/modutils-2.4.6-r1.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/modutils/modutils-2.4.6-r1.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.bz2
+S=${WORKDIR}/${P}
+DESCRIPTION="Standard kernel module utilities"
+SRC_URI="http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.4/${A}"
+
+DEPEND="virtual/glibc"
+
+src_compile() {
+ try ./configure --prefix=/ --mandir=/usr/share/man --host=${CHOST} --disable-strip
+ try make ${MAKEOPTS}
+}
+
+src_install() {
+ try make prefix=${D} mandir=${D}/usr/share/man install
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc COPYING CREDITS ChangeLog NEWS README TODO
+ else
+ rm -rf ${D}/usr
+ fi
+
+}
diff --git a/sys-apps/net-tools/files/digest-net-tools-1.60-r1 b/sys-apps/net-tools/files/digest-net-tools-1.60-r1
new file mode 100644
index 000000000000..07bfa015d70c
--- /dev/null
+++ b/sys-apps/net-tools/files/digest-net-tools-1.60-r1
@@ -0,0 +1 @@
+MD5 888774accab40217dde927e21979c165 net-tools-1.60.tar.bz2
diff --git a/sys-apps/net-tools/net-tools-1.60-r1.ebuild b/sys-apps/net-tools/net-tools-1.60-r1.ebuild
new file mode 100644
index 000000000000..519636fda281
--- /dev/null
+++ b/sys-apps/net-tools/net-tools-1.60-r1.ebuild
@@ -0,0 +1,57 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/net-tools/net-tools-1.60-r1.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.bz2
+S=${WORKDIR}/${P}
+DESCRIPTION="standard Linux network tools"
+SRC_URI="http://www.tazenda.demon.co.uk/phil/net-tools/${A}"
+HOMEPAGE="http://sites.inka.de/lina/linux/NetTools/"
+
+DEPEND="virtual/glibc
+ sys-devel/gettext"
+RDEPEND="virtual/glibc"
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+ cp ${FILESDIR}/config.h .
+ cp ${FILESDIR}/config.make .
+ cp Makefile Makefile.orig
+ sed -e "s/-O2 -Wall -g/${CFLAGS}/" Makefile.orig > Makefile
+ cd man
+ cp Makefile Makefile.orig
+ sed -e "s:/usr/man:/usr/share/man:" Makefile.orig > Makefile
+
+}
+
+src_compile() {
+
+ try make ${MAKEOPTS}
+ cd po
+ try make ${MAKEOPTS}
+
+}
+
+src_install() {
+
+ try make BASEDIR=${D} install
+ mv ${D}/bin/* ${D}/sbin
+ for i in hostname domainname netstat dnsdomainname ypdomainname nisdomainname
+ do
+ mv ${D}/sbin/${i} ${D}/bin
+ done
+ dosym /bin/hostname /usr/bin/hostname
+
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc COPYING README README.ipv6 TODO
+ else
+ rm -rf ${D}/usr/share
+ fi
+}
+
+
+
diff --git a/sys-apps/netkit-base/files/digest-netkit-base-0.17-r3 b/sys-apps/netkit-base/files/digest-netkit-base-0.17-r3
new file mode 100644
index 000000000000..8f379421bf7a
--- /dev/null
+++ b/sys-apps/netkit-base/files/digest-netkit-base-0.17-r3
@@ -0,0 +1 @@
+MD5 1f0193358e92559ec0f598b09ccbc0ec netkit-base-0.17.tar.gz
diff --git a/sys-apps/netkit-base/netkit-base-0.17-r3.ebuild b/sys-apps/netkit-base/netkit-base-0.17-r3.ebuild
new file mode 100644
index 000000000000..35ae3cad6156
--- /dev/null
+++ b/sys-apps/netkit-base/netkit-base-0.17-r3.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/netkit-base/netkit-base-0.17-r3.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+P=netkit-base-0.17
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="Standard linux net thingees -- inetd, ping"
+SRC_URI="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${A}"
+
+DEPEND="virtual/glibc"
+
+src_compile() {
+
+ try ./configure
+ cp MCONFIG MCONFIG.orig
+ #sed -e "s/-O2/${CFLAGS} -Wstrict-prototypes -fomit-frame-pointer/"
+ sed -e "s:^CFLAGS=.*:CFLAGS=${CFLAGS} -Wall -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline:" \
+ MCONFIG.orig > MCONFIG
+
+ try make ${MAKEOPTS}
+}
+
+
+src_install() {
+ into /
+ dobin ping/ping
+ if [ -z "`use bootcd`" ]
+ then
+ into /usr
+ dosbin inetd/inetd
+ doman inetd/inetd.8 inetd/daemon.3 ping/ping.8
+
+ dodoc BUGS ChangeLog README
+ docinto samples
+ dodoc etc.sample/*
+ fi
+}
+
+
+
diff --git a/sys-apps/parted/files/digest-parted-1.4.14-r2 b/sys-apps/parted/files/digest-parted-1.4.14-r2
new file mode 100644
index 000000000000..3bfb1847bfb1
--- /dev/null
+++ b/sys-apps/parted/files/digest-parted-1.4.14-r2
@@ -0,0 +1 @@
+MD5 d8380734aca46a3bb32da867800d01f9 parted-1.4.14.tar.gz
diff --git a/sys-apps/parted/files/digest-parted-1.4.17 b/sys-apps/parted/files/digest-parted-1.4.17
new file mode 100644
index 000000000000..e1aa5d473d91
--- /dev/null
+++ b/sys-apps/parted/files/digest-parted-1.4.17
@@ -0,0 +1 @@
+MD5 ec35196a50d7d2e5052a986dd1ff149d parted-1.4.17.tar.gz
diff --git a/sys-apps/parted/files/parted-1.4.14-r2-gentoo.diff b/sys-apps/parted/files/parted-1.4.14-r2-gentoo.diff
new file mode 100644
index 000000000000..db4dd1b881ca
--- /dev/null
+++ b/sys-apps/parted/files/parted-1.4.14-r2-gentoo.diff
@@ -0,0 +1,2336 @@
+diff -urP parted-1.4.14.orig/Makefile.am parted-1.4.14/Makefile.am
+--- parted-1.4.14.orig/Makefile.am Sat Apr 7 18:04:37 2001
++++ parted-1.4.14/Makefile.am Wed Aug 1 19:26:25 2001
+@@ -1,4 +1,4 @@
+-SUBDIRS = intl po libparted parted include doc debug
++SUBDIRS = intl po libparted parted include doc debug @PYTHON_SUBDIR@
+
+ EXTRA_DIST = ABOUT-NLS \
+ AUTHORS \
+diff -urP parted-1.4.14.orig/configure.in parted-1.4.14/configure.in
+--- parted-1.4.14.orig/configure.in Wed May 30 06:42:20 2001
++++ parted-1.4.14/configure.in Wed Aug 1 20:22:53 2001
+@@ -65,6 +65,12 @@
+ fi
+ AC_SUBST(PARTED_LDFLAGS)
+
++AC_ARG_WITH(python,
++ [ --with-python build python module],
++ with_python=$withval,
++ with_python=no
++)
++
+ dnl make libc threadsafe (not required for us, but useful other users of
+ dnl libparted)
+ CFLAGS="$CFLAGS -D_REENTRANT"
+@@ -174,6 +180,33 @@
+ LIBS="$OLD_LIBS"
+ fi
+
++dnl Check for python
++if test x$with_python = xyes; then
++ AC_PATH_PROG(PYTHON, python python2.1 python2.0 python1.6 python1.5, no)
++ if test x$PYTHON = xno; then
++ AC_MSG_ERROR(
++Python version 1.5 or higher could not be found which is required for
++the --with-python. Either disable readline support with
++--without-python or downloaded and install it from:
++ http://www.python.org
++ )
++ fi
++ changequote(<<,>>)dnl
++ PYTHON_VERSION=`${PYTHON} -c "import sys; print sys.version[:3]"`
++ PYTHON_PREFIX=`${PYTHON} -c "import sys; print sys.prefix"`
++ PYTHON_EXEC_PREFIX=`${PYTHON} -c "import sys; print sys.exec_prefix"`
++ changequote([,])dnl
++ PYTHON_INCLUDES="-I${PYTHON_PREFIX}/include/python${PYTHON_VERSION} -I${PYTHON_PREFIX}/lib/python${PYTHON_VERSION}/config"
++ pydynmoduledir="${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"
++ PYTHON_SUBDIR=python
++fi
++AC_SUBST(PYTHON_PREFIX)
++AC_SUBST(PYTHON_EXEC_PREFIX)
++AC_SUBST(PYTHON_VERSION)
++AC_SUBST(PYTHON_INCLUDES)
++AC_SUBST(PYTHON_SUBDIR)
++AC_SUBST(pydynmoduledir)
++
+ AC_SUBST(PARTED_LIBS)
+
+ dnl One day, gettext might support libtool...
+@@ -256,7 +289,7 @@
+ LIBS="$OLD_LIBS"
+ fi
+
+-CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch -Werror"
++CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch"
+
+ AC_OUTPUT([
+ Makefile
+@@ -271,6 +304,7 @@
+ libparted/fs_reiserfs/Makefile
+ libparted/fs_ufs/Makefile
+ parted/Makefile
++python/Makefile
+ intl/Makefile
+ doc/Makefile
+ debug/Makefile
+diff -urP parted-1.4.14.orig/python/Makefile.am parted-1.4.14/python/Makefile.am
+--- parted-1.4.14.orig/python/Makefile.am Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/Makefile.am Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,29 @@
++AUTOMAKE_OPTIONS = 1.4 foreign
++
++partedincludedir = -I$(top_srcdir)/include
++INCLUDES = $(partedincludedir) @PYTHON_INCLUDES@ @INTLINCS@
++
++noinst_LTLIBRARIES = libpartedmodule.la
++libpartedmodule_la_SOURCES = partedmodule.c \
++ pydevice.c \
++ pydisk.c \
++ pygeometry.c \
++ pyexception.c \
++ pyfilesystem.c \
++ pyconstraint.c \
++ partedmodule.h \
++ pyconstraint.h \
++ pydevice.h \
++ pydisk.h \
++ pyexception.h \
++ pyfilesystem.h \
++ pygeometry.h
++
++pythondir = $(pydynmoduledir)
++python_PROGRAMS = partedmodule.so
++partedmodule_so_SOURCES =
++partedmodule_so_LDFLAGS = $(top_builddir)/libparted/libparted.la \
++ -shared -Wl,-soname,partedmodule.so
++
++partedmodule.so: $(libpartedmodule_la_OBJECTS)
++ $(LINK) -g -o $@ $^ $(partedmodule_so_LDFLAGS);
+diff -urP parted-1.4.14.orig/python/partedmodule.c parted-1.4.14/python/partedmodule.c
+--- parted-1.4.14.orig/python/partedmodule.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/partedmodule.c Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,334 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include <Python.h>
++
++#include "parted/parted.h"
++
++#include "partedmodule.h"
++#include "pydevice.h"
++#include "pydisk.h"
++#include "pyexception.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++
++/* global error object */
++PyObject *PyPartedError;
++
++/* static global variables */
++static PyObject *PyExceptionHandler;
++static char *py_exception_string = NULL;
++
++/* common functions */
++int
++py_ped_exception_string_check (void)
++{
++ return (py_exception_string != NULL);
++}
++
++
++void
++py_ped_exception_string_clear (void)
++{
++ if (py_exception_string != NULL) {
++ free (py_exception_string);
++ py_exception_string = NULL;
++ }
++}
++
++void
++py_ped_set_error_from_ped_exception (void)
++{
++ if (py_exception_string != NULL) {
++ PyErr_SetString(PyPartedError, py_exception_string);
++ py_ped_exception_string_clear ();
++ return;
++ }
++ PyErr_SetString(PyPartedError, "unknown error occured");
++}
++
++/* toplevel implementation */
++
++static PedExceptionOption
++py_exception_handler (PedException* ex)
++{
++ PyObject * result, * args = NULL;
++ long rc;
++ char * type;
++ char * buf;
++ int len;
++
++ if (py_exception_string != NULL)
++ free (py_exception_string);
++
++ type = ped_exception_get_type_string (ex->type);
++ len = strlen (type) + strlen (ex->message) + 3;
++ buf = malloc (len);
++ snprintf (buf, len, "%s: %s", type, ex->message);
++ py_exception_string = buf;
++
++ if (PyExceptionHandler == NULL) {
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ args = Py_BuildValue("(N)", (PyObject *) py_ped_exception_obj_new (ex));
++
++ result = PyEval_CallObject(PyExceptionHandler, args);
++ Py_XDECREF(args);
++
++ if (result == NULL) {
++ PyErr_Print();
++ PyErr_Clear();
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ if (!PyInt_Check (result)) {
++ fprintf (stderr,
++ "ERROR: python exception handler did not "
++ "return expected int value\n");
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ rc = PyInt_AsLong (result);
++ Py_DECREF (result);
++ return (PedExceptionOption) rc;
++}
++
++static PyObject *
++py_ped_exception_set_handler (PyObject * self, PyObject * args)
++{
++ PyObject *cb;
++
++ /* if we already have a callback, releae it */
++ if (PyExceptionHandler != NULL) {
++ Py_DECREF (PyExceptionHandler);
++ PyExceptionHandler = NULL;
++ }
++
++ if (!PyArg_ParseTuple(args, "O", &cb))
++ return NULL;
++
++ if (!PyCallable_Check (cb)) {
++ PyErr_SetString(PyExc_TypeError, "parameter must be callable");
++ return NULL;
++ }
++ Py_INCREF (cb);
++ PyExceptionHandler = cb;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_get (PyObject * self, PyObject * args)
++{
++ PyPedDevice *d;
++ PedDevice *dev;
++ char *path;
++
++ if (!PyArg_ParseTuple(args, "s", &path))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if ((dev = ped_device_get (path)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ d = (PyPedDevice *) PyObject_NEW(PyObject, &PyPedDeviceType);
++ d->dev = dev;
++ return (PyObject *) d;
++}
++
++static PyObject *
++py_ped_file_system_type_get (PyObject * self, PyObject * args)
++{
++ char *type;
++ PedFileSystemType *fst;
++
++ if (!PyArg_ParseTuple(args, "s", &type)) {
++ return NULL;
++ }
++
++ if ((fst = ped_file_system_type_get (type)) == NULL) {
++ PyErr_SetString(PyPartedError, "unknown file system type");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++}
++
++static PyObject *
++py_ped_file_system_type_get_next (PyObject * self, PyObject * args)
++{
++ PyPedFileSystemTypeObj *pyfst = NULL;
++ PedFileSystemType *fst;
++
++ if (!PyArg_ParseTuple(args, "|O!", &PyPedFileSystemTypeType, &pyfst)) {
++ PyErr_SetString(PyExc_TypeError,
++ "optional parameter must be a "
++ "PedFileSystemType");
++ return NULL;
++ }
++
++ fst = ped_file_system_type_get_next (pyfst ? pyfst->fs_type : NULL);
++ if (fst)
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_flag_next (PyObject *obj, PyObject * args)
++{
++ int flag, next;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ next = ped_partition_flag_next (flag);
++
++ return PyInt_FromLong (next);
++}
++
++static PyObject *
++py_ped_partition_flag_get_by_name (PyObject *obj, PyObject * args)
++{
++ char *name;
++ int flag;
++
++ if (!PyArg_ParseTuple(args, "s", &name))
++ return NULL;
++
++ flag = ped_partition_flag_get_by_name (name);
++
++ return PyInt_FromLong (flag);
++}
++
++static PyObject *
++py_ped_partition_flag_get_name (PyObject *obj, PyObject * args)
++{
++ int flag;
++ const char *name;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ name = ped_partition_flag_get_name (flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyString_FromString (name);
++}
++
++static struct PyMethodDef PyPedModuleMethods[] = {
++ { "device_get",
++ (PyCFunction) py_ped_device_get, METH_VARARGS, NULL },
++ { "exception_set_handler",
++ (PyCFunction) py_ped_exception_set_handler,
++ METH_VARARGS, NULL },
++ { "file_system_type_get",
++ (PyCFunction) py_ped_file_system_type_get,
++ METH_VARARGS, NULL },
++ { "file_system_type_get_next",
++ (PyCFunction) py_ped_file_system_type_get_next,
++ METH_VARARGS, NULL },
++ { "partition_flag_next",
++ (PyCFunction) py_ped_partition_flag_next,
++ METH_VARARGS, NULL },
++ { "partition_flag_get_by_name",
++ (PyCFunction) py_ped_partition_flag_get_by_name,
++ METH_VARARGS, NULL },
++ { "partition_flag_get_name",
++ (PyCFunction) py_ped_partition_flag_get_name,
++ METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++void initparted(void) {
++ PyObject *m, *d, *o;
++
++ if (!ped_init ())
++ Py_FatalError("couldn't initialized parted");
++
++ m = Py_InitModule("parted", PyPedModuleMethods);
++ d = PyModule_GetDict(m);
++
++ /* enum registration */
++#define REGISTER_ENUM(val) \
++ PyDict_SetItemString(d, #val, o=PyInt_FromLong(PED_ ## val)); \
++ Py_DECREF(o);
++
++ REGISTER_ENUM(DEVICE_UNKNOWN);
++ REGISTER_ENUM(DEVICE_SCSI);
++ REGISTER_ENUM(DEVICE_IDE);
++ REGISTER_ENUM(DEVICE_DAC960);
++ REGISTER_ENUM(DEVICE_CPQARRAY);
++
++ REGISTER_ENUM(PARTITION_PRIMARY);
++ REGISTER_ENUM(PARTITION_LOGICAL);
++ REGISTER_ENUM(PARTITION_EXTENDED);
++ REGISTER_ENUM(PARTITION_FREESPACE);
++ REGISTER_ENUM(PARTITION_METADATA);
++
++ REGISTER_ENUM(PARTITION_BOOT);
++ REGISTER_ENUM(PARTITION_ROOT);
++ REGISTER_ENUM(PARTITION_SWAP);
++ REGISTER_ENUM(PARTITION_HIDDEN);
++ REGISTER_ENUM(PARTITION_RAID);
++ REGISTER_ENUM(PARTITION_LVM);
++ REGISTER_ENUM(PARTITION_LBA);
++
++ REGISTER_ENUM(PARTITION_FIRST_FLAG);
++ REGISTER_ENUM(PARTITION_LAST_FLAG);
++
++ REGISTER_ENUM(DISK_TYPE_EXTENDED);
++ REGISTER_ENUM(DISK_TYPE_PARTITION_NAME);
++
++ REGISTER_ENUM(EXCEPTION_INFORMATION);
++ REGISTER_ENUM(EXCEPTION_WARNING);
++ REGISTER_ENUM(EXCEPTION_ERROR);
++ REGISTER_ENUM(EXCEPTION_FATAL);
++ REGISTER_ENUM(EXCEPTION_BUG);
++ REGISTER_ENUM(EXCEPTION_NO_FEATURE);
++
++ REGISTER_ENUM(EXCEPTION_UNHANDLED);
++ REGISTER_ENUM(EXCEPTION_YES);
++ REGISTER_ENUM(EXCEPTION_NO);
++ REGISTER_ENUM(EXCEPTION_OK);
++ REGISTER_ENUM(EXCEPTION_RETRY);
++ REGISTER_ENUM(EXCEPTION_IGNORE);
++ REGISTER_ENUM(EXCEPTION_CANCEL);
++
++ REGISTER_ENUM(EXCEPTION_OK_CANCEL);
++ REGISTER_ENUM(EXCEPTION_YES_NO);
++ REGISTER_ENUM(EXCEPTION_YES_NO_CANCEL);
++ REGISTER_ENUM(EXCEPTION_IGNORE_CANCEL);
++ REGISTER_ENUM(EXCEPTION_RETRY_CANCEL);
++ REGISTER_ENUM(EXCEPTION_RETRY_IGNORE_CANCEL);
++ /* end enum registration */
++
++ /* register the exception handler marhaller function */
++ ped_exception_set_handler (py_exception_handler);
++
++ /* set up our exception class */
++ PyPartedError = PyErr_NewException("parted.error", NULL, NULL);
++ PyDict_SetItemString(d, "error", PyPartedError);
++ Py_DECREF(PyPartedError);
++}
+diff -urP parted-1.4.14.orig/python/partedmodule.h parted-1.4.14/python/partedmodule.h
+--- parted-1.4.14.orig/python/partedmodule.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/partedmodule.h Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,25 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PARTEDMODULE_H_INCLUDED
++#define PARTEDMODULE_H_INCLUDED
++
++#include <Python.h>
++
++extern PyObject *PyPartedError;
++int py_ped_exception_string_check (void);
++void py_ped_exception_string_clear (void);
++extern void py_ped_set_error_from_ped_exception (void);
++
++#endif /* PARTEDMODULE_H_INCLUDED */
+diff -urP parted-1.4.14.orig/python/pyconstraint.c parted-1.4.14/python/pyconstraint.c
+--- parted-1.4.14.orig/python/pyconstraint.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyconstraint.c Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,109 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++*/
++
++#include "partedmodule.h"
++#include "pygeometry.h"
++#include "pyconstraint.h"
++
++static void py_ped_constraint_dealloc (PyPedConstraint * c);
++static PyObject * py_ped_constraint_getattr (PyPedConstraint * c, char * name);
++
++static char PyPedConstraintType__doc__[] = "This is the PartEd constraint "
++ "object";
++PyTypeObject PyPedConstraintType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedConstraint", /* tp_name */
++ sizeof(PyPedConstraint), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_constraint_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_constraint_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedConstraintType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_constraint_duplicate (PyPedConstraint * c,
++ PyObject * args);
++
++static struct PyMethodDef PyPedConstraintMethods[] = {
++ { "duplicate",
++ (PyCFunction) py_ped_constraint_duplicate,
++ METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++static void
++py_ped_constraint_dealloc (PyPedConstraint * c)
++{
++ if (!c->borrowed)
++ ped_constraint_destroy (c->constraint);
++ Py_XDECREF (c->disk);
++ PyMem_DEL(c);
++}
++
++static PyObject *
++py_ped_constraint_duplicate (PyPedConstraint * c, PyObject * args)
++{
++ PedConstraint *cst;
++
++ cst = ped_constraint_duplicate (c->constraint);
++ return (PyObject *) py_ped_constraint_obj_new (cst, c->disk, 0);
++}
++
++static PyObject *
++py_ped_constraint_getattr (PyPedConstraint * c, char * name)
++{
++ if (!strcmp (name, "start_range"))
++ return (PyObject *)
++ py_ped_geometry_obj_new (c->constraint->start_range,
++ c->disk, 1);
++ if (!strcmp (name, "end_range"))
++ return (PyObject *)
++ py_ped_geometry_obj_new (c->constraint->end_range,
++ c->disk, 1);
++ if (!strcmp (name, "min_size"))
++ return (PyObject *)
++ PyLong_FromLongLong (c->constraint->min_size);
++
++ return Py_FindMethod (PyPedConstraintMethods, (PyObject *) c, name);
++}
++
++PyPedConstraint *
++py_ped_constraint_obj_new (PedConstraint *c, PyPedDisk *disk, int borrowed)
++{
++ PyPedConstraint *con;
++
++ con = (PyPedConstraint *) PyObject_NEW(PyObject, &PyPedConstraintType);
++ con->constraint = c;
++ con->borrowed = borrowed;
++ con->disk = disk;
++ Py_INCREF (disk);
++
++ return con;
++}
+diff -urP parted-1.4.14.orig/python/pyconstraint.h parted-1.4.14/python/pyconstraint.h
+--- parted-1.4.14.orig/python/pyconstraint.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyconstraint.h Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,38 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++*/
++
++#ifndef PYCONSTRAINT_H_INCLUDED
++#define PYCONSTRAINT_H_INCLUDED
++
++#include <Python.h>
++#include "parted/constraint.h"
++#include "pydisk.h"
++
++typedef struct _PyPedConstraint PyPedConstraint;
++
++struct _PyPedConstraint {
++ PyObject_HEAD;
++ PedConstraint *constraint;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedConstraintType;
++
++extern PyPedConstraint * py_ped_constraint_obj_new (PedConstraint *c,
++ PyPedDisk *part,
++ int borrowed);
++
++#endif /* PYCONSTRAINT_H_INCLUDED */
+diff -urP parted-1.4.14.orig/python/pydevice.c parted-1.4.14/python/pydevice.c
+--- parted-1.4.14.orig/python/pydevice.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pydevice.c Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,152 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++#include "partedmodule.h"
++#include "pydevice.h"
++#include "pydisk.h"
++
++static void py_ped_device_dealloc (PyPedDevice * s);
++static PyObject * py_ped_device_getattr (PyPedDevice * s, char * name);
++
++static char PyPedDeviceType__doc__[] = "This is the PartEd device object";
++PyTypeObject PyPedDeviceType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedDevice", /* tp_name */
++ sizeof(PyPedDevice), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_device_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_device_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedDeviceType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_device_open (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_device_close (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_device_sync (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_disk_open (PyPedDevice * s, PyObject * args);
++
++static struct PyMethodDef PyPedDeviceMethods[] = {
++ { "open", (PyCFunction) py_ped_device_open, METH_VARARGS, NULL },
++ { "close", (PyCFunction) py_ped_device_close, METH_VARARGS, NULL },
++ { "sync", (PyCFunction) py_ped_device_sync, METH_VARARGS, NULL },
++ { "disk_open", (PyCFunction) py_ped_disk_open, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* device implementation */
++
++PyPedDevice * py_ped_device_new (PedDevice *dev)
++{
++ PyPedDevice *d;
++
++ d = (PyPedDevice *) PyObject_NEW(PyObject, &PyPedDeviceType);
++ d->dev = dev;
++ return d;
++}
++
++static void
++py_ped_device_dealloc (PyPedDevice * s)
++{
++ /* s->dev will be destroyed if ped_device_free_all() is called */
++ /* ped_device_destroy (s->dev); */
++ PyMem_DEL(s);
++}
++
++static PyObject *
++py_ped_device_getattr (PyPedDevice * d, char * name)
++{
++ if (!strcmp (name, "length"))
++ return PyLong_FromLongLong (d->dev->length);
++ else if (!strcmp (name, "model"))
++ return PyString_FromString (d->dev->model);
++ else if (!strcmp (name, "path"))
++ return PyString_FromString (d->dev->path);
++ else if (!strcmp (name, "sector_size"))
++ return PyInt_FromLong (d->dev->sector_size);
++ else if (!strcmp (name, "type"))
++ return PyInt_FromLong (d->dev->type);
++ return Py_FindMethod (PyPedDeviceMethods, (PyObject *) d, name);
++}
++
++static PyObject *
++py_ped_device_open (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_open (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_close (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_close (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_sync (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_sync (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_open (PyPedDevice * self, PyObject * args)
++{
++ PyPedDevice *dev;
++ PyPedDisk *d;
++ PedDisk *disk;
++
++ py_ped_exception_string_clear ();
++ if ((disk = ped_disk_open (self->dev)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ d = (PyPedDisk *) PyObject_NEW(PyObject, &PyPedDiskType);
++ d->disk = disk;
++ return (PyObject *) d;
++}
++
+diff -urP parted-1.4.14.orig/python/pydevice.h parted-1.4.14/python/pydevice.h
+--- parted-1.4.14.orig/python/pydevice.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pydevice.h Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,33 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYDEVICE_H_INCLUDED
++#define PYDEVICE_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/device.h"
++
++extern PyTypeObject PyPedDeviceType;
++typedef struct _PyPedDevice PyPedDevice;
++
++struct _PyPedDevice {
++ PyObject_HEAD;
++ PedDevice *dev;
++};
++
++PyPedDevice * py_ped_device_new (PedDevice *dev);
++
++#endif /* PYDEVICE_H_INCLUDED */
++
+diff -urP parted-1.4.14.orig/python/pydisk.c parted-1.4.14/python/pydisk.c
+--- parted-1.4.14.orig/python/pydisk.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pydisk.c Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,631 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++#include "pydisk.h"
++#include "pydevice.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++
++/* disk python object */
++static void py_ped_disk_dealloc (PyPedDisk * d);
++static PyObject * py_ped_disk_getattr (PyPedDisk * d, char * name);
++
++static char PyPedDiskType__doc__[] = "This is the PartEd disk object";
++PyTypeObject PyPedDiskType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedDisk", /* tp_name */
++ sizeof(PyPedDisk), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_disk_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_disk_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedDiskType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_disk_next_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_write (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_read (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_delete_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_delete_all (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_add_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_get_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_constraint_any (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_geometry_new (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_partition_new (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_minimize_extended_partition (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_maximize_partition (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_is_busy (PyPedDisk * d, PyObject * args);
++
++static struct PyMethodDef PyPedDiskMethods[] = {
++ { "next_partition", (PyCFunction) py_ped_disk_next_partition, METH_VARARGS, NULL },
++ { "read", (PyCFunction) py_ped_disk_read, METH_VARARGS, NULL },
++ { "write", (PyCFunction) py_ped_disk_write, METH_VARARGS, NULL },
++ { "delete_partition", (PyCFunction) py_ped_disk_delete_partition, METH_VARARGS, NULL },
++ { "delete_all", (PyCFunction) py_ped_disk_delete_all, METH_VARARGS, NULL },
++ { "add_partition", (PyCFunction) py_ped_disk_add_partition, METH_VARARGS, NULL },
++ { "get_partition", (PyCFunction) py_ped_disk_get_partition, METH_VARARGS, NULL },
++ { "constraint_any", (PyCFunction) py_ped_constraint_any, METH_VARARGS, NULL },
++ { "geometry_new", (PyCFunction) py_ped_geometry_new, METH_VARARGS, NULL },
++ { "partition_new", (PyCFunction) py_ped_partition_new, METH_VARARGS, NULL },
++ { "minimize_extended_partition", (PyCFunction) py_ped_disk_minimize_extended_partition, METH_VARARGS, NULL },
++ { "maximize_partition", (PyCFunction) py_ped_disk_maximize_partition, METH_VARARGS, NULL },
++ { "is_busy", (PyCFunction) py_ped_disk_is_busy, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* partition python object */
++
++static void py_ped_partition_dealloc (PyPedPartition * p);
++static PyObject * py_ped_partition_getattr (PyPedPartition * p, char * name);
++
++static char PyPedPartitionType__doc__[] = "This is the PartEd partition object";
++PyTypeObject PyPedPartitionType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedPartition", /* tp_name */
++ sizeof(PyPedPartition), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_partition_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_partition_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedPartitionType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_partition_is_flag_available (PyPedPartition *p, PyObject * args);
++static PyObject * py_ped_partition_set_flag (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_get_flag (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_is_active (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_set_system (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_set_name (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_get_name (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_is_busy (PyPedPartition * self, PyObject * args);
++
++static struct PyMethodDef PyPedPartitionMethods[] = {
++ { "is_flag_available", (PyCFunction) py_ped_partition_is_flag_available, METH_VARARGS, NULL },
++ { "get_flag", (PyCFunction) py_ped_partition_get_flag, METH_VARARGS, NULL },
++ { "set_flag", (PyCFunction) py_ped_partition_set_flag, METH_VARARGS, NULL },
++ { "is_active", (PyCFunction) py_ped_partition_is_active, METH_VARARGS, NULL },
++ { "set_system", (PyCFunction) py_ped_partition_set_system, METH_VARARGS, NULL },
++ { "set_name", (PyCFunction) py_ped_partition_set_name, METH_VARARGS, NULL },
++ { "get_name", (PyCFunction) py_ped_partition_get_name, METH_VARARGS, NULL },
++ { "is_busy", (PyCFunction) py_ped_partition_is_busy, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* disk implementation */
++
++static void
++py_ped_disk_dealloc (PyPedDisk * d)
++{
++ ped_disk_close (d->disk);
++ PyMem_DEL(d);
++}
++
++static PyObject *
++py_ped_disk_getattr (PyPedDisk * d, char * name)
++{
++ if (!strcmp (name, "dev"))
++ return (PyObject *) py_ped_device_new (d->disk->dev);
++ if (!strcmp (name, "max_primary_partition_count")) {
++ int num;
++
++ py_ped_exception_string_clear ();
++ num = ped_disk_get_max_primary_partition_count (d->disk);
++ if (num == 0) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ return PyInt_FromLong (num);
++ }
++ if (!strcmp (name, "extended_partition")) {
++ PedPartition *ppart;
++
++ py_ped_exception_string_clear ();
++ ppart = ped_disk_extended_partition (d->disk);
++ if (ppart != NULL)
++ return (PyObject *) py_ped_partition_obj_new (ppart, d, 1);
++
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++
++ return Py_FindMethod (PyPedDiskMethods, (PyObject *) d, name);
++}
++
++static PyObject *
++py_ped_disk_next_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part = NULL;
++ PedPartition *ppart;
++
++ if (!PyArg_ParseTuple(args, "|O!", &PyPedPartitionType, &part)) {
++ PyErr_SetString(PyExc_TypeError,
++ "optional parameter must be a PedPartition");
++ return NULL;
++ }
++
++ ppart = ped_disk_next_partition (d->disk, part ? part->part : NULL);
++ if (ppart != NULL)
++ return (PyObject *) py_ped_partition_obj_new (ppart, d, 1);
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_read (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_write (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_write (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_write (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_delete_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedPartitionType, &part)) {
++ PyErr_SetString(PyExc_TypeError, "PedPartition expected");
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_delete_partition (d->disk, part->part)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ /* the partition structure is freed as part of the
++ delete_partition call. Protect from the double free
++ by marking it borrowed */
++ part->borrowed = 1;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_disk_delete_all (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_delete_all (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_add_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part;
++ PyPedConstraint *constraint;
++
++ if (!PyArg_ParseTuple(args, "O!O!", &PyPedPartitionType, &part,
++ &PyPedConstraintType, &constraint)) {
++ PyErr_SetString(PyExc_TypeError, "bad argument");
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_add_partition (d->disk, part->part,
++ constraint->constraint)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ /* the disk takes ownership of the data in this partition
++ when added, protect from double free */
++ part->borrowed = 1;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_get_partition_by_sector (PyPedDisk * d, PyObject * args)
++{
++ PedPartition *part;
++ PedSector sect;
++
++ if (!PyArg_ParseTuple(args, "L", &sect))
++ return NULL;
++
++ if ((part = ped_disk_get_partition_by_sector (d->disk, sect)) == NULL) {
++ PyErr_SetString(PyPartedError, "partition not found");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_partition_obj_new (part, d, 1);
++}
++
++static PyObject *
++py_ped_disk_get_partition (PyPedDisk * d, PyObject * args)
++{
++ PedPartition *part;
++ int num;
++
++ if (!PyArg_ParseTuple(args, "i", &num))
++ return NULL;
++
++ if ((part = ped_disk_get_partition (d->disk, num)) == NULL) {
++ PyErr_SetString(PyPartedError, "partition not found");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_partition_obj_new (part, d, 1);
++}
++
++static PyObject *
++py_ped_partition_new (PyPedDisk * self, PyObject * args)
++{
++ PyPedFileSystemTypeObj *fs_type;
++ PedSector start, end;
++ PedPartition *part;
++ PedPartitionType type;
++ PyPedPartition *pypart;
++
++ if (!PyArg_ParseTuple(args, "iO!LL",
++ &type,
++ &PyPedFileSystemTypeType, &fs_type,
++ &start, &end)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ part = ped_partition_new (self->disk, type, fs_type->fs_type,
++ start, end);
++ if (part == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pypart = py_ped_partition_obj_new (part, self, 0);
++
++ return (PyObject *) pypart;
++}
++
++static PyObject *
++py_ped_constraint_any (PyPedDisk * self, PyObject * args)
++{
++ PyPedDisk *disk;
++ PedConstraint *constraint;
++ PyPedConstraint *pyconstraint;
++
++ py_ped_exception_string_clear ();
++ constraint = ped_constraint_any (self->disk);
++ if (constraint == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyconstraint = py_ped_constraint_obj_new (constraint, self, 0);
++
++ return (PyObject *) pyconstraint;
++}
++
++static PyObject *
++py_ped_geometry_new (PyPedDisk * self, PyObject * args)
++{
++ PedSector start, length;
++ PedGeometry *geom;
++ PyPedGeometry *pygeom;
++
++ if (!PyArg_ParseTuple(args, "LL", &start, &length)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ geom = ped_geometry_new (self->disk, start, length);
++ if (geom == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pygeom = py_ped_geometry_obj_new (geom, self, 0);
++ pygeom->disk = self;
++ Py_INCREF (self);
++
++ return (PyObject *) pygeom;
++}
++
++static PyObject *
++py_ped_disk_minimize_extended_partition (PyPedDisk * self, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_minimize_extended_partition (self->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++
++}
++
++static PyObject *
++py_ped_disk_maximize_partition (PyPedDisk * self, PyObject * args)
++{
++ PyPedPartition *part;
++ PyPedConstraint *constraint;
++
++ if (!PyArg_ParseTuple(args, "O!O!", &PyPedPartitionType, &part,
++ &PyPedConstraintType, &constraint)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_maximize_partition (self->disk, part->part,
++ constraint->constraint)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_is_busy (PyPedDisk *d, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_disk_is_busy (d->disk);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++/* partition implementation */
++
++PyPedPartition *
++py_ped_partition_obj_new (PedPartition *part, PyPedDisk *disk, int borrowed)
++{
++ PyPedPartition *p;
++
++ p = (PyPedPartition *) PyObject_NEW(PyObject, &PyPedPartitionType);
++ p->part = part;
++ p->borrowed = borrowed;
++ p->disk = disk;
++ Py_INCREF (disk);
++
++ return p;
++}
++
++static void
++py_ped_partition_dealloc (PyPedPartition * p)
++{
++ if (!p->borrowed)
++ ped_partition_destroy (p->part);
++ Py_XDECREF (p->disk);
++ PyMem_DEL(p);
++}
++
++static PyObject *
++py_ped_partition_getattr (PyPedPartition * p, char * name)
++{
++ if (!strcmp (name, "num"))
++ return PyInt_FromLong (p->part->num);
++ if (!strcmp (name, "type"))
++ return PyInt_FromLong (p->part->type);
++ if (!strcmp (name, "type_name"))
++ return PyString_FromString (
++ ped_partition_type_get_name (p->part->type));
++ if (!strcmp (name, "geom"))
++ return (PyObject *) py_ped_geometry_obj_new (&p->part->geom, p->disk, 1);
++ if (!strcmp (name, "fs_type")) {
++ if (p->part->fs_type)
++ return (PyObject *)
++ py_ped_file_system_type_obj_new (p->part->fs_type);
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++ return Py_FindMethod (PyPedPartitionMethods, (PyObject *) p, name);
++}
++
++static PyObject *
++py_ped_partition_is_flag_available (PyPedPartition *p, PyObject * args)
++{
++ int av, flag;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ av = ped_partition_is_flag_available (p->part, flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (av);
++}
++
++static PyObject *
++py_ped_partition_set_flag (PyPedPartition *p, PyObject * args)
++{
++ int flag, state;
++
++ if (!PyArg_ParseTuple(args, "ii", &flag, &state))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_flag (p->part, flag, state)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_get_flag (PyPedPartition *p, PyObject * args)
++{
++ int flag, state;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_get_flag (p->part, flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++
++static PyObject *
++py_ped_partition_is_active (PyPedPartition *p, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_is_active (p->part);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++static PyObject *
++py_ped_partition_set_system (PyPedPartition *p, PyObject * args)
++{
++ PyPedFileSystemTypeObj *fs_type;
++
++ if (!PyArg_ParseTuple(args, "O!",
++ &PyPedFileSystemTypeType, &fs_type))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_system (p->part, fs_type->fs_type)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_partition_set_name (PyPedPartition *p, PyObject * args)
++{
++ char *name;
++
++ if (!PyArg_ParseTuple(args, "s", &name))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_name (p->part, name)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_get_name (PyPedPartition *p, PyObject * args)
++{
++ const char *name;
++
++ py_ped_exception_string_clear ();
++ if ((name = ped_partition_get_name (p->part)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyString_FromString (name);
++}
++
++
++static PyObject *
++py_ped_partition_is_busy (PyPedPartition *p, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_is_busy (p->part);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
+diff -urP parted-1.4.14.orig/python/pydisk.h parted-1.4.14/python/pydisk.h
+--- parted-1.4.14.orig/python/pydisk.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pydisk.h Wed Aug 1 19:26:25 2001
+@@ -0,0 +1,45 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYDISK_H_INCLUDED
++#define PYDISK_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/disk.h"
++
++typedef struct _PyPedDisk PyPedDisk;
++
++struct _PyPedDisk {
++ PyObject_HEAD;
++ PedDisk *disk;
++};
++
++extern PyTypeObject PyPedDiskType;
++
++typedef struct _PyPedPartition PyPedPartition;
++
++struct _PyPedPartition {
++ PyObject_HEAD;
++ PedPartition *part;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedPartitionType;
++
++extern PyPedPartition * py_ped_partition_obj_new (PedPartition *part, PyPedDisk *disk,
++ int borrowed);
++
++#endif /* PYDISK_H_INCLUDED */
+diff -urP parted-1.4.14.orig/python/pyexception.c parted-1.4.14/python/pyexception.c
+--- parted-1.4.14.orig/python/pyexception.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyexception.c Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,78 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "pyexception.h"
++
++static void py_ped_exception_dealloc (PyPedException * s);
++static PyObject * py_ped_exception_getattr (PyPedException * s, char * name);
++
++static char PyPedExceptionType__doc__[] = "This is the PartEd exception object";
++PyTypeObject PyPedExceptionType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedException", /* tp_name */
++ sizeof(PyPedException), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_exception_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_exception_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /*tp_hash*/
++ 0, /*tp_call*/
++ 0, /*tp_str*/
++ 0, /*tp_getattro*/
++ 0, /*tp_setattro*/
++ 0, /*tp_as_buffer*/
++ 0L, /*tp_flags*/
++ PyPedExceptionType__doc__,
++ 0L,0L,0L,0L
++};
++
++
++/* exception implementation */
++
++static void
++py_ped_exception_dealloc (PyPedException * s)
++{
++ PyMem_DEL(s);
++}
++
++static PyObject *
++py_ped_exception_getattr (PyPedException * e, char * name)
++{
++ if (!strcmp (name, "message"))
++ return PyString_FromString (e->ex->message);
++ else if (!strcmp (name, "type"))
++ return PyInt_FromLong (e->ex->type);
++ else if (!strcmp (name, "type_string"))
++ return PyString_FromString (ped_exception_get_type_string (e->ex->type));
++ else if (!strcmp (name, "options"))
++ return PyInt_FromLong (e->ex->options);
++ return NULL;
++}
++
++PyPedException *
++py_ped_exception_obj_new (PedException *ex)
++{
++ PyPedException *e;
++
++ e = (PyPedException *) PyObject_NEW(PyObject, &PyPedExceptionType);
++ e->ex = ex;
++ return e;
++}
+diff -urP parted-1.4.14.orig/python/pyexception.h parted-1.4.14/python/pyexception.h
+--- parted-1.4.14.orig/python/pyexception.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyexception.h Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,35 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYEXCEPTION_H_INCLUDED
++#define PYEXCEPTION_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/exception.h"
++
++extern PyTypeObject PyPedExceptionType;
++
++typedef struct _PyPedException PyPedException;
++
++struct _PyPedException {
++ PyObject_HEAD;
++ PedException *ex;
++};
++
++PyPedException *
++py_ped_exception_obj_new (PedException *ex);
++
++#endif /* PYEXCEPTION_H_INCLUDED */
++
+diff -urP parted-1.4.14.orig/python/pyfilesystem.c parted-1.4.14/python/pyfilesystem.c
+--- parted-1.4.14.orig/python/pyfilesystem.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyfilesystem.c Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,228 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++#include "pygeometry.h"
++
++/* filesystem python object */
++
++static void py_ped_file_system_dealloc (PyPedFileSystem* fs);
++static PyObject * py_ped_file_system_getattr (PyPedFileSystem * fs, char * name);
++
++static char PyPedFileSystemType__doc__[] = "This is the PartEd filesystem object";
++PyTypeObject PyPedFileSystemType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedFileSystem", /* tp_name */
++ sizeof(PyPedFileSystem), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_file_system_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_file_system_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedFileSystemType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_file_system_check (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_copy (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_resize (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_get_resize_constraint (PyPedFileSystem * fs, PyObject * args);
++
++static struct PyMethodDef PyPedFileSystemMethods[] = {
++ { "check", (PyCFunction) py_ped_file_system_check, METH_VARARGS, NULL },
++ { "copy", (PyCFunction) py_ped_file_system_copy, METH_VARARGS, NULL },
++ { "resize", (PyCFunction) py_ped_file_system_resize, METH_VARARGS, NULL },
++ { "get_resize_constraint", (PyCFunction) py_ped_file_system_get_resize_constraint, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++
++/* file system type python object */
++
++static void py_ped_file_system_type_dealloc (PyPedFileSystemTypeObj* fst);
++static PyObject * py_ped_file_system_type_getattr (PyPedFileSystemTypeObj* fst, char * name);
++
++static char PyPedFileSystemTypeType__doc__[] = "This is the PartEd filesystem object";
++PyTypeObject PyPedFileSystemTypeType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedFileSystemType", /* tp_name */
++ sizeof(PyPedFileSystemType), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_file_system_type_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_file_system_type_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedFileSystemTypeType__doc__,
++ 0L,0L,0L,0L
++};
++
++static struct PyMethodDef PyPedFileSystemTypeMethods[] = {
++ { NULL, NULL, 0, NULL }
++};
++
++/*
++ * filesystem implementation
++ */
++
++PyPedFileSystem *
++py_ped_file_system_obj_new (PedFileSystem *filesys,
++ PyPedGeometry *geom)
++{
++ PyPedFileSystem *fs;
++
++ fs = (PyPedFileSystem *) PyObject_NEW(PyObject, &PyPedFileSystemType);
++ fs->fs = filesys;
++ fs->geom = geom;
++ Py_INCREF (geom);
++ return fs;
++}
++
++static void
++py_ped_file_system_dealloc (PyPedFileSystem * fs)
++{
++ ped_file_system_close (fs->fs);
++ Py_XDECREF (fs->geom);
++ PyMem_DEL(fs);
++}
++
++static PyObject *
++py_ped_file_system_getattr (PyPedFileSystem * fs, char * name)
++{
++ if (!strcmp (name, "type"))
++ return PyString_FromString (fs->fs->type->name);
++ if (!strcmp (name, "geom"))
++ return (PyObject *) py_ped_geometry_obj_new (fs->fs->geom, fs->geom->disk, 1);
++ return Py_FindMethod (PyPedFileSystemMethods, (PyObject *) fs, name);
++}
++
++static PyObject *
++py_ped_file_system_check (PyPedFileSystem * fs, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_check (fs->fs)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_copy (PyPedFileSystem * fs, PyObject * args)
++{
++ PyPedGeometry *geom;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedGeometryType, &geom))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_copy (fs->fs, geom->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_resize (PyPedFileSystem * fs, PyObject * args)
++{
++ PyPedGeometry *geom;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedGeometryType, &geom))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_resize (fs->fs, geom->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_get_resize_constraint (PyPedFileSystem * fs, PyObject * args)
++{
++ PedConstraint *constraint;
++
++ py_ped_exception_string_clear ();
++ if ((constraint = ped_file_system_get_resize_constraint (fs->fs)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_constraint_obj_new (constraint, fs->geom->disk, 0);
++}
++
++/*
++ * file system type implementation
++ */
++
++
++PyPedFileSystemTypeObj *
++py_ped_file_system_type_obj_new (const PedFileSystemType *fs_type)
++{
++ PyPedFileSystemTypeObj *fst;
++
++ fst = (PyPedFileSystemTypeObj *) PyObject_NEW(PyObject, &PyPedFileSystemTypeType);
++ fst->fs_type = fs_type;
++ return fst;
++}
++
++static void
++py_ped_file_system_type_dealloc (PyPedFileSystemTypeObj* fst)
++{
++ PyMem_DEL(fst);
++}
++
++static PyObject *
++py_ped_file_system_type_getattr (PyPedFileSystemTypeObj * fst, char * name)
++{
++ if (!strcmp (name, "name"))
++ return PyString_FromString (fst->fs_type->name);
++ return NULL;
++}
+diff -urP parted-1.4.14.orig/python/pyfilesystem.h parted-1.4.14/python/pyfilesystem.h
+--- parted-1.4.14.orig/python/pyfilesystem.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pyfilesystem.h Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,49 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYFILESYSTEM_H_INCLUDED
++#define PYFILESYSTEM_H_INCLUDED
++
++#include <Python.h>
++#include "parted/disk.h"
++#include "pygeometry.h"
++
++typedef struct _PyPedFileSystem PyPedFileSystem;
++
++struct _PyPedFileSystem {
++ PyObject_HEAD;
++ PedFileSystem* fs;
++ PyPedGeometry *geom;
++};
++
++extern PyTypeObject PyPedFileSystemType;
++
++PyPedFileSystem *
++py_ped_file_system_obj_new (PedFileSystem* fs,
++ PyPedGeometry *geom);
++
++typedef struct _PyPedFileSystemTypeObj PyPedFileSystemTypeObj;
++
++struct _PyPedFileSystemTypeObj {
++ PyObject_HEAD;
++ const PedFileSystemType* fs_type;
++};
++
++extern PyTypeObject PyPedFileSystemTypeType;
++
++PyPedFileSystemTypeObj*
++py_ped_file_system_type_obj_new (const PedFileSystemType* fs_type);
++
++#endif /* PYFILESYSTEM_H_INCLUDED */
++
+diff -urP parted-1.4.14.orig/python/pygeometry.c parted-1.4.14/python/pygeometry.c
+--- parted-1.4.14.orig/python/pygeometry.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pygeometry.c Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,245 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++
++static void py_ped_geometry_dealloc (PyPedGeometry * g);
++static PyObject * py_ped_geometry_getattr (PyPedGeometry * g, char * name);
++static int py_ped_geometry_setattr (PyPedGeometry * g, char * name, PyObject *value);
++
++static char PyPedGeometryType__doc__[] = "This is the PartEd geometry object";
++PyTypeObject PyPedGeometryType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedGeometry", /* tp_name */
++ sizeof(PyPedGeometry), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_geometry_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_geometry_getattr, /* tp_getattr */
++ (setattrfunc) py_ped_geometry_setattr, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedGeometryType__doc__,
++ 0L,0L,0L,0L
++};
++
++/* geometry implementation */
++
++PyPedGeometry *
++py_ped_geometry_obj_new (PedGeometry* geom, PyPedDisk *disk, int borrowed)
++{
++ PyPedGeometry *g;
++
++ g = (PyPedGeometry *) PyObject_NEW (PyObject, &PyPedGeometryType);
++ g->geom = geom;
++ g->borrowed = borrowed;
++ g->disk = disk;
++ Py_INCREF (disk);
++ return g;
++}
++
++static void
++py_ped_geometry_dealloc (PyPedGeometry * g)
++{
++ if (!g->borrowed)
++ ped_geometry_destroy (g->geom);
++ Py_XDECREF (g->disk);
++ PyMem_DEL(g);
++}
++
++static PyObject *
++py_ped_file_system_open (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystem *fs;
++ PyPedFileSystem *pyfs;
++
++ py_ped_exception_string_clear ();
++ if ((fs = ped_file_system_open (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyfs = py_ped_file_system_obj_new (fs, self);
++ return (PyObject *) pyfs;
++}
++
++static PyObject *
++py_ped_file_system_probe (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystemType *fst;
++
++ py_ped_exception_string_clear ();
++ if ((fst = ped_file_system_probe (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++}
++
++static PyObject *
++py_ped_file_system_create (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystem *fs;
++ PyPedFileSystemTypeObj *fs_type;
++ PyPedFileSystem *pyfs;
++
++ if (!PyArg_ParseTuple(args, "O!",
++ &PyPedFileSystemTypeType, &fs_type))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if ((fs = ped_file_system_create (self->geom, fs_type->fs_type)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyfs = py_ped_file_system_obj_new (fs, self);
++ return (PyObject *) pyfs;
++}
++
++
++static PyObject *
++py_ped_file_system_clobber (PyPedGeometry * self, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_clobber (self->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_geometry_set_end (PyPedGeometry * self, PyObject * args)
++{
++ PedSector end;
++
++ if (!PyArg_ParseTuple(args, "L", &end))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_geometry_set_end (self->geom, end)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_geometry_set_start (PyPedGeometry * self, PyObject * args)
++{
++ PedSector start;
++
++ if (!PyArg_ParseTuple(args, "L", &start))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_geometry_set_start (self->geom, start)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_geometry_duplicate (PyPedGeometry * self, PyObject * args)
++{
++ PedGeometry *geom;
++
++ py_ped_exception_string_clear ();
++ if ((geom = ped_geometry_duplicate (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_geometry_obj_new (geom, self->disk, 0);
++}
++
++static struct PyMethodDef PyPedGeometryMethods[] = {
++ { "file_system_open",
++ (PyCFunction) py_ped_file_system_open, METH_VARARGS, NULL },
++ { "file_system_probe",
++ (PyCFunction) py_ped_file_system_probe, METH_VARARGS, NULL },
++ { "file_system_create",
++ (PyCFunction) py_ped_file_system_create, METH_VARARGS, NULL },
++ { "file_system_clobber",
++ (PyCFunction) py_ped_file_system_clobber, METH_VARARGS, NULL },
++ { "set_start",
++ (PyCFunction) py_ped_geometry_set_start, METH_VARARGS, NULL },
++ { "set_end",
++ (PyCFunction) py_ped_geometry_set_end, METH_VARARGS, NULL },
++ { "duplicate",
++ (PyCFunction) py_ped_geometry_duplicate, METH_VARARGS, NULL },
++
++ { NULL, NULL, 0, NULL }
++};
++
++static PyObject *
++py_ped_geometry_getattr (PyPedGeometry * g, char * name)
++{
++
++#define RETURN_GEOM_VALUE(var) \
++ if (!strcmp (name, #var)) \
++ return PyLong_FromLongLong (g->geom->var)
++
++ RETURN_GEOM_VALUE(start);
++ RETURN_GEOM_VALUE(end);
++ RETURN_GEOM_VALUE(length);
++
++ return Py_FindMethod (PyPedGeometryMethods, (PyObject *) g, name);
++}
++
++static int
++py_ped_geometry_setattr (PyPedGeometry * g, char * name, PyObject *value)
++{
++#define SET_GEOM_VALUE(var) \
++ if (!strcmp (name, #var)) { \
++ if (!PyLong_Check (value)) { \
++ PyErr_SetString(PyExc_TypeError, \
++ "expected long long"); \
++ return -1; \
++ } \
++ g->geom->var = PyLong_AsLongLong (value); \
++ return 0; \
++ }
++ SET_GEOM_VALUE(start);
++ SET_GEOM_VALUE(end);
++ SET_GEOM_VALUE(length);
++
++ PyErr_SetString( PyExc_AttributeError, "unknown attribute" );
++ return -1;
++}
++
++
+diff -urP parted-1.4.14.orig/python/pygeometry.h parted-1.4.14/python/pygeometry.h
+--- parted-1.4.14.orig/python/pygeometry.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/pygeometry.h Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,37 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYGEOMETRY_H_INCLUDED
++#define PYGEOMETRY_H_INCLUDED
++
++#include <Python.h>
++
++#include "pydisk.h"
++
++typedef struct _PyPedGeometry PyPedGeometry;
++
++struct _PyPedGeometry {
++ PyObject_HEAD;
++ PedGeometry* geom;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedGeometryType;
++
++PyPedGeometry *
++py_ped_geometry_obj_new (PedGeometry* geom, PyPedDisk *disk, int borrowed);
++
++#endif /* PYGEOMETRY_H_INCLUDED */
++
+diff -urP parted-1.4.14.orig/python/test.py parted-1.4.14/python/test.py
+--- parted-1.4.14.orig/python/test.py Wed Dec 31 19:00:00 1969
++++ parted-1.4.14/python/test.py Wed Aug 1 19:26:26 2001
+@@ -0,0 +1,128 @@
++#!/usr/bin/env python
++
++import sys
++for dir in ('.', ''):
++ try:
++ sys.path.remove(dir)
++ except ValueError:
++ pass
++sys.path = [ ".libs" ] + sys.path
++
++import parted
++
++def get_flags (part):
++ string=""
++ if not part.is_active ():
++ return string
++ first=1
++ flag = parted.partition_flag_next (0)
++ while flag:
++ if part.get_flag (flag):
++ string = string + parted.partition_flag_get_name (flag)
++ if first:
++ first = 0
++ else:
++ string = string + ", "
++ flag = parted.partition_flag_next (flag)
++ return string
++
++def do_print (disk):
++ goodparts = { parted.PARTITION_PRIMARY : None,
++ parted.PARTITION_EXTENDED : None,
++ parted.PARTITION_LOGICAL : None,
++ parted.PARTITION_FREESPACE : None }
++
++ print ("%s: %s length %ld, maximum "
++ "primary partitions: %d" % (disk.dev.path, disk.dev.model,
++ disk.dev.length, disk.max_primary_partition_count))
++
++ part = disk.next_partition()
++ if part:
++ print "Device Type Filesystem Start End Length Flags"
++ print "------ ---- ---------- ----- --- ------ -----"
++ while part:
++ if goodparts.has_key(part.type):
++ device = ""
++ fs_type_name = ""
++ if part.num > 0:
++ device = "%s%d" % (disk.dev.path,
++ part.num)
++ if part.fs_type:
++ fs_type_name = part.fs_type.name
++ flags = get_flags (part)
++ print ("%-9s %-12s %-12s %-10ld %-10ld %-10ld %7s"
++ % (device, part.type_name, fs_type_name,
++ part.geom.start, part.geom.end, part.geom.length,
++ flags))
++ part = disk.next_partition(part)
++ print
++
++def exception_handler(exception):
++ print "%s: %s" % (exception.type_string, exception.message)
++ return parted.EXCEPTION_UNHANDLED
++
++parted.exception_set_handler (exception_handler)
++dev = parted.device_get ('/tmp/fstest')
++disk = dev.disk_open ()
++
++do_print (disk)
++part = disk.get_partition (0)
++fst = part.geom.file_system_probe ()
++print "%s filesystem probed on device %s%d" % (fst.name,
++ disk.dev.path,
++ part.num)
++
++fs = part.geom.file_system_open ()
++fs.check()
++const = fs.get_resize_constraint()
++print "minimum size for this filesystem is %d sectors" % const.min_size
++print "start range from %d to %d" % (const.start_range.start, const.start_range.end)
++print "end range from %d to %d" % (const.end_range.start, const.end_range.end)
++
++new_end = fs.geom.duplicate()
++#new_end.set_end (const.min_size + 512)
++new_end.set_end (const.end_range.end)
++fs.resize (new_end)
++
++def foo():
++ disk.delete_all ()
++ do_print (disk)
++
++ fs_type = parted.file_system_type_get ("ext2")
++
++ sections = disk.dev.length / 4
++
++ # add a partition
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 0L, sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # add another...
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, sections, 2 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # another
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 2 * sections, 3 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # another...
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 3 * sections, 4 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ disk.write()
++
diff --git a/sys-apps/parted/files/parted-1.4.17-gentoo.diff b/sys-apps/parted/files/parted-1.4.17-gentoo.diff
new file mode 100644
index 000000000000..fbf2d17e4d22
--- /dev/null
+++ b/sys-apps/parted/files/parted-1.4.17-gentoo.diff
@@ -0,0 +1,13318 @@
+diff -urN parted-1.4.17.orig/ABOUT-NLS parted-1.4.17/ABOUT-NLS
+--- parted-1.4.17.orig/ABOUT-NLS Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/ABOUT-NLS Thu Aug 2 14:26:15 2001
+@@ -8,7 +8,7 @@
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+ assume that the distributed package does use GNU `gettext' internally,
+-itself available at your nearest GNU archive site. But you do *not*
++itself available at your nearest GNU archive site. But you do _not_
+ need to install GNU `gettext' prior to configuring, installing or using
+ this package with messages translated.
+
+@@ -22,8 +22,8 @@
+ `gettext' which is used. The information can be found in the
+ `intl/VERSION' file, in internationalized packages.
+
+-One advise in advance
+-=====================
++Quick configuration advice
++==========================
+
+ If you want to exploit the full power of internationalization, you
+ should configure it using
+@@ -34,13 +34,14 @@
+ package, despite the existence of internationalizing capabilities in the
+ operating system where this package is being installed. So far, only
+ the `gettext' implementation in the GNU C library version 2 provides as
+-many features (such as locale alias or message inheritance) as the
+-implementation here. It is also not possible to offer this additional
+-functionality on top of a `catgets' implementation. Future versions of
+-GNU `gettext' will very likely convey even more functionality. So it
+-might be a good idea to change to GNU `gettext' as soon as possible.
++many features (such as locale alias, message inheritance, automatic
++charset conversion or plural form handling) as the implementation here.
++It is also not possible to offer this additional functionality on top
++of a `catgets' implementation. Future versions of GNU `gettext' will
++very likely convey even more functionality. So it might be a good idea
++to change to GNU `gettext' as soon as possible.
+
+- So you need not provide this option if you are using GNU libc 2 or
++ So you need _not_ provide this option if you are using GNU libc 2 or
+ you have installed a recent copy of the GNU gettext package with the
+ included `libintl'.
+
+@@ -53,23 +54,20 @@
+ ways to internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+-messages. It will automatically detect whether the system provides
+-usable `catgets' (if using this is selected by the installer) or
+-`gettext' functions. If neither is available, the GNU `gettext' own
++messages. It will automatically detect whether the system already
++provides the GNU `gettext' functions. If not, the GNU `gettext' own
+ library will be used. This library is wholly contained within this
+ package, usually in the `intl/' subdirectory, so prior installation of
+-the GNU `gettext' package is *not* required. Installers may use
++the GNU `gettext' package is _not_ required. Installers may use
+ special options at configuration time for changing the default
+ behaviour. The commands:
+
+ ./configure --with-included-gettext
+- ./configure --with-catgets
+ ./configure --disable-nls
+
+-will respectively bypass any pre-existing `catgets' or `gettext' to use
+-the internationalizing routines provided within this package, enable
+-the use of the `catgets' functions (if found on the locale system), or
+-else, *totally* disable translation of messages.
++will respectively bypass any pre-existing `gettext' to use the
++internationalizing routines provided within this package, or else,
++_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+ configure without an option for your new package, `configure' will
+@@ -83,18 +81,10 @@
+
+ to prevent auto-detection.
+
+- By default the configuration process will not test for the `catgets'
+-function and therefore they will not be used. The reasons are already
+-given above: the emulation on top of `catgets' cannot provide all the
+-extensions provided by the GNU `gettext' library. If you nevertheless
+-want to use the `catgets' functions use
+-
+- ./configure --with-catgets
+-
+-to enable the test for `catgets' (this causes no harm if `catgets' is
+-not available on your system). If you really select this option we
+-would like to hear about the reasons because we cannot think of any
+-good one ourself.
++ The configuration process will not test for the `catgets' function
++and therefore it will not be used. The reason is that even an
++emulation of `gettext' on top of `catgets' could not provide all the
++extensions of the GNU `gettext' library.
+
+ Internationalized packages have usually many `po/LL.po' files, where
+ LL gives an ISO 639 two-letter code identifying the language. Unless
+@@ -110,22 +100,35 @@
+
+ As a user, if your language has been installed for this package, you
+ only have to set the `LANG' environment variable to the appropriate
+-ISO 639 `LL' two-letter code prior to using the programs in the
+-package. For example, let's suppose that you speak German. At the
+-shell prompt, merely execute `setenv LANG de' (in `csh'),
+-`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This
+-can be done from your `.login' or `.profile' file, once and for all.
+-
+- An operating system might already offer message localization for
+-many of its programs, while other programs have been installed locally
+-with the full capabilities of GNU `gettext'. Just using `gettext'
+-extended syntax for `LANG' would break proper localization of already
+-available operating system programs. In this case, users should set
+-both `LANGUAGE' and `LANG' variables in their environment, as programs
+-using GNU `gettext' give preference to `LANGUAGE'. For example, some
+-Swedish users would rather read translations in German than English for
+-when Swedish is not available. This is easily accomplished by setting
+-`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
++`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
++and `CC' is an ISO 3166 two-letter country code. For example, let's
++suppose that you speak German and live in Germany. At the shell
++prompt, merely execute `setenv LANG de_DE' (in `csh'),
++`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
++This can be done from your `.login' or `.profile' file, once and for
++all.
++
++ You might think that the country code specification is redundant.
++But in fact, some languages have dialects in different countries. For
++example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
++country code serves to distinguish the dialects.
++
++ Not all programs have translations for all languages. By default, an
++English message is shown in place of a nonexistent translation. If you
++understand other languages, you can set up a priority list of languages.
++This is done through a different environment variable, called
++`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
++for the purpose of message handling, but you still need to have `LANG'
++set to the primary language; this is required by other parts of the
++system libraries. For example, some Swedish users who would rather
++read translations in German than English for when Swedish is not
++available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
++
++ In the `LANGUAGE' environment variable, but not in the `LANG'
++environment variable, `LL_CC' combinations can be abbreviated as `LL'
++to denote the language's main dialect. For example, `de' is equivalent
++to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
++(Portuguese as spoken in Portugal) in this context.
+
+ Translating Teams
+ =================
+@@ -133,33 +136,21 @@
+ For the Free Translation Project to be a success, we need interested
+ people who like their own language and write it well, and who are also
+ able to synergize with other translators speaking the same language.
+-Each translation team has its own mailing list, courtesy of Linux
+-International. You may reach your translation team at the address
+-`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+-language. Language codes are *not* the same as the country codes given
+-in ISO 3166. The following translation teams exist, as of December
+-1997:
+-
+- Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+- Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+- `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+- Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+- `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+- Swedish `sv', and Turkish `tr'.
++Each translation team has its own mailing list. The up-to-date list of
++teams can be found at the Free Translation Project's homepage,
++`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
++area.
+
+-For example, you may reach the Chinese translation team by writing to
+-`zh@li.org'.
+-
+- If you'd like to volunteer to *work* at translating messages, you
++ If you'd like to volunteer to _work_ at translating messages, you
+ should become a member of the translating team for your own language.
+-The subscribing address is *not* the same as the list itself, it has
++The subscribing address is _not_ the same as the list itself, it has
+ `-request' appended. For example, speakers of Swedish can send a
+ message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+-*actively* in translations, or at solving translational difficulties,
++_actively_ in translations, or at solving translational difficulties,
+ rather than merely lurking around. If your team does not exist yet and
+ you want to start one, or if you are unsure about what to do or how to
+ get started, please write to `translation@iro.umontreal.ca' to reach the
+@@ -173,42 +164,124 @@
+ ==================
+
+ Languages are not equally supported in all packages. The following
+-matrix shows the current state of internationalization, as of December
+-1997. The matrix shows, in regard of each package, for which languages
+-PO files have been submitted to translation coordination.
+-
+- Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+- .----------------------------------------------------.
+- bash | [] [] [] | 3
+- bison | [] [] [] | 3
+- clisp | [] [] [] [] | 4
+- cpio | [] [] [] [] [] [] | 6
+- diffutils | [] [] [] [] [] | 5
+- enscript | [] [] [] [] [] [] | 6
+- fileutils | [] [] [] [] [] [] [] [] [] [] | 10
+- findutils | [] [] [] [] [] [] [] [] [] | 9
+- flex | [] [] [] [] | 4
+- gcal | [] [] [] [] [] | 5
+- gettext | [] [] [] [] [] [] [] [] [] [] [] | 12
+- grep | [] [] [] [] [] [] [] [] [] [] | 10
+- hello | [] [] [] [] [] [] [] [] [] [] [] | 11
+- id-utils | [] [] [] | 3
+- indent | [] [] [] [] [] | 5
+- libc | [] [] [] [] [] [] [] | 7
+- m4 | [] [] [] [] [] [] | 6
+- make | [] [] [] [] [] [] | 6
+- music | [] [] | 2
+- ptx | [] [] [] [] [] [] [] [] | 8
+- recode | [] [] [] [] [] [] [] [] [] | 9
+- sh-utils | [] [] [] [] [] [] [] [] | 8
+- sharutils | [] [] [] [] [] [] | 6
+- tar | [] [] [] [] [] [] [] [] [] [] [] | 11
+- texinfo | [] [] [] | 3
+- textutils | [] [] [] [] [] [] [] [] [] | 9
+- wdiff | [] [] [] [] [] [] [] [] | 8
+- `----------------------------------------------------'
+- 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+- 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179
++matrix shows the current state of internationalization, as of July
++2001. The matrix shows, in regard of each package, for which languages
++PO files have been submitted to translation coordination, with a
++translation percentage of at least 50%.
++
++ Ready PO files bg cs da de el en eo es et fi fr gl he hr id it
++ +-------------------------------------------------+
++ a2ps | [] [] |
++ bash | [] [] [] [] |
++ bfd | |
++ binutils | |
++ bison | [] [] [] [] |
++ clisp | [] [] [] [] |
++ cpio | [] [] [] [] [] |
++ diffutils | [] [] [] [] [] [] [] |
++ enscript | [] [] |
++ error | [] [] |
++ fetchmail | |
++ fileutils | [] [] [] [] [] [] [] |
++ findutils | [] [] [] [] [] [] [] [] |
++ flex | [] [] [] |
++ freetype | |
++ gas | |
++ gawk | [] |
++ gcal | |
++ gcc | |
++ gettext | [] [] [] [] [] [] [] [] [] |
++ gnupg | [] [] [] [] [] [] |
++ gprof | |
++ grep | [] [] [] [] [] [] [] |
++ hello | [] [] [] [] [] [] [] [] [] [] |
++ id-utils | [] [] [] |
++ indent | [] [] [] [] [] |
++ jpilot | [] |
++ kbd | |
++ ld | |
++ libc | [] [] [] [] [] [] [] [] |
++ lilypond | |
++ lynx | [] [] [] |
++ m4 | [] [] [] [] [] [] [] |
++ make | [] [] [] [] [] |
++ nano | [] [] |
++ opcodes | |
++ parted | [] [] |
++ ptx | [] [] [] [] [] [] [] |
++ python | |
++ recode | [] [] [] [] [] [] [] [] [] |
++ sed | [] [] [] [] [] [] [] [] [] [] |
++ sh-utils | [] [] [] [] [] [] [] [] [] |
++ sharutils | [] [] [] [] [] [] [] |
++ soundtracker | [] |
++ sp | |
++ tar | [] [] [] [] [] [] [] [] |
++ texinfo | [] [] [] [] [] |
++ textutils | [] [] [] [] [] [] [] |
++ util-linux | [] [] |
++ wdiff | [] [] |
++ wget | [] [] [] [] [] [] [] [] [] |
++ +-------------------------------------------------+
++ bg cs da de el en eo es et fi fr gl he hr id it
++ 0 13 23 30 11 1 8 21 13 1 29 22 3 0 8 10
++
++ ja ko lv nl no pl pt pt_BR ru sk sl sv tr uk zh
++ +-------------------------------------------------+
++ a2ps | [] [] [] | 5
++ bash | | 4
++ bfd | | 0
++ binutils | | 0
++ bison | [] [] [] | 7
++ clisp | [] | 5
++ cpio | [] [] [] [] [] | 10
++ diffutils | [] [] [] | 10
++ enscript | [] [] [] | 5
++ error | [] | 3
++ fetchmail | | 0
++ fileutils | [] [] [] [] [] [] [] [] [] [] | 17
++ findutils | [] [] [] [] [] [] [] [] | 16
++ flex | [] [] [] | 6
++ freetype | | 0
++ gas | | 0
++ gawk | [] | 2
++ gcal | | 0
++ gcc | | 0
++ gettext | [] [] [] [] [] [] [] [] [] | 18
++ gnupg | [] [] [] [] | 10
++ gprof | | 0
++ grep | [] [] [] | 10
++ hello | [] [] [] [] [] [] [] [] [] [] [] | 21
++ id-utils | [] [] [] | 6
++ indent | [] [] [] [] [] [] [] | 12
++ jpilot | | 1
++ kbd | [] | 1
++ ld | | 0
++ libc | [] [] [] [] [] [] [] [] [] | 17
++ lilypond | [] [] | 2
++ lynx | [] [] [] [] [] | 8
++ m4 | [] [] [] [] [] | 12
++ make | [] [] [] [] [] [] [] | 12
++ nano | [] | 3
++ opcodes | | 0
++ parted | [] [] [] | 5
++ ptx | [] [] [] [] [] [] [] | 14
++ python | | 0
++ recode | [] [] [] [] | 13
++ sed | [] [] [] [] [] [] [] [] | 18
++ sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 20
++ sharutils | [] [] [] [] | 11
++ soundtracker | | 1
++ sp | | 0
++ tar | [] [] [] [] [] [] [] [] [] | 17
++ texinfo | [] [] | 7
++ textutils | [] [] [] [] [] [] [] [] | 15
++ util-linux | [] [] | 4
++ wdiff | [] [] [] | 5
++ wget | [] [] [] [] [] [] [] | 16
++ +-------------------------------------------------+
++ 31 teams ja ko lv nl no pl pt pt_BR ru sk sl sv tr uk zh
++ 51 domains 17 9 1 23 6 17 1 13 26 9 11 20 19 2 2 369
+
+ Some counters in the preceding matrix are higher than the number of
+ visible blocks let us expect. This is because a few extra PO files are
+@@ -221,6 +294,26 @@
+ lag between the mere existence a PO file and its wide availability in a
+ distribution.
+
+- If December 1997 seems to be old, you may fetch a more recent copy
+-of this `ABOUT-NLS' file on most GNU archive sites.
++ If July 2001 seems to be old, you may fetch a more recent copy of
++this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
++matrix with full percentage details can be found at
++`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
++
++Using `gettext' in new packages
++===============================
++
++ If you are writing a freely available program and want to
++internationalize it you are welcome to use GNU `gettext' in your
++package. Of course the GNU General Public License applies to your
++sources from then on if you include `gettext' directly in your
++distribution but since you are writing free software anyway this is no
++restriction.
++
++ Once the sources are changed appropriately and the setup can handle
++to use of `gettext' the only thing missing are the translations. The
++Free Translation Project is also available for packages which are not
++developed inside the GNU project. Therefore the information given above
++applies also for every other Free Software Project. Contact
++`translation@iro.umontreal.ca' to make the `.pot' files available to
++the translation teams.
+
+diff -urN parted-1.4.17.orig/Makefile.am parted-1.4.17/Makefile.am
+--- parted-1.4.17.orig/Makefile.am Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/Makefile.am Thu Aug 2 14:28:17 2001
+@@ -1,7 +1,7 @@
+-SUBDIRS = intl po libparted parted include doc debug
++SUBDIRS = intl libparted parted po include doc debug @PYTHON_SUBDIR@
++DIST_SUBDIRS = intl libparted parted po include doc debug python
+
+-EXTRA_DIST = ABOUT-NLS \
+- AUTHORS \
++EXTRA_DIST = AUTHORS \
+ BUGS \
+ COPYING \
+ THANKS \
+diff -urN parted-1.4.17.orig/config.guess parted-1.4.17/config.guess
+--- parted-1.4.17.orig/config.guess Fri Jul 13 22:37:35 2001
++++ parted-1.4.17/config.guess Thu Aug 2 14:32:32 2001
+@@ -3,7 +3,7 @@
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ # Free Software Foundation, Inc.
+
+-timestamp='2001-07-12'
++timestamp='2001-04-20'
+
+ # 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
+@@ -52,7 +52,7 @@
+ GNU config.guess ($timestamp)
+
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
++Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
+ Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+@@ -95,25 +95,25 @@
+ # 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 ;
++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 ;
++ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
+ if test $? = 0 ; then
+- CC_FOR_BUILD="$c"; break ;
+- fi ;
+- done ;
+- rm -f $dummy.c $dummy.o $dummy.rel ;
++ 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 ;
++ 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)
++# (ghazi@noc.rutgers.edu 8/24/94.)
+ if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+ fi
+@@ -150,7 +150,6 @@
+ # 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)
+- eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+@@ -205,7 +204,6 @@
+ 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
+@@ -408,7 +406,6 @@
+ exit (-1);
+ }
+ EOF
+- eval $set_cc_for_build
+ $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
+@@ -489,7 +486,6 @@
+ exit(0);
+ }
+ EOF
+- eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo rs6000-ibm-aix3.2.5
+@@ -590,7 +586,6 @@
+ exit (0);
+ }
+ EOF
+- eval $set_cc_for_build
+ (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
+@@ -628,7 +623,6 @@
+ exit (0);
+ }
+ EOF
+- eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo unknown-hitachi-hiuxwe2
+@@ -639,7 +633,7 @@
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
++ *9??*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+@@ -683,13 +677,12 @@
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ echo ymp-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+- -e 's/\.[^.]*$/.X/'
++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+@@ -770,26 +763,97 @@
+ 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
++ cat >$dummy.c <<EOF
++#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 __MIPSEB__
++ printf ("%s-unknown-linux-gnu\n", argv[1]);
++#endif
++#ifdef __MIPSEL__
++ printf ("%sel-unknown-linux-gnu\n", argv[1]);
++#endif
++ return 0;
++}
++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
+ ;;
+ ppc:Linux:*:*)
+- echo powerpc-unknown-linux-gnu
++ # Determine Lib Version
++ cat >$dummy.c <<EOF
++#include <features.h>
++#if defined(__GLIBC__)
++extern char __libc_version[];
++extern char __libc_release[];
++#endif
++main(argc, argv)
++ int argc;
++ char *argv[];
++{
++#if defined(__GLIBC__)
++ printf("%s %s\n", __libc_version, __libc_release);
++#else
++ printf("unknown\n");
++#endif
++ return 0;
++}
++EOF
++ LIBC=""
++ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
++ if test "$?" = 0 ; then
++ ./$dummy | grep 1\.99 > /dev/null
++ if test "$?" = 0 ; then LIBC="libc1" ; fi
++ fi
++ rm -f $dummy.c $dummy
++ echo powerpc-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ alpha:Linux:*:*)
+- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+- EV5) UNAME_MACHINE=alphaev5 ;;
+- EV56) UNAME_MACHINE=alphaev56 ;;
+- PCA56) UNAME_MACHINE=alphapca56 ;;
+- PCA57) UNAME_MACHINE=alphapca56 ;;
+- EV6) UNAME_MACHINE=alphaev6 ;;
+- EV67) UNAME_MACHINE=alphaev67 ;;
+- EV68*) UNAME_MACHINE=alphaev67 ;;
+- esac
+- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
++ 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
++ LIBC=""
++ $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" ;;
++ esac
++ objdump --private-headers $dummy | \
++ grep ld.so.1 > /dev/null
++ if test "$?" = 0 ; then
++ LIBC="libc1"
++ fi
++ fi
++ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+@@ -819,27 +883,38 @@
+ # 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 \
+- | sed -ne '/supported targets:/!d
++ ld_supported_emulations=`cd /; ld --help 2>&1 \
++ | sed -ne '/supported emulations:/!d
+ s/[ ][ ]*/ /g
+- s/.*supported targets: *//
++ s/.*supported emulations: *//
+ s/ .*//
+ p'`
+- case "$ld_supported_targets" in
+- elf32-i386)
++ case "$ld_supported_emulations" in
++ i*86linux)
++ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
++ exit 0
++ ;;
++ elf_i*86)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+- a.out-i386-linux)
+- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+- exit 0 ;;
+- coff-i386)
++ i*86coff)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+- exit 0 ;;
+- "")
+- # Either a pre-BFD a.out linker (linux-gnuoldld) or
+- # one that does not give us useful --help.
+- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+- exit 0 ;;
++ exit 0
++ ;;
++ esac
++ # Either a pre-BFD a.out linker (linux-gnuoldld)
++ # or one that does not give us useful --help.
++ # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
++ # If ld does not provide *any* "supported emulations:"
++ # that means it is gnuoldld.
++ test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
++ case "${UNAME_MACHINE}" in
++ i*86)
++ VENDOR=pc;
++ ;;
++ *)
++ VENDOR=unknown;
++ ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ cat >$dummy.c <<EOF
+@@ -853,28 +928,26 @@
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+- printf ("%s-pc-linux-gnu\n", argv[1]);
++ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+ # else
+- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
++ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+ # endif
+ # else
+- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
++ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+ # endif
+ #else
+- printf ("%s-pc-linux-gnuaout\n", argv[1]);
++ printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+ #endif
+ return 0;
+ }
+ EOF
+- eval $set_cc_for_build
+ $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
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
++# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
++# are messed up and put the nodename in both sysname and nodename.
+ i*86:DYNIX/ptx:4*:*)
+- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+- # earlier versions are messed up and put the nodename in both
+- # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+@@ -893,13 +966,14 @@
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+- i*86:*:5:[78]*)
+- case `/bin/uname -X | grep "^Machine"` in
+- *486*) UNAME_MACHINE=i486 ;;
+- *Pentium) UNAME_MACHINE=i586 ;;
+- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+- esac
+- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
++ i*86:*:5:7*)
++ # Fixed at (any) Pentium or better
++ UNAME_MACHINE=i586
++ if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
++ echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
++ else
++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
++ fi
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+@@ -1217,7 +1291,6 @@
+ }
+ EOF
+
+-eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+
+diff -urN parted-1.4.17.orig/config.sub parted-1.4.17/config.sub
+--- parted-1.4.17.orig/config.sub Fri Jul 13 22:37:35 2001
++++ parted-1.4.17/config.sub Thu Aug 2 14:32:32 2001
+@@ -3,7 +3,7 @@
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ # Free Software Foundation, Inc.
+
+-timestamp='2001-06-08'
++timestamp='2001-04-20'
+
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+@@ -117,7 +117,7 @@
+ # 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* | storm-chaos* | os2-emx*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -157,14 +157,6 @@
+ os=-vxworks
+ basic_machine=$1
+ ;;
+- -chorusos*)
+- os=-chorusos
+- basic_machine=$1
+- ;;
+- -chorusrdb)
+- os=-chorusrdb
+- basic_machine=$1
+- ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+@@ -238,11 +230,11 @@
+ | mips16 | mips64 | mipsel | mips64el \
+ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+- | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \
++ | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
+ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
+ | v850 | c4x \
+ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
+- | pj | pjl | h8500 | z8k)
++ | pj | pjl | h8500)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+@@ -250,7 +242,7 @@
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
+ ;;
+
+ # We use `pc' rather than `unknown'
+@@ -279,8 +271,8 @@
+ | alphaev6[78]-* \
+ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+ | clipper-* | orion-* \
+- | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \
+- | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
++ | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
++ | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
+ | mips16-* | mips64-* | mipsel-* \
+ | mips64el-* | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+@@ -889,10 +881,6 @@
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+- windows32)
+- basic_machine=i386-pc
+- os=-windows32-msvcrt
+- ;;
+ xmp)
+ basic_machine=xmp-cray
+ os=-unicos
+@@ -1030,7 +1018,6 @@
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+- | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+diff -urN parted-1.4.17.orig/configure.in parted-1.4.17/configure.in
+--- parted-1.4.17.orig/configure.in Sun Jul 22 04:00:48 2001
++++ parted-1.4.17/configure.in Thu Aug 2 18:21:49 2001
+@@ -73,6 +73,12 @@
+ AC_DEFINE(ENABLE_PC98)
+ fi
+
++AC_ARG_WITH(python,
++ [ --with-python build python module],
++ with_python=$withval,
++ with_python=no
++)
++
+ dnl make libc threadsafe (not required for us, but useful other users of
+ dnl libparted)
+ CFLAGS="$CFLAGS -D_REENTRANT"
+@@ -110,18 +116,11 @@
+ ALL_LINGUAS="de fr gl ja nl pt_BR ru"
+ AM_GNU_GETTEXT
+ CFLAGS="$CFLAGS -DLOCALEDIR=\"\\\"$datadir/locale\\\"\""
+-if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+- AC_MSG_ERROR(
+-GNU Parted requires gettext to be installed for compilation -
+-if native language support is desired. Either disable native language support
+-with:
+- $ ./configure --disable-nls
+-Or install gettext. GNU gettext is available from
+- http://ftp.gnu.org/gnu/gettext
+-)
+- exit
++if test "$USE_INCLUDED_LIBINTL" = "yes" -o "$USE_NLS" = "no"
++then
++ AC_CONFIG_LINKS(intl/libintl.h:intl/libgnuintl.h)
++ INTLINCS='-I$(top_builddir)/intl -I$(top_srcdir)/intl'
+ fi
+-CFLAGS="$CFLAGS -DLOCALEDIR=\"\\\"$datadir/locale\\\"\""
+
+ dnl Check for libuuid
+ PARTED_LIBS=""
+@@ -185,11 +184,39 @@
+ AC_SUBST(PARTED_LIBS)
+
+ dnl One day, gettext might support libtool...
+-dnl if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+-dnl INTLINCS='-I$(top_srcdir)/intl'
+-dnl fi
++if test "$USE_INCLUDED_LIBINTL" = "yes"; then
++ INTLINCS='-I$(top_srcdir)/intl'
++fi
+ AC_SUBST(INTLINCS)
+
++dnl Check for python
++if test x$with_python = xyes; then
++ AC_PATH_PROG(PYTHON, python python2.1 python2.0 python1.6 python1.5, no)
++ if test x$PYTHON = xno; then
++ AC_MSG_ERROR(
++Python version 1.5 or higher could not be found which is required for
++the --with-python. Either disable readline support with
++--without-python or downloaded and install it from:
++ http://www.python.org
++ )
++ fi
++ changequote(<<,>>)dnl
++ PYTHON_VERSION=`${PYTHON} -c "import sys; print sys.version[:3]"`
++ PYTHON_PREFIX=`${PYTHON} -c "import sys; print sys.prefix"`
++ PYTHON_EXEC_PREFIX=`${PYTHON} -c "import sys; print sys.exec_prefix"`
++ changequote([,])dnl
++ PYTHON_INCLUDES="-I${PYTHON_PREFIX}/include/python${PYTHON_VERSION} -I${PYTHON_PREFIX}/lib/python${PYTHON_VERSION}/config"
++ pydynmoduledir="${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"
++ PYTHON_SUBDIR=python
++fi
++AC_SUBST(PYTHON_PREFIX)
++AC_SUBST(PYTHON_EXEC_PREFIX)
++AC_SUBST(PYTHON_VERSION)
++AC_SUBST(PYTHON_INCLUDES)
++AC_SUBST(PYTHON_SUBDIR)
++AC_SUBST(pydynmoduledir)
++
++AC_SUBST(PARTED_LIBS)
+
+ dnl Checks for header files.
+ AC_CHECK_HEADER(uuid/uuid.h, ,
+@@ -264,12 +291,13 @@
+ LIBS="$OLD_LIBS"
+ fi
+
+-CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch -Werror"
++CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch"
+
+ AC_OUTPUT([
+ Makefile
+ include/Makefile
+ include/parted/Makefile
++intl/Makefile
+ libparted/Makefile
+ libparted/fs_ext2/Makefile
+ libparted/fs_fat/Makefile
+@@ -281,12 +309,12 @@
+ libparted/fs_ufs/Makefile
+ libparted/fs_xfs/Makefile
+ parted/Makefile
+-intl/Makefile
++po/Makefile.in
++python/Makefile
+ doc/Makefile
+ debug/Makefile
+ debug/clearfat/Makefile
+ debug/test/Makefile
+-po/Makefile.in
+ parted.spec
+ ])
+
+diff -urN parted-1.4.17.orig/intl/ChangeLog parted-1.4.17/intl/ChangeLog
+--- parted-1.4.17.orig/intl/ChangeLog Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/ChangeLog Thu Aug 2 14:26:15 2001
+@@ -1,1086 +1,4 @@
+-1998-04-29 Ulrich Drepper <drepper@cygnus.com>
++2001-07-24 GNU <bug-gnu-utils@gnu.org>
+
+- * intl/localealias.c (read_alias_file): Use unsigned char for
+- local variables. Remove unused variable tp.
+- * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
+- for type of codeset. For loosing Solaris systems.
+- * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
+- * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
+- len if not needed.
+- Patches by Jim Meyering.
++ * Version 0.10.39 released.
+
+-1998-04-28 Ulrich Drepper <drepper@cygnus.com>
+-
+- * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
+- mmap is not supported.
+-
+- * hash-string.h: Don't include <values.h>.
+-
+-1998-04-27 Ulrich Drepper <drepper@cygnus.com>
+-
+- * textdomain.c: Use strdup is available.
+-
+- * localealias.c: Define HAVE_MEMPCPY so that we can use this
+- function. Define and use semapahores to protect modfication of
+- global objects when compiling for glibc. Add code to allow
+- freeing alias table.
+-
+- * l10nflist.c: Don't assume stpcpy not being a macro.
+-
+- * gettextP.h: Define internal_function macri if not already done.
+- Use glibc byte-swap macros instead of defining SWAP when compiled
+- for glibc.
+- (struct loaded_domain): Add elements to allow unloading.
+-
+- * Makefile.in (distclean): Don't remove libintl.h here.
+-
+- * bindtextdomain.c: Carry over changes from glibc. Use strdup if
+- available.
+-
+- * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal
+- functions. Add memory freeing code for glibc.
+-
+- * dgettext.c: Update copyright.
+-
+- * explodename.c: Include stdlib.h and string.h only if they exist.
+- Use strings.h eventually.
+-
+- * finddomain.c: Mark internal functions. Use strdup if available.
+- Add memory freeing code for glibc.
+-
+-1997-10-10 20:00 Ulrich Drepper <drepper@cygnus.com>
+-
+- * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
+- They should return reasonable values.
+- Reported by Tom Tromey <tromey@cygnus.com>.
+-
+-1997-09-16 03:33 Ulrich Drepper <drepper@cygnus.com>
+-
+- * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
+- * intlh.inst.in: Likewise.
+- Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
+-
+- * libintl.glibc: Update from current glibc version.
+-
+-1997-09-06 02:10 Ulrich Drepper <drepper@cygnus.com>
+-
+- * intlh.inst.in: Reformat copyright.
+-
+-1997-08-19 15:22 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (DCGETTEXT): Remove wrong comment.
+-
+-1997-08-16 00:13 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install-data): Don't change directory to install.
+-
+-1997-08-01 14:30 Ulrich Drepper <drepper@cygnus.com>
+-
+- * cat-compat.c: Fix copyright.
+-
+- * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+-
+- * loadmsgcat.c: Update copyright. Fix typos.
+-
+- * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+- (_nl_make_l10nflist): Handle sponsor and revision correctly.
+-
+- * gettext.c: Update copyright.
+- * gettext.h: Likewise.
+- * hash-string.h: Likewise.
+-
+- * finddomain.c: Remoave dead code. Define strchr only if
+- !HAVE_STRCHR.
+-
+- * explodename.c: Include <sys/types.h>.
+-
+- * explodename.c: Reformat copyright text.
+- (_nl_explode_name): Fix typo.
+-
+- * dcgettext.c: Define and use __set_errno.
+- (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+- not defined.
+-
+- * bindtextdom.c: Pretty printing.
+-
+-1997-05-01 02:25 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (guess_category_value): Don't depend on
+- HAVE_LC_MESSAGES. We don't need the macro here.
+- Patch by Bruno Haible <haible@ilog.fr>.
+-
+- * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+- macro. Instead use HAVE_LOCALE_NULL and define it when using
+- glibc, as in dcgettext.c.
+- Patch by Bruno Haible <haible@ilog.fr>.
+-
+- * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois
+- Pinard.
+-
+-Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in: Implement handling of libtool.
+-
+- * gettextP.h: Change data structures for use of generic lowlevel
+- i18n file handling.
+-
+-Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * textdomain.c: Put parentheses around arguments of memcpy macro
+- definition.
+- * localealias.c: Likewise.
+- * l10nflist.c: Likewise.
+- * finddomain.c: Likewise.
+- * bindtextdom.c: Likewise.
+- Reported by Thomas Esken.
+-
+-Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * textdomain.c: Move definition of `memcpy` macro to right
+- position.
+-
+-Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+- bcopy if not already defined. Reported by Thomas Esken.
+- * bindtextdom.c: Likewise.
+- * l10nflist.c: Likewise.
+- * localealias.c: Likewise.
+- * textdomain.c: Likewise.
+-
+-Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (libdir): Change to use exec_prefix instead of
+- prefix. Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
+-
+-Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+- so don't prepend uppercase `ISO' for only numeric arg.
+-
+-Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+- definition of _GNU_SOURCE. Patch by Roland McGrath.
+-
+- * Makefile.in (uninstall): Fix another bug with `for' loop and
+- empty arguments. Patch by Jim Meyering. Correct name os
+- uninstalled files: no intl- prefix anymore.
+-
+- * Makefile.in (install-data): Again work around shells which
+- cannot handle mpty for list. Reported by Jim Meyering.
+-
+-Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Split goal. Now depend on install-exec
+- and install-data.
+- (install-exec, install-data): New goals. Created from former
+- install goal.
+- Reported by Karl Berry.
+-
+-Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (MKINSTALLDIRS): New variable. Path to
+- mkinstalldirs script.
+- (install): use MKINSTALLDIRS variable or if the script is not present
+- try to find it in the $top_scrdir).
+-
+-Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+- Grr. Work around by renaming the static version and use macros
+- for renaming.
+-
+-Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Correct presence test macros of __argz_* functions.
+-
+- * l10nflist.c: Include <argz.h> based on test of it instead when
+- __argz_* functions are available.
+- Reported by Andreas Schwab.
+-
+-Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * explodename.c, l10nflist.c: Define NULL for dumb systems.
+-
+-Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+- result to __result to prevent name clash.
+-
+- * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+- get prototype for stpcpy and strcasecmp.
+-
+- * intlh.inst.in, libgettext.h: Move declaration of
+- `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+- from gcc's -Wnested-extern option.
+-
+-Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Remove comment.
+-
+-Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Work around for another Buglix stupidity.
+- Always use an `else' close for `if's. Reported by Nelson Beebe.
+-
+- * Makefile.in (intlh.inst): Correct typo in phony rule.
+- Reported by Nelson Beebe.
+-
+-Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (read_alias_file): Rename variable alloca_list to
+- block_list as the macro calls assume.
+- Patch by Eric Backus.
+-
+- * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+- malloc.
+- (read_alias_file): Rename varriabe alloca_list to block_list as the
+- macro calls assume.
+- Patch by Eric Backus.
+-
+- * l10nflist.c: Correct conditional for <argz.h> inclusion.
+- Reported by Roland McGrath.
+-
+- * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+- all-@USE_NLS@.
+-
+- * Makefile.in (install): intlh.inst comes from local dir, not
+- $(srcdir).
+-
+- * Makefile.in (intlh.inst): Special handling of this goal. If
+- used in gettext, this is really a rul to construct this file. If
+- used in any other package it is defined as a .PHONY rule with
+- empty body.
+-
+- * finddomain.c: Extract locale file information handling into
+- l10nfile.c. Rename local stpcpy__ function to stpcpy.
+-
+- * dcgettext.c (stpcpy): Add local definition.
+-
+- * l10nflist.c: Solve some portability problems. Patches partly by
+- Thomas Esken. Add local definition of stpcpy.
+-
+-Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * intlh.inst.in: Don't depend including <locale.h> on
+- HAVE_LOCALE_H. Instead configure must rewrite this fiile
+- depending on the result of the configure run.
+-
+- * Makefile.in (install): libintl.inst is now called intlh.inst.
+- Add rules for updating intlh.inst from intlh.inst.in.
+-
+- * libintl.inst: Renamed to intlh.inst.in.
+-
+- * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+- because gcc has __buitlin_alloca.
+- Reported by Roland McGrath.
+-
+-Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (installcheck): New goal to fulfill needs of
+- automake's distcheck.
+-
+- * Makefile.in (install): Reorder commands so that VERSION is
+- found.
+-
+- * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+- @datadir@/gettext.
+- (COMSRCS): Add l10nfile.c.
+- (OBJECTS): Add l10nfile.o.
+- (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common).
+- (DISTFILE.gettext): Remove $(DISTFILES.common).
+- (all-gettext): Remove goal.
+- (install): If $(PACKAGE) = gettext install, otherwose do nothing. No
+- package but gettext itself should install libintl.h + headers.
+- (dist): Extend goal to work for gettext, too.
+- (dist-gettext): Remove goal.
+-
+- * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+-
+-Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+- find_l10nfile.
+-
+-Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c (__argz_next): Add definition.
+-
+- * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+- code. Use new l10nfile handling.
+-
+- * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+- alloca code.
+-
+- * l10nflist.c: Initial revision.
+-
+-Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all-gettext): New goal. Same as all-yes.
+-
+-Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de>
+-
+- * Makefile.in (gettextsrcdir): Define using @datadir@.
+-
+-Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
+-
+-Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+- with external declaration.
+-
+-Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all-no): Rename from all_no.
+-
+-Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h [loaded_domain]: Array `successor' must now contain up
+- to 63 elements (because of codeset name normalization).
+-
+- * finddomain.c: Implement codeset name normalization.
+-
+-Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all): Define to `all-@USE_NLS@'.
+- (all-yes, all_no): New goals. `all-no' is noop, `all-yes'
+- is former all.
+-
+-Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com>
+-
+- * localealias.c (alias_compare): Increment string pointers in loop
+- of strcasecmp replacement.
+-
+-Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src): Who commented this goal out ? :-)
+-
+-Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls
+- should not effect it because a missing catalog is no error.
+- Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+-
+-Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+- shell scripts.
+-
+-Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+-
+- * Makefile.in (install-src): Only install library and header when
+- we use the own implementation. Don't do it when using the
+- system's gettext or catgets functions.
+-
+- * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+-
+-Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+- gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+- Use PARAMS instead of __P. Suggested by Roland McGrath.
+-
+-Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu>
+-
+- * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+- !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+-
+-Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src):
+- Install libintl.inst instead of libintl.h.install.
+-
+-Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu>
+-
+- * cat-compat.c (textdomain):
+- Reverse order in which files are tried you load. First
+- try local file, when this failed absolute path.
+-
+-Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
+-
+- * cat-compat.c (bindtextdomain): Add missing { }.
+-
+-Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware>
+-
+- * libintl.inst: Add missing __P definition. Reported by Nelson Beebe.
+-
+- * Makefile.in:
+- Add dummy `all' and `dvi' goals. Reported by Tom Tromey.
+-
+-Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca>
+-
+- * hash-string.h: Capitalize arguments of macros.
+-
+-Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Prevent files names longer than 13
+- characters. libintl.h.glibc->libintl.glibc,
+- libintl.h.install->libintl.inst. Reported by Joshua R. Poulson.
+-
+-Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com>
+-
+- * dcgettext.c: Fix bug in preprocessor conditionals.
+-
+-Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
+-
+- * libgettext.h: Solaris cc does not understand
+- #if !SYMBOL1 && !SYMBOL2. Sad but true.
+-
+-Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h (hash_string):
+- Fix for machine with >32 bit `unsigned long's.
+-
+- * dcgettext.c (DCGETTEXT):
+- Fix horrible bug in loop for alternative translation.
+-
+-Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+- Some further simplifications in message number generation.
+-
+-Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware>
+-
+- * libintl.h.glibc: Use __const instead of const in prototypes.
+-
+- * Makefile.in (install-src):
+- Install libintl.h.install instead of libintl.h. This
+- is a stripped-down version. Suggested by Peter Miller.
+-
+- * libintl.h.install, libintl.h.glibc: Initial revision.
+-
+- * localealias.c (_nl_expand_alias, read_alias_file):
+- Protect prototypes in type casts by __P.
+-
+-Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h: Correct prototype for hash_string.
+-
+-Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h (hash_string): Add prototype.
+-
+- * gettextP.h: Fix copyright.
+- (SWAP): Add prototype.
+-
+-Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (read_alias_file): Forgot sizeof.
+- Avoid calling *printf function. This introduces a big overhead.
+- Patch by Roland McGrath.
+-
+-Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+-
+- * finddomain.c (stpcpy):
+- Define substitution function local. The macro was to flaky.
+-
+- * cat-compat.c: Fix typo.
+-
+- * xopen-msg.sed, linux-msg.sed:
+- While bringing message number to right place only accept digits.
+-
+- * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+- leading 0s we don't need to remove them. Reported by Marcus
+- Daniels.
+-
+- * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+- dependency. Reported by Marcus Daniels.
+-
+- * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+- Generally cleanup using #if instead of #ifndef.
+-
+- * Makefile.in: Correct typos in comment. By Franc,ois Pinard.
+-
+-Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src): Don't install libintl.h and libintl.a
+- if we use an available gettext implementation.
+-
+-Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported
+- by Franc,ois Pinard.
+-
+- * libgettext.h: Use #if instead of #ifdef/#ifndef.
+-
+- * finddomain.c:
+- Comments describing what has to be done should start with FIXME.
+-
+-Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning.
+- DISTFILES.common names the files common to both dist goals.
+- DISTFILES.gettext are the files only distributed in GNU gettext.
+-
+-Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+- This was necessary since a change in _nl_find_msg several weeks
+- ago. I really don't know this is still not fixed.
+-
+-Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This
+- might mark a special condition.
+-
+- * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+-
+- * Makefile.in (dist): Suppress error message when ln failed.
+- Get files from $(srcdir) explicitly.
+-
+- * libgettext.h (gettext_const): Rename to gettext_noop.
+-
+-Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (make_entry_rec):
+- Protect against wrong locale names by testing mask.
+-
+- * libgettext.h (gettext_const): Add macro definition.
+- Capitalize macro arguments.
+-
+-Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Test for pointer != NULL before accessing value.
+- Reported by Tom Tromey.
+-
+- * gettext.c (NULL):
+- Define as (void*)0 instad of 0. Reported by Franc,ois Pinard.
+-
+-Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+-
+-Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+-
+- * localealias.c (alias_compare):
+- Peter Miller reported that tolower in some systems is
+- even dumber than I thought. Protect call by `isupper'.
+-
+-Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (libdir, includedir): New variables.
+- (install-src): Install libintl.a and libintl.h in correct dirs.
+-
+-Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+-
+- * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+-
+- * localealias.c:
+- Fix typo and superflous test. Reported by Christian von Roques.
+-
+-Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Correct some remainder from the pre-CEN syntax. Now
+- we don't have a constant number of successors anymore.
+-
+-Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Add libintl.h.glibc.
+-
+- * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+- (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+-
+- * loadmsgcat.c: Forget to continue #if line.
+-
+- * localealias.c:
+- [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+- space clean.
+-
+- * dcgettext.c, finddomain.c: Better comment to last change.
+-
+- * loadmsgcat.c:
+- [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+- __fstat, __open, __close, __read, __mmap, and __munmap resp
+- to keep ANSI C name space clean.
+-
+- * finddomain.c:
+- [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+-
+- * dcgettext.c:
+- [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+- keep ANSI C name space clean.
+-
+- * libgettext.h:
+- Include sys/types.h for those old SysV systems out there.
+- Reported by Francesco Potorti`.
+-
+- * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+-
+- * bindtextdom.c: Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * finddomain.c: Fix 2 times defiend -> defined.
+-
+- * textdomain.c: Include libintl.h instead of libgettext.h when
+- compiling for glibc. Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+-
+- * gettext.c:
+- Include libintl.h instead of libgettext.h when compiling for glibc.
+- Get NULL from stddef.h if we compile for glibc.
+-
+- * finddomain.c: Include libintl.h instead of libgettext.h when
+- compiling for glibc. Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * dcgettext.c: Include all those standard headers unconditionally
+- if _LIBC is defined.
+-
+- * dgettext.c: If compiled in glibc include libintl.h instead of
+- libgettext.h.
+- (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+-
+- * dcgettext.c: If compiled in glibc include libintl.h instead of
+- libgettext.h.
+- (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+-
+- * bindtextdom.c:
+- If compiled in glibc include libintl.h instead of libgettext.h.
+-
+-Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+- Reported by Marcus Daniels.
+-
+- * cat-compat.c (bindtextdomain):
+- String used in putenv must not be recycled.
+- Reported by Marcus Daniels.
+-
+- * libgettext.h (__USE_GNU_GETTEXT):
+- Additional symbol to signal that we use GNU gettext
+- library.
+-
+- * cat-compat.c (bindtextdomain):
+- Fix bug with the strange stpcpy replacement.
+- Reported by Nelson Beebe.
+-
+-Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * cat-compat.c: Include <string.h> for stpcpy prototype.
+-
+- * localealias.c (read_alias_file):
+- While expand strdup code temporary variable `cp' hided
+- higher level variable with same name. Rename to `tp'.
+-
+- * textdomain.c (textdomain):
+- Avoid warning by using temporary variable in strdup code.
+-
+- * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+-
+-Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (alias_compare):
+- Use strcasecmp() only if available. Else use
+- implementation in place.
+-
+- * intl-compat.c:
+- Wrapper functions now call *__ functions instead of __*.
+-
+- * libgettext.h: Declare prototypes for *__ functions instead for __*.
+-
+- * cat-compat.c, loadmsgcat.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+-
+- * bindtextdom.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+- Rename to bindtextdomain__ if not used in GNU C Library.
+-
+- * dgettext.c:
+- Rename function to dgettext__ if not used in GNU C Library.
+-
+- * gettext.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+- Functions now called gettext__ if not used in GNU C Library.
+-
+- * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+-
+-Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Correct some bugs in handling of CEN standard
+- locale definitions.
+-
+-Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Implement CEN syntax.
+-
+- * gettextP.h (loaded_domain): Extend number of successors to 31.
+-
+-Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (aliaspath): Remove path to X11 locale dir.
+-
+- * Makefile.in: Make install-src depend on install. This helps
+- gettext to install the sources and other packages can use the
+- install goal.
+-
+-Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (uninstall): Remove stuff installed by install-src.
+-
+-Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware>
+-
+- * VERSION.in: Initial revision.
+-
+- * Makefile.in (DISTFILES):
+- Add VERSION file. This is not necessary for gettext, but
+- for other packages using this library.
+-
+-Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h (_nl_find_domain):
+- New prototype after changing search strategy.
+-
+- * finddomain.c (_nl_find_domain):
+- We now try only to find a specified catalog. Fall back to other
+- catalogs listed in the locale list is now done in __dcgettext.
+-
+- * dcgettext.c (__dcgettext):
+- Now we provide message fall back even to different languages.
+- I.e. if a message is not available in one language all the other
+- in the locale list a tried. Formerly fall back was only possible
+- within one language. Implemented by moving one loop from
+- _nl_find_domain to here.
+-
+-Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (gettextsrcdir):
+- Directory where source of GNU gettext library are made
+- available.
+- (INSTALL, INSTALL_DATA): Programs used for installing sources.
+- (gettext-src): New. Rule to install GNU gettext sources for use in
+- gettextize shell script.
+-
+-Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c (_nl_load_domain):
+- Use mmap for loading only when munmap function is
+- also available.
+-
+- * Makefile.in (install): Depend on `all' goal.
+-
+-Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (read_alias_file):
+- Do not overwrite '\n' when terminating alias value string.
+-
+- * localealias.c (read_alias_file):
+- Handle long lines. Ignore the rest not fitting in
+- the buffer after the initial `fgets' call.
+-
+-Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h (_nl_load_domain):
+- Add prototype, replacing prototype for _nl_load_msg_cat.
+-
+- * finddomain.c (_nl_find_domain):
+- Remove unneeded variable filename and filename_len.
+- (expand_alias): Remove prototype because functions does not
+- exist anymore.
+-
+- * localealias.c (read_alias_file):
+- Change type of fname_len parameter to int.
+- (xmalloc): Add prototype.
+-
+- * loadmsgcat.c: Better prototypes for xmalloc.
+-
+-Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Allow alias name to be constructed from the four components.
+-
+- * Makefile.in (aliaspath): New variable. Set to preliminary value.
+- (SOURCES): Add localealias.c.
+- (OBJECTS): Add localealias.o.
+-
+- * gettextP.h: Add prototype for _nl_expand_alias.
+-
+- * finddomain.c: Aliasing handled in intl/localealias.c.
+-
+- * localealias.c: Aliasing for locale names.
+-
+- * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+-
+-Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+-
+- * cat-compat.c (bindtextdomain):
+- Correct implementation. dirname parameter was not used.
+- Reported by Marcus Daniels.
+-
+- * gettextP.h (loaded_domain):
+- New fields `successor' and `decided' for oo, lazy
+- message handling implementation.
+-
+- * dcgettext.c:
+- Adopt for oo, lazy message handliing.
+- Now we can inherit translations from less specific locales.
+- (find_msg): New function.
+-
+- * loadmsgcat.c, finddomain.c:
+- Complete rewrite. Implement oo, lazy message handling :-).
+- We now have an additional environment variable `LANGUAGE' with
+- a higher priority than LC_ALL for the LC_MESSAGE locale.
+- Here we can set a colon separated list of specifications each
+- of the form `language[_territory[.codeset]][@modifier]'.
+-
+-Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (unistd.h):
+- Include to get _PC_PATH_MAX defined on system having it.
+-
+-Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (stpcpy): Include prototype.
+-
+- * Makefile.in (dist): Remove `copying instead' message.
+-
+-Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (ID, TAGS): Do not use $^.
+-
+-Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (TAGS, ID): Use $^ as command argument.
+- (TAGS): Give etags -o option t write to current directory,
+- not $(srcdir).
+- (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+- (distclean): Remove ID.
+-
+-Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (gnulocaledir):
+- New variable, always using share/ for data directory.
+- (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+-
+- * finddomain.c (_nl_default_dirname):
+- Set to GNULOCALEDIR, because it always has to point
+- to the directory where GNU gettext Library writes it to.
+-
+- * intl-compat.c (textdomain, bindtextdomain):
+- Undefine macros before function definition.
+-
+-Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h (_LIBINTL_H):
+- Protect definition in case where this file is included as
+- libgettext.h on Solaris machines. Add comment about this.
+-
+-Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * intl-compat.c (textdomain): Correct typo.
+-
+-Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (dcgettext): Function now called __dcgettext.
+-
+- * dgettext.c (dgettext): Now called __dgettext and calls
+- __dcgettext.
+-
+- * gettext.c (gettext):
+- Function now called __gettext and calls __dgettext.
+-
+- * textdomain.c (textdomain): Function now called __textdomain.
+-
+- * bindtextdom.c (bindtextdomain): Function now called
+- __bindtextdomain.
+-
+- * intl-compat.c: Initial revision.
+-
+- * Makefile.in (SOURCES): Add intl-compat.c.
+- (OBJECTS): We always compile the GNU gettext library functions.
+- OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+- and intl-compat.o.
+- (GETTOBJS): Contains now only intl-compat.o.
+-
+- * libgettext.h:
+- Re-include protection matches dualistic character of libgettext.h.
+- For all functions in GNU gettext library define __ counter part.
+-
+- * finddomain.c (strchr): Define as index if not found in C library.
+- (_nl_find_domain): For relative paths paste / in between.
+-
+-Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+-
+- * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+- A little bit better comments.
+-
+-Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in:
+- po-mode.el, makelinks, combine-sh are now found in ../misc.
+-
+- * po-mode.el, makelinks, combine-sh, elisp-comp:
+- Moved to ../misc/.
+-
+- * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+-
+-Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+- (install-data, uninstall): Install/uninstall .elc file.
+-
+- * po-mode.el (Installation comment):
+- Add .pox as possible extension of .po files.
+-
+-Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware>
+-
+- * elisp-comp: Complete new version by Franc,ois: This does not
+- fail when not compiling in the source directory.
+-
+-Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (../po/cat-id-tbl.o):
+- Use $(MAKE) instead of make for recursive make.
+-
+- * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+- (install-exec): Add missing dummy goal.
+- (install-data, uninstall): @ in multi-line shell command at
+- beginning, not in front of echo. Reported by Eric Backus.
+-
+-Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES):
+- Rename libgettext.perl to gettext.perl to fit in 14 chars
+- file systems.
+-
+- * gettext.perl:
+- Rename to gettext.perl to fit in 14 chars file systems.
+-
+-Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware>
+-
+- * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+-
+-Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in: Pretty printing.
+-
+- * linux-msg.sed, xopen-msg.sed:
+- Correct bugs with handling substitute flags in branches.
+-
+- * hash-string.h (hash_string):
+- Old K&R compilers don't under stand `unsigned char'.
+-
+- * gettext.h (nls_uint32):
+- Some old K&R compilers (eg HP) don't understand `unsigned int'.
+-
+- * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+-
+-Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (ELCFILES): New variable.
+- (DISTFILES): Add elisp-comp.
+- Add implicit rule for .el -> .elc compilation.
+- (install-data): install $ELCFILES
+- (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+-
+- * elisp-comp: Initial revision
+-
+-Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in:
+- cat-id-tbl.c is now found in po/. This enables us to use an identical
+- intl/ directory in all packages.
+-
+- * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+-
+- * textdomain.c: fix typo (#if def -> #if defined)
+-
+-Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+- (DISTFILES,distclean): move tupdate.perl to src/
+-
+- * po-to-tbl.sed.in:
+- add additional jump to clear change flag to recognize multiline strings
+-
+-Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * textdomain.c: Protect inclusion of stdlib.h and string.h.
+-
+- * loadmsgcat.c: Protect inclusion of stdlib.h.
+-
+- * libgettext.h: Protect inclusion of locale.h.
+- Allow use in C++ programs.
+- Define NULL is not happened already.
+-
+- * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+- po-to-tbl.sed.
+- (distclean): remove po-to-tbl.sed and tupdate.perl.
+-
+- * tupdate.perl.in: Substitute Perl path even in exec line.
+- Don't include entries without translation from old .po file.
+-
+-Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * tupdate.perl.in: use "Updated: " in msgid "".
+-
+- * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+- Define getenv if !__STDC__.
+-
+- * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+- Define free if !__STDC__.
+-
+- * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+- Define free if !__STDC__.
+-
+- * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+-
+-Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+- Remove unneeded $(srcdir) from Makefile.in dependency.
+-
+- * makelinks: Add copyright and short description.
+-
+- * po-mode.el: Last version for 0.7.
+-
+- * tupdate.perl.in: Fix die message.
+-
+- * dcgettext.c: Protect include of string.h.
+-
+- * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+-
+- * finddomain.c: Some corrections in includes.
+-
+- * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+-
+- * po-to-tbl.sed: Adopt for new .po file format.
+-
+- * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+-
+-Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware>
+-
+- * tupdate.perl.in: Complete rewrite for new .po file format.
+-
+-Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * First official release. This directory contains all the code
+- needed to internationalize own packages. It provides functions
+- which allow to use the X/Open catgets function with an interface
+- like the Uniforum gettext function. For system which does not
+- have neither of those a complete implementation is provided.
+diff -urN parted-1.4.17.orig/intl/Makefile.in parted-1.4.17/intl/Makefile.in
+--- parted-1.4.17.orig/intl/Makefile.in Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/Makefile.in Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+ # Makefile for directory with message catalog handling in GNU NLS Utilities.
+-# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
++# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -28,75 +28,106 @@
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ transform = @program_transform_name@
+-libdir = $(exec_prefix)/lib
+-includedir = $(prefix)/include
+-datadir = $(prefix)/@DATADIRNAME@
++libdir = @libdir@
++includedir = @includedir@
++datadir = @datadir@
+ localedir = $(datadir)/locale
+-gnulocaledir = $(prefix)/share/locale
+-gettextsrcdir = @datadir@/gettext/intl
+-aliaspath = $(localedir):.
++gettextsrcdir = $(datadir)/gettext/intl
++aliaspath = $(localedir)
+ subdir = intl
+
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
++mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+-l = @l@
++l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+ AR = ar
+ CC = @CC@
+ LIBTOOL = @LIBTOOL@
+ RANLIB = @RANLIB@
++YACC = @INTLBISON@ -y -d
++YFLAGS = --name-prefix=__gettext
+
+-DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
+--DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
++DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
++-DLIBDIR=\"$(libdir)\" @DEFS@
+ CPPFLAGS = @CPPFLAGS@
+ CFLAGS = @CFLAGS@
+ LDFLAGS = @LDFLAGS@
+
+ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+-HEADERS = $(COMHDRS) libgettext.h loadinfo.h
++HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
+ COMHDRS = gettext.h gettextP.h hash-string.h
+-SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
++SOURCES = $(COMSRCS) intl-compat.c
+ COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
+-explodename.c
++explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
++localcharset.c
+ OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
+-explodename.$lo
+-CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
++explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
++plural.$lo localcharset.$lo
+ GETTOBJS = intl-compat.$lo
+-DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
+-xopen-msg.sed $(HEADERS) $(SOURCES)
++DISTFILES.common = Makefile.in \
++config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
++DISTFILES.generated = plural.c
+ DISTFILES.normal = VERSION
+-DISTFILES.gettext = libintl.glibc intlh.inst.in
++DISTFILES.gettext = libintl.glibc
++DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
++
++# Libtool's library version information for libintl.
++# Before making a gettext release, the gettext maintainer must change this
++# according to the libtool documentation, section "Library interface versions".
++# Maintainers of other packages that include the intl directory must *not*
++# change these values.
++LTV_CURRENT=1
++LTV_REVISION=1
++LTV_AGE=0
+
+ .SUFFIXES:
+-.SUFFIXES: .c .o .lo
++.SUFFIXES: .c .y .o .lo .sin .sed
+ .c.o:
+ $(COMPILE) $<
+ .c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) $<
+
+-INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
++.y.c:
++ $(YACC) $(YFLAGS) --output $@ $<
++ rm -f $*.h
++
++.sin.sed:
++ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
++ mv t-$@ $@
+
+-all: all-@USE_INCLUDED_LIBINTL@
++INCLUDES = -I.. -I. -I$(top_srcdir)/intl
+
+-all-yes: libintl.$la intlh.inst
+-all-no:
++all: all-@USE_INCLUDED_LIBINTL@
++all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
++all-no: all-no-@BUILD_INCLUDED_LIBINTL@
++all-no-yes: libgnuintl.$la
++all-no-no:
+
+-libintl.a: $(OBJECTS)
++libintl.a libgnuintl.a: $(OBJECTS)
+ rm -f $@
+ $(AR) cru $@ $(OBJECTS)
+ $(RANLIB) $@
+
+-libintl.la: $(OBJECTS)
+- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
+- -version-info 1:0 -rpath $(libdir)
+-
+-../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
+- cd ../po && $(MAKE) cat-id-tbl.$lo
++libintl.la libgnuintl.la: $(OBJECTS)
++ $(LIBTOOL) --mode=link \
++ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
++ $(OBJECTS) @LIBICONV@ \
++ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
++ -rpath $(libdir) \
++ -no-undefined
++
++libintl.h: libgnuintl.h
++ cp $(srcdir)/libgnuintl.h libintl.h
++
++charset.alias: config.charset
++ $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
++ mv t-$@ $@
+
+ check: all
+
+@@ -104,36 +135,70 @@
+ # only use the library should use install instead.
+
+ # We must not install the libintl.h/libintl.a files if we are on a
+-# system which has the gettext() function in its C library or in a
+-# separate library or use the catgets interface. A special case is
+-# where configure found a previously installed GNU gettext library.
++# system which has the GNU gettext() function in its C library or in a
++# separate library.
+ # If you want to use the one which comes with this version of the
+ # package, you have to use `configure --with-included-gettext'.
+ install: install-exec install-data
+ install-exec: all
+ if test "$(PACKAGE)" = "gettext" \
+ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+- if test -r $(MKINSTALLDIRS); then \
+- $(MKINSTALLDIRS) $(libdir) $(includedir); \
++ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
++ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
++ $(LIBTOOL) --mode=install \
++ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
++ else \
++ : ; \
++ fi
++ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
++ $(mkinstalldirs) $(DESTDIR)$(libdir); \
++ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
++ dest=$(DESTDIR)$(libdir)/charset.alias; \
++ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
++ orig=$(DESTDIR)$(libdir)/charset.alias; \
++ sed -f ref-add.sed $$orig > $$temp; \
++ $(INSTALL_DATA) $$temp $$dest; \
++ rm -f $$temp; \
+ else \
+- $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
++ if test @GLIBC21@ = no; then \
++ orig=charset.alias; \
++ sed -f ref-add.sed $$orig > $$temp; \
++ $(INSTALL_DATA) $$temp $$dest; \
++ rm -f $$temp; \
++ fi; \
+ fi; \
+- $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
+- $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
++ $(mkinstalldirs) $(DESTDIR)$(localedir); \
++ test -f $(DESTDIR)$(localedir)/locale.alias \
++ && orig=$(DESTDIR)$(localedir)/locale.alias \
++ || orig=$(srcdir)/locale.alias; \
++ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
++ dest=$(DESTDIR)$(localedir)/locale.alias; \
++ sed -f ref-add.sed $$orig > $$temp; \
++ $(INSTALL_DATA) $$temp $$dest; \
++ rm -f $$temp; \
+ else \
+ : ; \
+ fi
+ install-data: all
+ if test "$(PACKAGE)" = "gettext"; then \
+- if test -r $(MKINSTALLDIRS); then \
+- $(MKINSTALLDIRS) $(gettextsrcdir); \
+- else \
+- $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+- fi; \
+- $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
++ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
++ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
++ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+ dists="$(DISTFILES.common)"; \
+ for file in $$dists; do \
+- $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
++ $(INSTALL_DATA) $(srcdir)/$$file \
++ $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
++ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
++ dists="$(DISTFILES.generated)"; \
++ for file in $$dists; do \
++ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
++ $(INSTALL_DATA) $$dir/$$file \
++ $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
++ dists="$(DISTFILES.obsolete)"; \
++ for file in $$dists; do \
++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+@@ -143,14 +208,51 @@
+ installcheck:
+
+ uninstall:
+- dists="$(DISTFILES.common)"; \
+- for file in $$dists; do \
+- rm -f $(gettextsrcdir)/$$file; \
+- done
++ if test "$(PACKAGE)" = "gettext" \
++ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
++ rm -f $(DESTDIR)$(includedir)/libintl.h; \
++ $(LIBTOOL) --mode=uninstall \
++ rm -f $(DESTDIR)$(libdir)/libintl.$la; \
++ else \
++ : ; \
++ fi
++ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
++ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
++ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
++ dest=$(DESTDIR)$(libdir)/charset.alias; \
++ sed -f ref-del.sed $$dest > $$temp; \
++ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
++ rm -f $$dest; \
++ else \
++ $(INSTALL_DATA) $$temp $$dest; \
++ fi; \
++ rm -f $$temp; \
++ fi; \
++ if test -f $(DESTDIR)$(localedir)/locale.alias; then \
++ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
++ dest=$(DESTDIR)$(localedir)/locale.alias; \
++ sed -f ref-del.sed $$dest > $$temp; \
++ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
++ rm -f $$dest; \
++ else \
++ $(INSTALL_DATA) $$temp $$dest; \
++ fi; \
++ rm -f $$temp; \
++ fi; \
++ else \
++ : ; \
++ fi
++ if test "$(PACKAGE)" = "gettext"; then \
++ for file in VERSION ChangeLog $(DISTFILES.common) $(DISTFILES.generated); do \
++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
++ done; \
++ else \
++ : ; \
++ fi
+
+ info dvi:
+
+-$(OBJECTS): ../config.h libgettext.h
++$(OBJECTS): ../config.h libgnuintl.h
+ bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+ dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+
+@@ -166,12 +268,19 @@
+
+
+ mostlyclean:
+- rm -f *.a *.o *.lo core core.*
++ rm -f *.a *.la *.o *.lo core core.*
++ rm -f libintl.h charset.alias ref-add.sed ref-del.sed
++ rm -f -r .libs _libs
+
+ clean: mostlyclean
+
+ distclean: clean
+- rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
++ rm -f Makefile ID TAGS
++ if test "$(PACKAGE)" = gettext; then \
++ rm -f ChangeLog.inst $(DISTFILES.normal); \
++ else \
++ : ; \
++ fi
+
+ maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+@@ -181,33 +290,22 @@
+ # GNU gettext needs not contain the file `VERSION' but contains some
+ # other files which should not be distributed in other packages.
+ distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+-dist distdir: Makefile $(DISTFILES)
++dist distdir: Makefile
+ if test "$(PACKAGE)" = gettext; then \
+ additional="$(DISTFILES.gettext)"; \
+ else \
+ additional="$(DISTFILES.normal)"; \
+ fi; \
+- for file in $(DISTFILES.common) $$additional; do \
+- ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+- || cp -p $(srcdir)/$$file $(distdir); \
++ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
++ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
++ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
++ ln $$dir/$$file $(distdir) 2> /dev/null \
++ || cp -p $$dir/$$file $(distdir); \
+ done
+
+-dist-libc:
+- tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
+-
+ Makefile: Makefile.in ../config.status
+ cd .. \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+-
+-# The dependency for intlh.inst is different in gettext and all other
+-# packages. Because we cannot you GNU make features we have to solve
+-# the problem while rewriting Makefile.in.
+-@GT_YES@intlh.inst: intlh.inst.in ../config.status
+-@GT_YES@ cd .. \
+-@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
+-@GT_YES@ $(SHELL) ./config.status
+-@GT_NO@.PHONY: intlh.inst
+-@GT_NO@intlh.inst:
+
+ # Tell versions [3.59,3.63) of GNU make not to export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -urN parted-1.4.17.orig/intl/VERSION parted-1.4.17/intl/VERSION
+--- parted-1.4.17.orig/intl/VERSION Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/VERSION Thu Aug 2 14:26:15 2001
+@@ -1 +1 @@
+-GNU gettext library from gettext-0.10.35
++GNU gettext library from gettext-0.10.39
+diff -urN parted-1.4.17.orig/intl/bindtextdom.c parted-1.4.17/intl/bindtextdom.c
+--- parted-1.4.17.orig/intl/bindtextdom.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/bindtextdom.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+ /* Implementation of the bindtextdomain(3) function
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++ Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -19,32 +19,39 @@
+ # include <config.h>
+ #endif
+
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#else
+-# ifdef HAVE_MALLOC_H
+-# include <malloc.h>
+-# else
+-void free ();
+-# endif
+-#endif
++#include <stddef.h>
++#include <stdlib.h>
++#include <string.h>
+
+-#if defined HAVE_STRING_H || defined _LIBC
+-# include <string.h>
++#ifdef _LIBC
++# include <libintl.h>
+ #else
+-# include <strings.h>
+-# ifndef memcpy
+-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+-# endif
++# include "libgnuintl.h"
+ #endif
++#include "gettextP.h"
+
+ #ifdef _LIBC
+-# include <libintl.h>
++/* We have to handle multi-threaded applications. */
++# include <bits/libc-lock.h>
+ #else
+-# include "libgettext.h"
++/* Provide dummy implementation if this is outside glibc. */
++# define __libc_rwlock_define(CLASS, NAME)
++# define __libc_rwlock_wrlock(NAME)
++# define __libc_rwlock_unlock(NAME)
++#endif
++
++/* The internal variables in the standalone libintl.a must have different
++ names than the internal variables in GNU libc, otherwise programs
++ using libintl.a cannot be linked statically. */
++#if !defined _LIBC
++# define _nl_default_dirname _nl_default_dirname__
++# define _nl_domain_bindings _nl_domain_bindings__
++#endif
++
++/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
++#ifndef offsetof
++# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+ #endif
+-#include "gettext.h"
+-#include "gettextP.h"
+
+ /* @@ end of prolog @@ */
+
+@@ -54,6 +61,9 @@
+ /* List with bindings of specific domains. */
+ extern struct binding *_nl_domain_bindings;
+
++/* Lock variable to protect the global data in the gettext implementation. */
++__libc_rwlock_define (extern, _nl_state_lock)
++
+
+ /* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+@@ -61,25 +71,48 @@
+ prefix. So we have to make a difference here. */
+ #ifdef _LIBC
+ # define BINDTEXTDOMAIN __bindtextdomain
++# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+ # ifndef strdup
+ # define strdup(str) __strdup (str)
+ # endif
+ #else
+ # define BINDTEXTDOMAIN bindtextdomain__
++# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
+ #endif
+
+-/* Specify that the DOMAINNAME message catalog will be found
+- in DIRNAME rather than in the system locale data base. */
+-char *
+-BINDTEXTDOMAIN (domainname, dirname)
++/* Prototypes for local functions. */
++static void set_binding_values PARAMS ((const char *domainname,
++ const char **dirnamep,
++ const char **codesetp));
++
++/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
++ to be used for the DOMAINNAME message catalog.
++ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
++ modified, only the current value is returned.
++ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
++ modified nor returned. */
++static void
++set_binding_values (domainname, dirnamep, codesetp)
+ const char *domainname;
+- const char *dirname;
++ const char **dirnamep;
++ const char **codesetp;
+ {
+ struct binding *binding;
++ int modified;
+
+ /* Some sanity checks. */
+ if (domainname == NULL || domainname[0] == '\0')
+- return NULL;
++ {
++ if (dirnamep)
++ *dirnamep = NULL;
++ if (codesetp)
++ *codesetp = NULL;
++ return;
++ }
++
++ __libc_rwlock_wrlock (_nl_state_lock);
++
++ modified = 0;
+
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+@@ -95,83 +128,173 @@
+ }
+ }
+
+- if (dirname == NULL)
+- /* The current binding has be to returned. */
+- return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
+-
+ if (binding != NULL)
+ {
+- /* The domain is already bound. If the new value and the old
+- one are equal we simply do nothing. Otherwise replace the
+- old binding. */
+- if (strcmp (dirname, binding->dirname) != 0)
++ if (dirnamep)
+ {
+- char *new_dirname;
++ const char *dirname = *dirnamep;
+
+- if (strcmp (dirname, _nl_default_dirname) == 0)
+- new_dirname = (char *) _nl_default_dirname;
++ if (dirname == NULL)
++ /* The current binding has be to returned. */
++ *dirnamep = binding->dirname;
+ else
+ {
++ /* The domain is already bound. If the new value and the old
++ one are equal we simply do nothing. Otherwise replace the
++ old binding. */
++ char *result = binding->dirname;
++ if (strcmp (dirname, result) != 0)
++ {
++ if (strcmp (dirname, _nl_default_dirname) == 0)
++ result = (char *) _nl_default_dirname;
++ else
++ {
+ #if defined _LIBC || defined HAVE_STRDUP
+- new_dirname = strdup (dirname);
+- if (new_dirname == NULL)
+- return NULL;
+-#else
+- size_t len = strlen (dirname) + 1;
+- new_dirname = (char *) malloc (len);
+- if (new_dirname == NULL)
+- return NULL;
+-
+- memcpy (new_dirname, dirname, len);
++ result = strdup (dirname);
++#else
++ size_t len = strlen (dirname) + 1;
++ result = (char *) malloc (len);
++ if (__builtin_expect (result != NULL, 1))
++ memcpy (result, dirname, len);
+ #endif
++ }
++
++ if (__builtin_expect (result != NULL, 1))
++ {
++ if (binding->dirname != _nl_default_dirname)
++ free (binding->dirname);
++
++ binding->dirname = result;
++ modified = 1;
++ }
++ }
++ *dirnamep = result;
+ }
++ }
+
+- if (binding->dirname != _nl_default_dirname)
+- free (binding->dirname);
++ if (codesetp)
++ {
++ const char *codeset = *codesetp;
+
+- binding->dirname = new_dirname;
++ if (codeset == NULL)
++ /* The current binding has be to returned. */
++ *codesetp = binding->codeset;
++ else
++ {
++ /* The domain is already bound. If the new value and the old
++ one are equal we simply do nothing. Otherwise replace the
++ old binding. */
++ char *result = binding->codeset;
++ if (result == NULL || strcmp (codeset, result) != 0)
++ {
++#if defined _LIBC || defined HAVE_STRDUP
++ result = strdup (codeset);
++#else
++ size_t len = strlen (codeset) + 1;
++ result = (char *) malloc (len);
++ if (__builtin_expect (result != NULL, 1))
++ memcpy (result, codeset, len);
++#endif
++
++ if (__builtin_expect (result != NULL, 1))
++ {
++ if (binding->codeset != NULL)
++ free (binding->codeset);
++
++ binding->codeset = result;
++ binding->codeset_cntr++;
++ modified = 1;
++ }
++ }
++ *codesetp = result;
++ }
+ }
+ }
++ else if ((dirnamep == NULL || *dirnamep == NULL)
++ && (codesetp == NULL || *codesetp == NULL))
++ {
++ /* Simply return the default values. */
++ if (dirnamep)
++ *dirnamep = _nl_default_dirname;
++ if (codesetp)
++ *codesetp = NULL;
++ }
+ else
+ {
+ /* We have to create a new binding. */
+-#if !defined _LIBC && !defined HAVE_STRDUP
+- size_t len;
+-#endif
++ size_t len = strlen (domainname) + 1;
+ struct binding *new_binding =
+- (struct binding *) malloc (sizeof (*new_binding));
++ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+- if (new_binding == NULL)
+- return NULL;
++ if (__builtin_expect (new_binding == NULL, 0))
++ goto failed;
+
+-#if defined _LIBC || defined HAVE_STRDUP
+- new_binding->domainname = strdup (domainname);
+- if (new_binding->domainname == NULL)
+- return NULL;
+-#else
+- len = strlen (domainname) + 1;
+- new_binding->domainname = (char *) malloc (len);
+- if (new_binding->domainname == NULL)
+- return NULL;
+ memcpy (new_binding->domainname, domainname, len);
+-#endif
+
+- if (strcmp (dirname, _nl_default_dirname) == 0)
+- new_binding->dirname = (char *) _nl_default_dirname;
++ if (dirnamep)
++ {
++ const char *dirname = *dirnamep;
++
++ if (dirname == NULL)
++ /* The default value. */
++ dirname = _nl_default_dirname;
++ else
++ {
++ if (strcmp (dirname, _nl_default_dirname) == 0)
++ dirname = _nl_default_dirname;
++ else
++ {
++ char *result;
++#if defined _LIBC || defined HAVE_STRDUP
++ result = strdup (dirname);
++ if (__builtin_expect (result == NULL, 0))
++ goto failed_dirname;
++#else
++ size_t len = strlen (dirname) + 1;
++ result = (char *) malloc (len);
++ if (__builtin_expect (result == NULL, 0))
++ goto failed_dirname;
++ memcpy (result, dirname, len);
++#endif
++ dirname = result;
++ }
++ }
++ *dirnamep = dirname;
++ new_binding->dirname = (char *) dirname;
++ }
+ else
++ /* The default value. */
++ new_binding->dirname = (char *) _nl_default_dirname;
++
++ new_binding->codeset_cntr = 0;
++
++ if (codesetp)
+ {
++ const char *codeset = *codesetp;
++
++ if (codeset != NULL)
++ {
++ char *result;
++
+ #if defined _LIBC || defined HAVE_STRDUP
+- new_binding->dirname = strdup (dirname);
+- if (new_binding->dirname == NULL)
+- return NULL;
+-#else
+- len = strlen (dirname) + 1;
+- new_binding->dirname = (char *) malloc (len);
+- if (new_binding->dirname == NULL)
+- return NULL;
+- memcpy (new_binding->dirname, dirname, len);
++ result = strdup (codeset);
++ if (__builtin_expect (result == NULL, 0))
++ goto failed_codeset;
++#else
++ size_t len = strlen (codeset) + 1;
++ result = (char *) malloc (len);
++ if (__builtin_expect (result == NULL, 0))
++ goto failed_codeset;
++ memcpy (result, codeset, len);
+ #endif
++ codeset = result;
++ new_binding->codeset_cntr++;
++ }
++ *codesetp = codeset;
++ new_binding->codeset = (char *) codeset;
+ }
++ else
++ new_binding->codeset = NULL;
+
+ /* Now enqueue it. */
+ if (_nl_domain_bindings == NULL
+@@ -191,13 +314,55 @@
+ binding->next = new_binding;
+ }
+
+- binding = new_binding;
++ modified = 1;
++
++ /* Here we deal with memory allocation failures. */
++ if (0)
++ {
++ failed_codeset:
++ if (new_binding->dirname != _nl_default_dirname)
++ free (new_binding->dirname);
++ failed_dirname:
++ free (new_binding);
++ failed:
++ if (dirnamep)
++ *dirnamep = NULL;
++ if (codesetp)
++ *codesetp = NULL;
++ }
+ }
+
+- return binding->dirname;
++ /* If we modified any binding, we flush the caches. */
++ if (modified)
++ ++_nl_msg_cat_cntr;
++
++ __libc_rwlock_unlock (_nl_state_lock);
++}
++
++/* Specify that the DOMAINNAME message catalog will be found
++ in DIRNAME rather than in the system locale data base. */
++char *
++BINDTEXTDOMAIN (domainname, dirname)
++ const char *domainname;
++ const char *dirname;
++{
++ set_binding_values (domainname, &dirname, NULL);
++ return (char *) dirname;
++}
++
++/* Specify the character encoding in which the messages from the
++ DOMAINNAME message catalog will be returned. */
++char *
++BIND_TEXTDOMAIN_CODESET (domainname, codeset)
++ const char *domainname;
++ const char *codeset;
++{
++ set_binding_values (domainname, NULL, &codeset);
++ return (char *) codeset;
+ }
+
+ #ifdef _LIBC
+-/* Alias for function name in GNU C Library. */
++/* Aliases for function names in GNU C Library. */
+ weak_alias (__bindtextdomain, bindtextdomain);
++weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+ #endif
+diff -urN parted-1.4.17.orig/intl/cat-compat.c parted-1.4.17/intl/cat-compat.c
+--- parted-1.4.17.orig/intl/cat-compat.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/cat-compat.c Wed Dec 31 19:00:00 1969
+@@ -1,262 +0,0 @@
+-/* Compatibility code for gettext-using-catgets interface.
+- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+-
+- This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 2, or (at your option)
+- any later version.
+-
+- This program is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software Foundation,
+- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+-
+-#ifdef HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#include <stdio.h>
+-
+-#ifdef STDC_HEADERS
+-# include <stdlib.h>
+-# include <string.h>
+-#else
+-char *getenv ();
+-# ifdef HAVE_MALLOC_H
+-# include <malloc.h>
+-# endif
+-#endif
+-
+-#ifdef HAVE_NL_TYPES_H
+-# include <nl_types.h>
+-#endif
+-
+-#include "libgettext.h"
+-
+-/* @@ end of prolog @@ */
+-
+-/* XPG3 defines the result of `setlocale (category, NULL)' as:
+- ``Directs `setlocale()' to query `category' and return the current
+- setting of `local'.''
+- However it does not specify the exact format. And even worse: POSIX
+- defines this not at all. So we can use this feature only on selected
+- system (e.g. those using GNU C Library). */
+-#ifdef _LIBC
+-# define HAVE_LOCALE_NULL
+-#endif
+-
+-/* The catalog descriptor. */
+-static nl_catd catalog = (nl_catd) -1;
+-
+-/* Name of the default catalog. */
+-static const char default_catalog_name[] = "messages";
+-
+-/* Name of currently used catalog. */
+-static const char *catalog_name = default_catalog_name;
+-
+-/* Get ID for given string. If not found return -1. */
+-static int msg_to_cat_id PARAMS ((const char *msg));
+-
+-/* Substitution for systems lacking this function in their C library. */
+-#if !_LIBC && !HAVE_STPCPY
+-static char *stpcpy PARAMS ((char *dest, const char *src));
+-#endif
+-
+-
+-/* Set currently used domain/catalog. */
+-char *
+-textdomain (domainname)
+- const char *domainname;
+-{
+- nl_catd new_catalog;
+- char *new_name;
+- size_t new_name_len;
+- char *lang;
+-
+-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
+- && defined HAVE_LOCALE_NULL
+- lang = setlocale (LC_MESSAGES, NULL);
+-#else
+- lang = getenv ("LC_ALL");
+- if (lang == NULL || lang[0] == '\0')
+- {
+- lang = getenv ("LC_MESSAGES");
+- if (lang == NULL || lang[0] == '\0')
+- lang = getenv ("LANG");
+- }
+-#endif
+- if (lang == NULL || lang[0] == '\0')
+- lang = "C";
+-
+- /* See whether name of currently used domain is asked. */
+- if (domainname == NULL)
+- return (char *) catalog_name;
+-
+- if (domainname[0] == '\0')
+- domainname = default_catalog_name;
+-
+- /* Compute length of added path element. */
+- new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
+- + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
+- + sizeof (".cat");
+-
+- new_name = (char *) malloc (new_name_len);
+- if (new_name == NULL)
+- return NULL;
+-
+- strcpy (new_name, PACKAGE);
+- new_catalog = catopen (new_name, 0);
+-
+- if (new_catalog == (nl_catd) -1)
+- {
+- /* NLSPATH search didn't work, try absolute path */
+- sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
+- PACKAGE);
+- new_catalog = catopen (new_name, 0);
+-
+- if (new_catalog == (nl_catd) -1)
+- {
+- free (new_name);
+- return (char *) catalog_name;
+- }
+- }
+-
+- /* Close old catalog. */
+- if (catalog != (nl_catd) -1)
+- catclose (catalog);
+- if (catalog_name != default_catalog_name)
+- free ((char *) catalog_name);
+-
+- catalog = new_catalog;
+- catalog_name = new_name;
+-
+- return (char *) catalog_name;
+-}
+-
+-char *
+-bindtextdomain (domainname, dirname)
+- const char *domainname;
+- const char *dirname;
+-{
+-#if HAVE_SETENV || HAVE_PUTENV
+- char *old_val, *new_val, *cp;
+- size_t new_val_len;
+-
+- /* This does not make much sense here but to be compatible do it. */
+- if (domainname == NULL)
+- return NULL;
+-
+- /* Compute length of added path element. If we use setenv we don't need
+- the first byts for NLSPATH=, but why complicate the code for this
+- peanuts. */
+- new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
+- + sizeof ("/%L/LC_MESSAGES/%N.cat");
+-
+- old_val = getenv ("NLSPATH");
+- if (old_val == NULL || old_val[0] == '\0')
+- {
+- old_val = NULL;
+- new_val_len += 1 + sizeof (LOCALEDIR) - 1
+- + sizeof ("/%L/LC_MESSAGES/%N.cat");
+- }
+- else
+- new_val_len += strlen (old_val);
+-
+- new_val = (char *) malloc (new_val_len);
+- if (new_val == NULL)
+- return NULL;
+-
+-# if HAVE_SETENV
+- cp = new_val;
+-# else
+- cp = stpcpy (new_val, "NLSPATH=");
+-# endif
+-
+- cp = stpcpy (cp, dirname);
+- cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
+-
+- if (old_val == NULL)
+- {
+-# if __STDC__
+- stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
+-# else
+-
+- cp = stpcpy (cp, LOCALEDIR);
+- stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
+-# endif
+- }
+- else
+- stpcpy (cp, old_val);
+-
+-# if HAVE_SETENV
+- setenv ("NLSPATH", new_val, 1);
+- free (new_val);
+-# else
+- putenv (new_val);
+- /* Do *not* free the environment entry we just entered. It is used
+- from now on. */
+-# endif
+-
+-#endif
+-
+- return (char *) domainname;
+-}
+-
+-#undef gettext
+-char *
+-gettext (msg)
+- const char *msg;
+-{
+- int msgid;
+-
+- if (msg == NULL || catalog == (nl_catd) -1)
+- return (char *) msg;
+-
+- /* Get the message from the catalog. We always use set number 1.
+- The message ID is computed by the function `msg_to_cat_id'
+- which works on the table generated by `po-to-tbl'. */
+- msgid = msg_to_cat_id (msg);
+- if (msgid == -1)
+- return (char *) msg;
+-
+- return catgets (catalog, 1, msgid, (char *) msg);
+-}
+-
+-/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
+- for the one equal to msg. If it is found return the ID. In case when
+- the string is not found return -1. */
+-static int
+-msg_to_cat_id (msg)
+- const char *msg;
+-{
+- int cnt;
+-
+- for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
+- if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
+- return _msg_tbl[cnt]._msg_number;
+-
+- return -1;
+-}
+-
+-
+-/* @@ begin of epilog @@ */
+-
+-/* We don't want libintl.a to depend on any other library. So we
+- avoid the non-standard function stpcpy. In GNU C Library this
+- function is available, though. Also allow the symbol HAVE_STPCPY
+- to be defined. */
+-#if !_LIBC && !HAVE_STPCPY
+-static char *
+-stpcpy (dest, src)
+- char *dest;
+- const char *src;
+-{
+- while ((*dest++ = *src++) != '\0')
+- /* Do nothing. */ ;
+- return dest - 1;
+-}
+-#endif
+diff -urN parted-1.4.17.orig/intl/config.charset parted-1.4.17/intl/config.charset
+--- parted-1.4.17.orig/intl/config.charset Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/config.charset Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,438 @@
++#! /bin/sh
++# Output a system dependent table of character encoding aliases.
++#
++# Copyright (C) 2000-2001 Free Software Foundation, Inc.
++#
++# This program 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, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Library General Public License for more details.
++#
++# You should have received a copy of the GNU Library General Public
++# License along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++# USA.
++#
++# The table consists of lines of the form
++# ALIAS CANONICAL
++#
++# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
++# ALIAS is compared in a case sensitive way.
++#
++# CANONICAL is the GNU canonical name for this character encoding.
++# It must be an encoding supported by libiconv. Support by GNU libc is
++# also desirable. CANONICAL is case insensitive. Usually an upper case
++# MIME charset name is preferred.
++# The current list of GNU canonical charset names is as follows.
++#
++# name used by which systems a MIME name?
++# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
++# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
++# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
++# ISO-8859-3 glibc yes
++# ISO-8859-4 osf solaris freebsd yes
++# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
++# ISO-8859-6 glibc aix hpux solaris yes
++# ISO-8859-7 glibc aix hpux irix osf solaris yes
++# ISO-8859-8 glibc aix hpux osf solaris yes
++# ISO-8859-9 glibc aix hpux irix osf solaris yes
++# ISO-8859-13 glibc
++# ISO-8859-15 glibc aix osf solaris freebsd
++# KOI8-R glibc solaris freebsd yes
++# KOI8-U glibc freebsd yes
++# CP437 dos
++# CP775 dos
++# CP850 aix osf dos
++# CP852 dos
++# CP855 dos
++# CP856 aix
++# CP857 dos
++# CP861 dos
++# CP862 dos
++# CP864 dos
++# CP865 dos
++# CP866 freebsd dos
++# CP869 dos
++# CP874 win32 dos
++# CP922 aix
++# CP932 aix win32 dos
++# CP943 aix
++# CP949 osf win32 dos
++# CP950 win32 dos
++# CP1046 aix
++# CP1124 aix
++# CP1129 aix
++# CP1250 win32
++# CP1251 glibc win32
++# CP1252 aix win32
++# CP1253 win32
++# CP1254 win32
++# CP1255 win32
++# CP1256 win32
++# CP1257 win32
++# GB2312 glibc aix hpux irix solaris freebsd yes
++# EUC-JP glibc aix hpux irix osf solaris freebsd yes
++# EUC-KR glibc aix hpux irix osf solaris freebsd yes
++# EUC-TW glibc aix hpux irix osf solaris
++# BIG5 glibc aix hpux osf solaris freebsd yes
++# BIG5-HKSCS glibc
++# GBK aix osf win32 dos
++# GB18030 glibc
++# SHIFT_JIS hpux osf solaris freebsd yes
++# JOHAB glibc win32
++# TIS-620 glibc aix hpux osf solaris
++# VISCII glibc yes
++# HP-ROMAN8 hpux
++# HP-ARABIC8 hpux
++# HP-GREEK8 hpux
++# HP-HEBREW8 hpux
++# HP-TURKISH8 hpux
++# HP-KANA8 hpux
++# DEC-KANJI osf
++# DEC-HANYU osf
++# UTF-8 glibc aix hpux osf solaris yes
++#
++# Note: Names which are not marked as being a MIME name should not be used in
++# Internet protocols for information interchange (mail, news, etc.).
++#
++# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
++# must understand both names and treat them as equivalent.
++#
++# The first argument passed to this file is the canonical host specification,
++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
++# or
++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
++
++host="$1"
++os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
++echo "# This file contains a table of character encoding aliases,"
++echo "# suitable for operating system '${os}'."
++echo "# It was automatically generated from config.charset."
++# List of references, updated during installation:
++echo "# Packages using this file: "
++case "$os" in
++ linux* | *-gnu*)
++ # With glibc-2.1 or newer, we don't need any canonicalization,
++ # because glibc has iconv and both glibc and libiconv support all
++ # GNU canonical names directly. Therefore, the Makefile does not
++ # need to install the alias file at all.
++ # The following applies only to glibc-2.0.x and older libcs.
++ echo "ISO_646.IRV:1983 ASCII"
++ ;;
++ aix*)
++ echo "ISO8859-1 ISO-8859-1"
++ echo "ISO8859-2 ISO-8859-2"
++ echo "ISO8859-5 ISO-8859-5"
++ echo "ISO8859-6 ISO-8859-6"
++ echo "ISO8859-7 ISO-8859-7"
++ echo "ISO8859-8 ISO-8859-8"
++ echo "ISO8859-9 ISO-8859-9"
++ echo "ISO8859-15 ISO-8859-15"
++ echo "IBM-850 CP850"
++ echo "IBM-856 CP856"
++ echo "IBM-921 ISO-8859-13"
++ echo "IBM-922 CP922"
++ echo "IBM-932 CP932"
++ echo "IBM-943 CP943"
++ echo "IBM-1046 CP1046"
++ echo "IBM-1124 CP1124"
++ echo "IBM-1129 CP1129"
++ echo "IBM-1252 CP1252"
++ echo "IBM-eucCN GB2312"
++ echo "IBM-eucJP EUC-JP"
++ echo "IBM-eucKR EUC-KR"
++ echo "IBM-eucTW EUC-TW"
++ echo "big5 BIG5"
++ echo "GBK GBK"
++ echo "TIS-620 TIS-620"
++ echo "UTF-8 UTF-8"
++ ;;
++ hpux*)
++ echo "iso88591 ISO-8859-1"
++ echo "iso88592 ISO-8859-2"
++ echo "iso88595 ISO-8859-5"
++ echo "iso88596 ISO-8859-6"
++ echo "iso88597 ISO-8859-7"
++ echo "iso88598 ISO-8859-8"
++ echo "iso88599 ISO-8859-9"
++ echo "iso885915 ISO-8859-15"
++ echo "roman8 HP-ROMAN8"
++ echo "arabic8 HP-ARABIC8"
++ echo "greek8 HP-GREEK8"
++ echo "hebrew8 HP-HEBREW8"
++ echo "turkish8 HP-TURKISH8"
++ echo "kana8 HP-KANA8"
++ echo "tis620 TIS-620"
++ echo "big5 BIG5"
++ echo "eucJP EUC-JP"
++ echo "eucKR EUC-KR"
++ echo "eucTW EUC-TW"
++ echo "hp15CN GB2312"
++ #echo "ccdc ?" # what is this?
++ echo "SJIS SHIFT_JIS"
++ echo "utf8 UTF-8"
++ ;;
++ irix*)
++ echo "ISO8859-1 ISO-8859-1"
++ echo "ISO8859-2 ISO-8859-2"
++ echo "ISO8859-5 ISO-8859-5"
++ echo "ISO8859-7 ISO-8859-7"
++ echo "ISO8859-9 ISO-8859-9"
++ echo "eucCN GB2312"
++ echo "eucJP EUC-JP"
++ echo "eucKR EUC-KR"
++ echo "eucTW EUC-TW"
++ ;;
++ osf*)
++ echo "ISO8859-1 ISO-8859-1"
++ echo "ISO8859-2 ISO-8859-2"
++ echo "ISO8859-4 ISO-8859-4"
++ echo "ISO8859-5 ISO-8859-5"
++ echo "ISO8859-7 ISO-8859-7"
++ echo "ISO8859-8 ISO-8859-8"
++ echo "ISO8859-9 ISO-8859-9"
++ echo "ISO8859-15 ISO-8859-15"
++ echo "cp850 CP850"
++ echo "big5 BIG5"
++ echo "dechanyu DEC-HANYU"
++ echo "dechanzi GB2312"
++ echo "deckanji DEC-KANJI"
++ echo "deckorean EUC-KR"
++ echo "eucJP EUC-JP"
++ echo "eucKR EUC-KR"
++ echo "eucTW EUC-TW"
++ echo "GBK GBK"
++ echo "KSC5601 CP949"
++ echo "sdeckanji EUC-JP"
++ echo "SJIS SHIFT_JIS"
++ echo "TACTIS TIS-620"
++ echo "UTF-8 UTF-8"
++ ;;
++ solaris*)
++ echo "646 ASCII"
++ echo "ISO8859-1 ISO-8859-1"
++ echo "ISO8859-2 ISO-8859-2"
++ echo "ISO8859-4 ISO-8859-4"
++ echo "ISO8859-5 ISO-8859-5"
++ echo "ISO8859-6 ISO-8859-6"
++ echo "ISO8859-7 ISO-8859-7"
++ echo "ISO8859-8 ISO-8859-8"
++ echo "ISO8859-9 ISO-8859-9"
++ echo "ISO8859-15 ISO-8859-15"
++ echo "koi8-r KOI8-R"
++ echo "BIG5 BIG5"
++ echo "gb2312 GB2312"
++ echo "cns11643 EUC-TW"
++ echo "5601 EUC-KR"
++ echo "eucJP EUC-JP"
++ echo "PCK SHIFT_JIS"
++ echo "TIS620.2533 TIS-620"
++ #echo "sun_eu_greek ?" # what is this?
++ echo "UTF-8 UTF-8"
++ ;;
++ freebsd*)
++ # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
++ # localcharset.c falls back to using the full locale name
++ # from the environment variables.
++ echo "C ASCII"
++ echo "US-ASCII ASCII"
++ for l in la_LN lt_LN; do
++ echo "$l.ASCII ASCII"
++ done
++ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
++ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
++ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
++ echo "$l.ISO_8859-1 ISO-8859-1"
++ echo "$l.DIS_8859-15 ISO-8859-15"
++ done
++ for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
++ echo "$l.ISO_8859-2 ISO-8859-2"
++ done
++ for l in la_LN lt_LT; do
++ echo "$l.ISO_8859-4 ISO-8859-4"
++ done
++ for l in ru_RU ru_SU; do
++ echo "$l.KOI8-R KOI8-R"
++ echo "$l.ISO_8859-5 ISO-8859-5"
++ echo "$l.CP866 CP866"
++ done
++ echo "uk_UA.KOI8-U KOI8-U"
++ echo "zh_TW.BIG5 BIG5"
++ echo "zh_TW.Big5 BIG5"
++ echo "zh_CN.EUC GB2312"
++ echo "ja_JP.EUC EUC-JP"
++ echo "ja_JP.SJIS SHIFT_JIS"
++ echo "ja_JP.Shift_JIS SHIFT_JIS"
++ echo "ko_KR.EUC EUC-KR"
++ ;;
++ beos*)
++ # BeOS has a single locale, and it has UTF-8 encoding.
++ echo "* UTF-8"
++ ;;
++ msdosdjgpp*)
++ # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
++ # localcharset.c falls back to using the full locale name
++ # from the environment variables.
++ echo "#"
++ echo "# The encodings given here may not all be correct."
++ echo "# If you find that the encoding given for your language and"
++ echo "# country is not the one your DOS machine actually uses, just"
++ echo "# correct it in this file, and send a mail to"
++ echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
++ echo "# and Bruno Haible <haible@clisp.cons.org>."
++ echo "#"
++ echo "C ASCII"
++ # ISO-8859-1 languages
++ echo "ca CP850"
++ echo "ca_ES CP850"
++ echo "da CP865" # not CP850 ??
++ echo "da_DK CP865" # not CP850 ??
++ echo "de CP850"
++ echo "de_AT CP850"
++ echo "de_CH CP850"
++ echo "de_DE CP850"
++ echo "en CP850"
++ echo "en_AU CP850" # not CP437 ??
++ echo "en_CA CP850"
++ echo "en_GB CP850"
++ echo "en_NZ CP437"
++ echo "en_US CP437"
++ echo "en_ZA CP850" # not CP437 ??
++ echo "es CP850"
++ echo "es_AR CP850"
++ echo "es_BO CP850"
++ echo "es_CL CP850"
++ echo "es_CO CP850"
++ echo "es_CR CP850"
++ echo "es_CU CP850"
++ echo "es_DO CP850"
++ echo "es_EC CP850"
++ echo "es_ES CP850"
++ echo "es_GT CP850"
++ echo "es_HN CP850"
++ echo "es_MX CP850"
++ echo "es_NI CP850"
++ echo "es_PA CP850"
++ echo "es_PY CP850"
++ echo "es_PE CP850"
++ echo "es_SV CP850"
++ echo "es_UY CP850"
++ echo "es_VE CP850"
++ echo "et CP850"
++ echo "et_EE CP850"
++ echo "eu CP850"
++ echo "eu_ES CP850"
++ echo "fi CP850"
++ echo "fi_FI CP850"
++ echo "fr CP850"
++ echo "fr_BE CP850"
++ echo "fr_CA CP850"
++ echo "fr_CH CP850"
++ echo "fr_FR CP850"
++ echo "ga CP850"
++ echo "ga_IE CP850"
++ echo "gd CP850"
++ echo "gd_GB CP850"
++ echo "gl CP850"
++ echo "gl_ES CP850"
++ echo "id CP850" # not CP437 ??
++ echo "id_ID CP850" # not CP437 ??
++ echo "is CP861" # not CP850 ??
++ echo "is_IS CP861" # not CP850 ??
++ echo "it CP850"
++ echo "it_CH CP850"
++ echo "it_IT CP850"
++ echo "lt CP775"
++ echo "lt_LT CP775"
++ echo "lv CP775"
++ echo "lv_LV CP775"
++ echo "nb CP865" # not CP850 ??
++ echo "nb_NO CP865" # not CP850 ??
++ echo "nl CP850"
++ echo "nl_BE CP850"
++ echo "nl_NL CP850"
++ echo "nn CP865" # not CP850 ??
++ echo "nn_NO CP865" # not CP850 ??
++ echo "no CP865" # not CP850 ??
++ echo "no_NO CP865" # not CP850 ??
++ echo "pt CP850"
++ echo "pt_BR CP850"
++ echo "pt_PT CP850"
++ echo "sv CP850"
++ echo "sv_SE CP850"
++ # ISO-8859-2 languages
++ echo "cs CP852"
++ echo "cs_CZ CP852"
++ echo "hr CP852"
++ echo "hr_HR CP852"
++ echo "hu CP852"
++ echo "hu_HU CP852"
++ echo "pl CP852"
++ echo "pl_PL CP852"
++ echo "ro CP852"
++ echo "ro_RO CP852"
++ echo "sk CP852"
++ echo "sk_SK CP852"
++ echo "sl CP852"
++ echo "sl_SI CP852"
++ echo "sq CP852"
++ echo "sq_AL CP852"
++ echo "sr CP852" # CP852 or CP866 or CP855 ??
++ echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
++ # ISO-8859-3 languages
++ echo "mt CP850"
++ echo "mt_MT CP850"
++ # ISO-8859-5 languages
++ echo "be CP866"
++ echo "be_BE CP866"
++ echo "bg CP866" # not CP855 ??
++ echo "bg_BG CP866" # not CP855 ??
++ echo "mk CP866" # not CP855 ??
++ echo "mk_MK CP866" # not CP855 ??
++ echo "ru KOI8-R" # not CP866 ??
++ echo "ru_RU KOI8-R" # not CP866 ??
++ # ISO-8859-6 languages
++ echo "ar CP864"
++ echo "ar_AE CP864"
++ echo "ar_DZ CP864"
++ echo "ar_EG CP864"
++ echo "ar_IQ CP864"
++ echo "ar_IR CP864"
++ echo "ar_JO CP864"
++ echo "ar_KW CP864"
++ echo "ar_MA CP864"
++ echo "ar_OM CP864"
++ echo "ar_QA CP864"
++ echo "ar_SA CP864"
++ echo "ar_SY CP864"
++ # ISO-8859-7 languages
++ echo "el CP869"
++ echo "el_GR CP869"
++ # ISO-8859-8 languages
++ echo "he CP862"
++ echo "he_IL CP862"
++ # ISO-8859-9 languages
++ echo "tr CP857"
++ echo "tr_TR CP857"
++ # Japanese
++ echo "ja CP932"
++ echo "ja_JP CP932"
++ # Chinese
++ echo "zh_CN GBK"
++ echo "zh_TW CP950" # not CP938 ??
++ # Korean
++ echo "kr CP949" # not CP934 ??
++ echo "kr_KR CP949" # not CP934 ??
++ # Thai
++ echo "th CP874"
++ echo "th_TH CP874"
++ # Other
++ echo "eo CP850"
++ echo "eo_EO CP850"
++ ;;
++esac
+diff -urN parted-1.4.17.orig/intl/dcgettext.c parted-1.4.17/intl/dcgettext.c
+--- parted-1.4.17.orig/intl/dcgettext.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/dcgettext.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+ /* Implementation of the dcgettext(3) function.
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -19,202 +19,25 @@
+ # include <config.h>
+ #endif
+
+-#include <sys/types.h>
+-
+-#ifdef __GNUC__
+-# define alloca __builtin_alloca
+-# define HAVE_ALLOCA 1
+-#else
+-# if defined HAVE_ALLOCA_H || defined _LIBC
+-# include <alloca.h>
+-# else
+-# ifdef _AIX
+- #pragma alloca
+-# else
+-# ifndef alloca
+-char *alloca ();
+-# endif
+-# endif
+-# endif
+-#endif
+-
+-#include <errno.h>
+-#ifndef errno
+-extern int errno;
+-#endif
+-#ifndef __set_errno
+-# define __set_errno(val) errno = (val)
+-#endif
+-
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#else
+-char *getenv ();
+-# ifdef HAVE_MALLOC_H
+-# include <malloc.h>
+-# else
+-void free ();
+-# endif
+-#endif
+-
+-#if defined HAVE_STRING_H || defined _LIBC
+-# ifndef _GNU_SOURCE
+-# define _GNU_SOURCE 1
+-# endif
+-# include <string.h>
+-#else
+-# include <strings.h>
+-#endif
+-#if !HAVE_STRCHR && !defined _LIBC
+-# ifndef strchr
+-# define strchr index
+-# endif
+-#endif
+-
+-#if defined HAVE_UNISTD_H || defined _LIBC
+-# include <unistd.h>
+-#endif
+-
+-#include "gettext.h"
+ #include "gettextP.h"
+ #ifdef _LIBC
+ # include <libintl.h>
+ #else
+-# include "libgettext.h"
++# include "libgnuintl.h"
+ #endif
+-#include "hash-string.h"
+
+ /* @@ end of prolog @@ */
+
+-#ifdef _LIBC
+-/* Rename the non ANSI C functions. This is required by the standard
+- because some ANSI C functions will require linking with this object
+- file and the name space must not be polluted. */
+-# define getcwd __getcwd
+-# ifndef stpcpy
+-# define stpcpy __stpcpy
+-# endif
+-#else
+-# if !defined HAVE_GETCWD
+-char *getwd ();
+-# define getcwd(buf, max) getwd (buf)
+-# else
+-char *getcwd ();
+-# endif
+-# ifndef HAVE_STPCPY
+-static char *stpcpy PARAMS ((char *dest, const char *src));
+-# endif
+-#endif
+-
+-/* Amount to increase buffer size by in each try. */
+-#define PATH_INCR 32
+-
+-/* The following is from pathmax.h. */
+-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+- PATH_MAX but might cause redefinition warnings when sys/param.h is
+- later included (as on MORE/BSD 4.3). */
+-#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
+-# include <limits.h>
+-#endif
+-
+-#ifndef _POSIX_PATH_MAX
+-# define _POSIX_PATH_MAX 255
+-#endif
+-
+-#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
+-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+-#endif
+-
+-/* Don't include sys/param.h if it already has been. */
+-#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
+-# include <sys/param.h>
+-#endif
+-
+-#if !defined(PATH_MAX) && defined(MAXPATHLEN)
+-# define PATH_MAX MAXPATHLEN
+-#endif
+-
+-#ifndef PATH_MAX
+-# define PATH_MAX _POSIX_PATH_MAX
+-#endif
+-
+-/* XPG3 defines the result of `setlocale (category, NULL)' as:
+- ``Directs `setlocale()' to query `category' and return the current
+- setting of `local'.''
+- However it does not specify the exact format. And even worse: POSIX
+- defines this not at all. So we can use this feature only on selected
+- system (e.g. those using GNU C Library). */
+-#ifdef _LIBC
+-# define HAVE_LOCALE_NULL
+-#endif
+-
+-/* Name of the default domain used for gettext(3) prior any call to
+- textdomain(3). The default value for this is "messages". */
+-const char _nl_default_default_domain[] = "messages";
+-
+-/* Value used as the default domain for gettext(3). */
+-const char *_nl_current_default_domain = _nl_default_default_domain;
+-
+-/* Contains the default location of the message catalogs. */
+-const char _nl_default_dirname[] = GNULOCALEDIR;
+-
+-/* List with bindings of specific domains created by bindtextdomain()
+- calls. */
+-struct binding *_nl_domain_bindings;
+-
+-/* Prototypes for local functions. */
+-static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+- const char *msgid)) internal_function;
+-static const char *category_to_name PARAMS ((int category)) internal_function;
+-static const char *guess_category_value PARAMS ((int category,
+- const char *categoryname))
+- internal_function;
+-
+-
+-/* For those loosing systems which don't have `alloca' we have to add
+- some additional code emulating it. */
+-#ifdef HAVE_ALLOCA
+-/* Nothing has to be done. */
+-# define ADD_BLOCK(list, address) /* nothing */
+-# define FREE_BLOCKS(list) /* nothing */
+-#else
+-struct block_list
+-{
+- void *address;
+- struct block_list *next;
+-};
+-# define ADD_BLOCK(list, addr) \
+- do { \
+- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+- /* If we cannot get a free block we cannot add the new element to \
+- the list. */ \
+- if (newp != NULL) { \
+- newp->address = (addr); \
+- newp->next = (list); \
+- (list) = newp; \
+- } \
+- } while (0)
+-# define FREE_BLOCKS(list) \
+- do { \
+- while (list != NULL) { \
+- struct block_list *old = list; \
+- list = list->next; \
+- free (old); \
+- } \
+- } while (0)
+-# undef alloca
+-# define alloca(size) (malloc (size))
+-#endif /* have alloca */
+-
+-
+ /* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+ #ifdef _LIBC
+ # define DCGETTEXT __dcgettext
++# define DCIGETTEXT __dcigettext
+ #else
+ # define DCGETTEXT dcgettext__
++# define DCIGETTEXT dcigettext__
+ #endif
+
+ /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+@@ -225,400 +48,10 @@
+ const char *msgid;
+ int category;
+ {
+-#ifndef HAVE_ALLOCA
+- struct block_list *block_list = NULL;
+-#endif
+- struct loaded_l10nfile *domain;
+- struct binding *binding;
+- const char *categoryname;
+- const char *categoryvalue;
+- char *dirname, *xdomainname;
+- char *single_locale;
+- char *retval;
+- int saved_errno = errno;
+-
+- /* If no real MSGID is given return NULL. */
+- if (msgid == NULL)
+- return NULL;
+-
+- /* If DOMAINNAME is NULL, we are interested in the default domain. If
+- CATEGORY is not LC_MESSAGES this might not make much sense but the
+- defintion left this undefined. */
+- if (domainname == NULL)
+- domainname = _nl_current_default_domain;
+-
+- /* First find matching binding. */
+- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+- {
+- int compare = strcmp (domainname, binding->domainname);
+- if (compare == 0)
+- /* We found it! */
+- break;
+- if (compare < 0)
+- {
+- /* It is not in the list. */
+- binding = NULL;
+- break;
+- }
+- }
+-
+- if (binding == NULL)
+- dirname = (char *) _nl_default_dirname;
+- else if (binding->dirname[0] == '/')
+- dirname = binding->dirname;
+- else
+- {
+- /* We have a relative path. Make it absolute now. */
+- size_t dirname_len = strlen (binding->dirname) + 1;
+- size_t path_max;
+- char *ret;
+-
+- path_max = (unsigned) PATH_MAX;
+- path_max += 2; /* The getcwd docs say to do this. */
+-
+- dirname = (char *) alloca (path_max + dirname_len);
+- ADD_BLOCK (block_list, dirname);
+-
+- __set_errno (0);
+- while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
+- {
+- path_max += PATH_INCR;
+- dirname = (char *) alloca (path_max + dirname_len);
+- ADD_BLOCK (block_list, dirname);
+- __set_errno (0);
+- }
+-
+- if (ret == NULL)
+- {
+- /* We cannot get the current working directory. Don't signal an
+- error but simply return the default string. */
+- FREE_BLOCKS (block_list);
+- __set_errno (saved_errno);
+- return (char *) msgid;
+- }
+-
+- stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+- }
+-
+- /* Now determine the symbolic name of CATEGORY and its value. */
+- categoryname = category_to_name (category);
+- categoryvalue = guess_category_value (category, categoryname);
+-
+- xdomainname = (char *) alloca (strlen (categoryname)
+- + strlen (domainname) + 5);
+- ADD_BLOCK (block_list, xdomainname);
+-
+- stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+- domainname),
+- ".mo");
+-
+- /* Creating working area. */
+- single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+- ADD_BLOCK (block_list, single_locale);
+-
+-
+- /* Search for the given string. This is a loop because we perhaps
+- got an ordered list of languages to consider for th translation. */
+- while (1)
+- {
+- /* Make CATEGORYVALUE point to the next element of the list. */
+- while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+- ++categoryvalue;
+- if (categoryvalue[0] == '\0')
+- {
+- /* The whole contents of CATEGORYVALUE has been searched but
+- no valid entry has been found. We solve this situation
+- by implicitly appending a "C" entry, i.e. no translation
+- will take place. */
+- single_locale[0] = 'C';
+- single_locale[1] = '\0';
+- }
+- else
+- {
+- char *cp = single_locale;
+- while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+- *cp++ = *categoryvalue++;
+- *cp = '\0';
+- }
+-
+- /* If the current locale value is C (or POSIX) we don't load a
+- domain. Return the MSGID. */
+- if (strcmp (single_locale, "C") == 0
+- || strcmp (single_locale, "POSIX") == 0)
+- {
+- FREE_BLOCKS (block_list);
+- __set_errno (saved_errno);
+- return (char *) msgid;
+- }
+-
+-
+- /* Find structure describing the message catalog matching the
+- DOMAINNAME and CATEGORY. */
+- domain = _nl_find_domain (dirname, single_locale, xdomainname);
+-
+- if (domain != NULL)
+- {
+- retval = find_msg (domain, msgid);
+-
+- if (retval == NULL)
+- {
+- int cnt;
+-
+- for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+- {
+- retval = find_msg (domain->successor[cnt], msgid);
+-
+- if (retval != NULL)
+- break;
+- }
+- }
+-
+- if (retval != NULL)
+- {
+- FREE_BLOCKS (block_list);
+- __set_errno (saved_errno);
+- return retval;
+- }
+- }
+- }
+- /* NOTREACHED */
++ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+ }
+
+ #ifdef _LIBC
+ /* Alias for function name in GNU C Library. */
+ weak_alias (__dcgettext, dcgettext);
+-#endif
+-
+-
+-static char *
+-internal_function
+-find_msg (domain_file, msgid)
+- struct loaded_l10nfile *domain_file;
+- const char *msgid;
+-{
+- size_t top, act, bottom;
+- struct loaded_domain *domain;
+-
+- if (domain_file->decided == 0)
+- _nl_load_domain (domain_file);
+-
+- if (domain_file->data == NULL)
+- return NULL;
+-
+- domain = (struct loaded_domain *) domain_file->data;
+-
+- /* Locate the MSGID and its translation. */
+- if (domain->hash_size > 2 && domain->hash_tab != NULL)
+- {
+- /* Use the hashing table. */
+- nls_uint32 len = strlen (msgid);
+- nls_uint32 hash_val = hash_string (msgid);
+- nls_uint32 idx = hash_val % domain->hash_size;
+- nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+- nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+-
+- if (nstr == 0)
+- /* Hash table entry is empty. */
+- return NULL;
+-
+- if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+- && strcmp (msgid,
+- domain->data + W (domain->must_swap,
+- domain->orig_tab[nstr - 1].offset)) == 0)
+- return (char *) domain->data + W (domain->must_swap,
+- domain->trans_tab[nstr - 1].offset);
+-
+- while (1)
+- {
+- if (idx >= domain->hash_size - incr)
+- idx -= domain->hash_size - incr;
+- else
+- idx += incr;
+-
+- nstr = W (domain->must_swap, domain->hash_tab[idx]);
+- if (nstr == 0)
+- /* Hash table entry is empty. */
+- return NULL;
+-
+- if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+- && strcmp (msgid,
+- domain->data + W (domain->must_swap,
+- domain->orig_tab[nstr - 1].offset))
+- == 0)
+- return (char *) domain->data
+- + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
+- }
+- /* NOTREACHED */
+- }
+-
+- /* Now we try the default method: binary search in the sorted
+- array of messages. */
+- bottom = 0;
+- top = domain->nstrings;
+- while (bottom < top)
+- {
+- int cmp_val;
+-
+- act = (bottom + top) / 2;
+- cmp_val = strcmp (msgid, domain->data
+- + W (domain->must_swap,
+- domain->orig_tab[act].offset));
+- if (cmp_val < 0)
+- top = act;
+- else if (cmp_val > 0)
+- bottom = act + 1;
+- else
+- break;
+- }
+-
+- /* If an translation is found return this. */
+- return bottom >= top ? NULL : (char *) domain->data
+- + W (domain->must_swap,
+- domain->trans_tab[act].offset);
+-}
+-
+-
+-/* Return string representation of locale CATEGORY. */
+-static const char *
+-internal_function
+-category_to_name (category)
+- int category;
+-{
+- const char *retval;
+-
+- switch (category)
+- {
+-#ifdef LC_COLLATE
+- case LC_COLLATE:
+- retval = "LC_COLLATE";
+- break;
+-#endif
+-#ifdef LC_CTYPE
+- case LC_CTYPE:
+- retval = "LC_CTYPE";
+- break;
+-#endif
+-#ifdef LC_MONETARY
+- case LC_MONETARY:
+- retval = "LC_MONETARY";
+- break;
+-#endif
+-#ifdef LC_NUMERIC
+- case LC_NUMERIC:
+- retval = "LC_NUMERIC";
+- break;
+-#endif
+-#ifdef LC_TIME
+- case LC_TIME:
+- retval = "LC_TIME";
+- break;
+-#endif
+-#ifdef LC_MESSAGES
+- case LC_MESSAGES:
+- retval = "LC_MESSAGES";
+- break;
+-#endif
+-#ifdef LC_RESPONSE
+- case LC_RESPONSE:
+- retval = "LC_RESPONSE";
+- break;
+-#endif
+-#ifdef LC_ALL
+- case LC_ALL:
+- /* This might not make sense but is perhaps better than any other
+- value. */
+- retval = "LC_ALL";
+- break;
+-#endif
+- default:
+- /* If you have a better idea for a default value let me know. */
+- retval = "LC_XXX";
+- }
+-
+- return retval;
+-}
+-
+-/* Guess value of current locale from value of the environment variables. */
+-static const char *
+-internal_function
+-guess_category_value (category, categoryname)
+- int category;
+- const char *categoryname;
+-{
+- const char *retval;
+-
+- /* The highest priority value is the `LANGUAGE' environment
+- variable. This is a GNU extension. */
+- retval = getenv ("LANGUAGE");
+- if (retval != NULL && retval[0] != '\0')
+- return retval;
+-
+- /* `LANGUAGE' is not set. So we have to proceed with the POSIX
+- methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some
+- systems this can be done by the `setlocale' function itself. */
+-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+- return setlocale (category, NULL);
+-#else
+- /* Setting of LC_ALL overwrites all other. */
+- retval = getenv ("LC_ALL");
+- if (retval != NULL && retval[0] != '\0')
+- return retval;
+-
+- /* Next comes the name of the desired category. */
+- retval = getenv (categoryname);
+- if (retval != NULL && retval[0] != '\0')
+- return retval;
+-
+- /* Last possibility is the LANG environment variable. */
+- retval = getenv ("LANG");
+- if (retval != NULL && retval[0] != '\0')
+- return retval;
+-
+- /* We use C as the default domain. POSIX says this is implementation
+- defined. */
+- return "C";
+-#endif
+-}
+-
+-/* @@ begin of epilog @@ */
+-
+-/* We don't want libintl.a to depend on any other library. So we
+- avoid the non-standard function stpcpy. In GNU C Library this
+- function is available, though. Also allow the symbol HAVE_STPCPY
+- to be defined. */
+-#if !_LIBC && !HAVE_STPCPY
+-static char *
+-stpcpy (dest, src)
+- char *dest;
+- const char *src;
+-{
+- while ((*dest++ = *src++) != '\0')
+- /* Do nothing. */ ;
+- return dest - 1;
+-}
+-#endif
+-
+-
+-#ifdef _LIBC
+-/* If we want to free all resources we have to do some work at
+- program's end. */
+-static void __attribute__ ((unused))
+-free_mem (void)
+-{
+- struct binding *runp;
+-
+- for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
+- {
+- free (runp->domainname);
+- if (runp->dirname != _nl_default_dirname)
+- /* Yes, this is a pointer comparison. */
+- free (runp->dirname);
+- }
+-
+- if (_nl_current_default_domain != _nl_default_default_domain)
+- /* Yes, again a pointer comparison. */
+- free ((char *) _nl_current_default_domain);
+-}
+-
+-text_set_element (__libc_subfreeres, free_mem);
+ #endif
+diff -urN parted-1.4.17.orig/intl/dcigettext.c parted-1.4.17/intl/dcigettext.c
+--- parted-1.4.17.orig/intl/dcigettext.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/dcigettext.c Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,1258 @@
++/* Implementation of the internal dcigettext function.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
++ This must come before <config.h> because <config.h> may include
++ <features.h>, and once <features.h> has been included, it's too late. */
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <sys/types.h>
++
++#ifdef __GNUC__
++# define alloca __builtin_alloca
++# define HAVE_ALLOCA 1
++#else
++# if defined HAVE_ALLOCA_H || defined _LIBC
++# include <alloca.h>
++# else
++# ifdef _AIX
++ #pragma alloca
++# else
++# ifndef alloca
++char *alloca ();
++# endif
++# endif
++# endif
++#endif
++
++#include <errno.h>
++#ifndef errno
++extern int errno;
++#endif
++#ifndef __set_errno
++# define __set_errno(val) errno = (val)
++#endif
++
++#include <stddef.h>
++#include <stdlib.h>
++
++#include <string.h>
++#if !HAVE_STRCHR && !defined _LIBC
++# ifndef strchr
++# define strchr index
++# endif
++#endif
++
++#if defined HAVE_UNISTD_H || defined _LIBC
++# include <unistd.h>
++#endif
++
++#include <locale.h>
++
++#if defined HAVE_SYS_PARAM_H || defined _LIBC
++# include <sys/param.h>
++#endif
++
++#include "gettextP.h"
++#ifdef _LIBC
++# include <libintl.h>
++#else
++# include "libgnuintl.h"
++#endif
++#include "hash-string.h"
++
++/* Thread safetyness. */
++#ifdef _LIBC
++# include <bits/libc-lock.h>
++#else
++/* Provide dummy implementation if this is outside glibc. */
++# define __libc_lock_define_initialized(CLASS, NAME)
++# define __libc_lock_lock(NAME)
++# define __libc_lock_unlock(NAME)
++# define __libc_rwlock_define_initialized(CLASS, NAME)
++# define __libc_rwlock_rdlock(NAME)
++# define __libc_rwlock_unlock(NAME)
++#endif
++
++/* Alignment of types. */
++#if defined __GNUC__ && __GNUC__ >= 2
++# define alignof(TYPE) __alignof__ (TYPE)
++#else
++# define alignof(TYPE) \
++ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
++#endif
++
++/* The internal variables in the standalone libintl.a must have different
++ names than the internal variables in GNU libc, otherwise programs
++ using libintl.a cannot be linked statically. */
++#if !defined _LIBC
++# define _nl_default_default_domain _nl_default_default_domain__
++# define _nl_current_default_domain _nl_current_default_domain__
++# define _nl_default_dirname _nl_default_dirname__
++# define _nl_domain_bindings _nl_domain_bindings__
++#endif
++
++/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
++#ifndef offsetof
++# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
++#endif
++
++/* @@ end of prolog @@ */
++
++#ifdef _LIBC
++/* Rename the non ANSI C functions. This is required by the standard
++ because some ANSI C functions will require linking with this object
++ file and the name space must not be polluted. */
++# define getcwd __getcwd
++# ifndef stpcpy
++# define stpcpy __stpcpy
++# endif
++# define tfind __tfind
++#else
++# if !defined HAVE_GETCWD
++char *getwd ();
++# define getcwd(buf, max) getwd (buf)
++# else
++char *getcwd ();
++# endif
++# ifndef HAVE_STPCPY
++static char *stpcpy PARAMS ((char *dest, const char *src));
++# endif
++# ifndef HAVE_MEMPCPY
++static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
++# endif
++#endif
++
++/* Amount to increase buffer size by in each try. */
++#define PATH_INCR 32
++
++/* The following is from pathmax.h. */
++/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
++ PATH_MAX but might cause redefinition warnings when sys/param.h is
++ later included (as on MORE/BSD 4.3). */
++#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
++# include <limits.h>
++#endif
++
++#ifndef _POSIX_PATH_MAX
++# define _POSIX_PATH_MAX 255
++#endif
++
++#if !defined PATH_MAX && defined _PC_PATH_MAX
++# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
++#endif
++
++/* Don't include sys/param.h if it already has been. */
++#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
++# include <sys/param.h>
++#endif
++
++#if !defined PATH_MAX && defined MAXPATHLEN
++# define PATH_MAX MAXPATHLEN
++#endif
++
++#ifndef PATH_MAX
++# define PATH_MAX _POSIX_PATH_MAX
++#endif
++
++/* Pathname support.
++ ISSLASH(C) tests whether C is a directory separator character.
++ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
++ it may be concatenated to a directory pathname.
++ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
++ */
++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
++# define HAS_DEVICE(P) \
++ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
++ && (P)[1] == ':')
++# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
++# define IS_PATH_WITH_DIR(P) \
++ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
++#else
++ /* Unix */
++# define ISSLASH(C) ((C) == '/')
++# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
++# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
++#endif
++
++/* XPG3 defines the result of `setlocale (category, NULL)' as:
++ ``Directs `setlocale()' to query `category' and return the current
++ setting of `local'.''
++ However it does not specify the exact format. Neither do SUSV2 and
++ ISO C 99. So we can use this feature only on selected systems (e.g.
++ those using GNU C Library). */
++#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
++# define HAVE_LOCALE_NULL
++#endif
++
++/* This is the type used for the search tree where known translations
++ are stored. */
++struct known_translation_t
++{
++ /* Domain in which to search. */
++ char *domainname;
++
++ /* The category. */
++ int category;
++
++ /* State of the catalog counter at the point the string was found. */
++ int counter;
++
++ /* Catalog where the string was found. */
++ struct loaded_l10nfile *domain;
++
++ /* And finally the translation. */
++ const char *translation;
++ size_t translation_length;
++
++ /* Pointer to the string in question. */
++ char msgid[ZERO];
++};
++
++/* Root of the search tree with known translations. We can use this
++ only if the system provides the `tsearch' function family. */
++#if defined HAVE_TSEARCH || defined _LIBC
++# include <search.h>
++
++static void *root;
++
++# ifdef _LIBC
++# define tsearch __tsearch
++# endif
++
++/* Function to compare two entries in the table of known translations. */
++static int transcmp PARAMS ((const void *p1, const void *p2));
++static int
++transcmp (p1, p2)
++ const void *p1;
++ const void *p2;
++{
++ const struct known_translation_t *s1;
++ const struct known_translation_t *s2;
++ int result;
++
++ s1 = (const struct known_translation_t *) p1;
++ s2 = (const struct known_translation_t *) p2;
++
++ result = strcmp (s1->msgid, s2->msgid);
++ if (result == 0)
++ {
++ result = strcmp (s1->domainname, s2->domainname);
++ if (result == 0)
++ /* We compare the category last (though this is the cheapest
++ operation) since it is hopefully always the same (namely
++ LC_MESSAGES). */
++ result = s1->category - s2->category;
++ }
++
++ return result;
++}
++#endif
++
++/* Name of the default domain used for gettext(3) prior any call to
++ textdomain(3). The default value for this is "messages". */
++const char _nl_default_default_domain[] = "messages";
++
++/* Value used as the default domain for gettext(3). */
++const char *_nl_current_default_domain = _nl_default_default_domain;
++
++/* Contains the default location of the message catalogs. */
++const char _nl_default_dirname[] = LOCALEDIR;
++
++/* List with bindings of specific domains created by bindtextdomain()
++ calls. */
++struct binding *_nl_domain_bindings;
++
++/* Prototypes for local functions. */
++static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
++ unsigned long int n,
++ const char *translation,
++ size_t translation_len))
++ internal_function;
++static unsigned long int plural_eval PARAMS ((struct expression *pexp,
++ unsigned long int n))
++ internal_function;
++static const char *category_to_name PARAMS ((int category)) internal_function;
++static const char *guess_category_value PARAMS ((int category,
++ const char *categoryname))
++ internal_function;
++
++
++/* For those loosing systems which don't have `alloca' we have to add
++ some additional code emulating it. */
++#ifdef HAVE_ALLOCA
++/* Nothing has to be done. */
++# define ADD_BLOCK(list, address) /* nothing */
++# define FREE_BLOCKS(list) /* nothing */
++#else
++struct block_list
++{
++ void *address;
++ struct block_list *next;
++};
++# define ADD_BLOCK(list, addr) \
++ do { \
++ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
++ /* If we cannot get a free block we cannot add the new element to \
++ the list. */ \
++ if (newp != NULL) { \
++ newp->address = (addr); \
++ newp->next = (list); \
++ (list) = newp; \
++ } \
++ } while (0)
++# define FREE_BLOCKS(list) \
++ do { \
++ while (list != NULL) { \
++ struct block_list *old = list; \
++ list = list->next; \
++ free (old); \
++ } \
++ } while (0)
++# undef alloca
++# define alloca(size) (malloc (size))
++#endif /* have alloca */
++
++
++#ifdef _LIBC
++/* List of blocks allocated for translations. */
++typedef struct transmem_list
++{
++ struct transmem_list *next;
++ char data[ZERO];
++} transmem_block_t;
++static struct transmem_list *transmem_list;
++#else
++typedef unsigned char transmem_block_t;
++#endif
++
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define DCIGETTEXT __dcigettext
++#else
++# define DCIGETTEXT dcigettext__
++#endif
++
++/* Lock variable to protect the global data in the gettext implementation. */
++#ifdef _LIBC
++__libc_rwlock_define_initialized (, _nl_state_lock)
++#endif
++
++/* Checking whether the binaries runs SUID must be done and glibc provides
++ easier methods therefore we make a difference here. */
++#ifdef _LIBC
++# define ENABLE_SECURE __libc_enable_secure
++# define DETERMINE_SECURE
++#else
++# ifndef HAVE_GETUID
++# define getuid() 0
++# endif
++# ifndef HAVE_GETGID
++# define getgid() 0
++# endif
++# ifndef HAVE_GETEUID
++# define geteuid() getuid()
++# endif
++# ifndef HAVE_GETEGID
++# define getegid() getgid()
++# endif
++static int enable_secure;
++# define ENABLE_SECURE (enable_secure == 1)
++# define DETERMINE_SECURE \
++ if (enable_secure == 0) \
++ { \
++ if (getuid () != geteuid () || getgid () != getegid ()) \
++ enable_secure = 1; \
++ else \
++ enable_secure = -1; \
++ }
++#endif
++
++/* Look up MSGID in the DOMAINNAME message catalog for the current
++ CATEGORY locale and, if PLURAL is nonzero, search over string
++ depending on the plural form determined by N. */
++char *
++DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
++ const char *domainname;
++ const char *msgid1;
++ const char *msgid2;
++ int plural;
++ unsigned long int n;
++ int category;
++{
++#ifndef HAVE_ALLOCA
++ struct block_list *block_list = NULL;
++#endif
++ struct loaded_l10nfile *domain;
++ struct binding *binding;
++ const char *categoryname;
++ const char *categoryvalue;
++ char *dirname, *xdomainname;
++ char *single_locale;
++ char *retval;
++ size_t retlen;
++ int saved_errno;
++#if defined HAVE_TSEARCH || defined _LIBC
++ struct known_translation_t *search;
++ struct known_translation_t **foundp = NULL;
++ size_t msgid_len;
++#endif
++ size_t domainname_len;
++
++ /* If no real MSGID is given return NULL. */
++ if (msgid1 == NULL)
++ return NULL;
++
++ __libc_rwlock_rdlock (_nl_state_lock);
++
++ /* If DOMAINNAME is NULL, we are interested in the default domain. If
++ CATEGORY is not LC_MESSAGES this might not make much sense but the
++ definition left this undefined. */
++ if (domainname == NULL)
++ domainname = _nl_current_default_domain;
++
++#if defined HAVE_TSEARCH || defined _LIBC
++ msgid_len = strlen (msgid1) + 1;
++
++ /* Try to find the translation among those which we found at
++ some time. */
++ search = (struct known_translation_t *)
++ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
++ memcpy (search->msgid, msgid1, msgid_len);
++ search->domainname = (char *) domainname;
++ search->category = category;
++
++ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
++ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
++ {
++ /* Now deal with plural. */
++ if (plural)
++ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
++ (*foundp)->translation_length);
++ else
++ retval = (char *) (*foundp)->translation;
++
++ __libc_rwlock_unlock (_nl_state_lock);
++ return retval;
++ }
++#endif
++
++ /* Preserve the `errno' value. */
++ saved_errno = errno;
++
++ /* See whether this is a SUID binary or not. */
++ DETERMINE_SECURE;
++
++ /* First find matching binding. */
++ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
++ {
++ int compare = strcmp (domainname, binding->domainname);
++ if (compare == 0)
++ /* We found it! */
++ break;
++ if (compare < 0)
++ {
++ /* It is not in the list. */
++ binding = NULL;
++ break;
++ }
++ }
++
++ if (binding == NULL)
++ dirname = (char *) _nl_default_dirname;
++ else if (IS_ABSOLUTE_PATH (binding->dirname))
++ dirname = binding->dirname;
++ else
++ {
++ /* We have a relative path. Make it absolute now. */
++ size_t dirname_len = strlen (binding->dirname) + 1;
++ size_t path_max;
++ char *ret;
++
++ path_max = (unsigned int) PATH_MAX;
++ path_max += 2; /* The getcwd docs say to do this. */
++
++ for (;;)
++ {
++ dirname = (char *) alloca (path_max + dirname_len);
++ ADD_BLOCK (block_list, dirname);
++
++ __set_errno (0);
++ ret = getcwd (dirname, path_max);
++ if (ret != NULL || errno != ERANGE)
++ break;
++
++ path_max += path_max / 2;
++ path_max += PATH_INCR;
++ }
++
++ if (ret == NULL)
++ {
++ /* We cannot get the current working directory. Don't signal an
++ error but simply return the default string. */
++ FREE_BLOCKS (block_list);
++ __libc_rwlock_unlock (_nl_state_lock);
++ __set_errno (saved_errno);
++ return (plural == 0
++ ? (char *) msgid1
++ /* Use the Germanic plural rule. */
++ : n == 1 ? (char *) msgid1 : (char *) msgid2);
++ }
++
++ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
++ }
++
++ /* Now determine the symbolic name of CATEGORY and its value. */
++ categoryname = category_to_name (category);
++ categoryvalue = guess_category_value (category, categoryname);
++
++ domainname_len = strlen (domainname);
++ xdomainname = (char *) alloca (strlen (categoryname)
++ + domainname_len + 5);
++ ADD_BLOCK (block_list, xdomainname);
++
++ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
++ domainname, domainname_len),
++ ".mo");
++
++ /* Creating working area. */
++ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
++ ADD_BLOCK (block_list, single_locale);
++
++
++ /* Search for the given string. This is a loop because we perhaps
++ got an ordered list of languages to consider for the translation. */
++ while (1)
++ {
++ /* Make CATEGORYVALUE point to the next element of the list. */
++ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
++ ++categoryvalue;
++ if (categoryvalue[0] == '\0')
++ {
++ /* The whole contents of CATEGORYVALUE has been searched but
++ no valid entry has been found. We solve this situation
++ by implicitly appending a "C" entry, i.e. no translation
++ will take place. */
++ single_locale[0] = 'C';
++ single_locale[1] = '\0';
++ }
++ else
++ {
++ char *cp = single_locale;
++ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
++ *cp++ = *categoryvalue++;
++ *cp = '\0';
++
++ /* When this is a SUID binary we must not allow accessing files
++ outside the dedicated directories. */
++ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
++ /* Ingore this entry. */
++ continue;
++ }
++
++ /* If the current locale value is C (or POSIX) we don't load a
++ domain. Return the MSGID. */
++ if (strcmp (single_locale, "C") == 0
++ || strcmp (single_locale, "POSIX") == 0)
++ {
++ FREE_BLOCKS (block_list);
++ __libc_rwlock_unlock (_nl_state_lock);
++ __set_errno (saved_errno);
++ return (plural == 0
++ ? (char *) msgid1
++ /* Use the Germanic plural rule. */
++ : n == 1 ? (char *) msgid1 : (char *) msgid2);
++ }
++
++
++ /* Find structure describing the message catalog matching the
++ DOMAINNAME and CATEGORY. */
++ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
++
++ if (domain != NULL)
++ {
++ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
++
++ if (retval == NULL)
++ {
++ int cnt;
++
++ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
++ {
++ retval = _nl_find_msg (domain->successor[cnt], binding,
++ msgid1, &retlen);
++
++ if (retval != NULL)
++ {
++ domain = domain->successor[cnt];
++ break;
++ }
++ }
++ }
++
++ if (retval != NULL)
++ {
++ /* Found the translation of MSGID1 in domain DOMAIN:
++ starting at RETVAL, RETLEN bytes. */
++ FREE_BLOCKS (block_list);
++ __set_errno (saved_errno);
++#if defined HAVE_TSEARCH || defined _LIBC
++ if (foundp == NULL)
++ {
++ /* Create a new entry and add it to the search tree. */
++ struct known_translation_t *newp;
++
++ newp = (struct known_translation_t *)
++ malloc (offsetof (struct known_translation_t, msgid)
++ + msgid_len + domainname_len + 1);
++ if (newp != NULL)
++ {
++ newp->domainname =
++ mempcpy (newp->msgid, msgid1, msgid_len);
++ memcpy (newp->domainname, domainname, domainname_len + 1);
++ newp->category = category;
++ newp->counter = _nl_msg_cat_cntr;
++ newp->domain = domain;
++ newp->translation = retval;
++ newp->translation_length = retlen;
++
++ /* Insert the entry in the search tree. */
++ foundp = (struct known_translation_t **)
++ tsearch (newp, &root, transcmp);
++ if (foundp == NULL
++ || __builtin_expect (*foundp != newp, 0))
++ /* The insert failed. */
++ free (newp);
++ }
++ }
++ else
++ {
++ /* We can update the existing entry. */
++ (*foundp)->counter = _nl_msg_cat_cntr;
++ (*foundp)->domain = domain;
++ (*foundp)->translation = retval;
++ (*foundp)->translation_length = retlen;
++ }
++#endif
++ /* Now deal with plural. */
++ if (plural)
++ retval = plural_lookup (domain, n, retval, retlen);
++
++ __libc_rwlock_unlock (_nl_state_lock);
++ return retval;
++ }
++ }
++ }
++ /* NOTREACHED */
++}
++
++
++char *
++internal_function
++_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
++ struct loaded_l10nfile *domain_file;
++ struct binding *domainbinding;
++ const char *msgid;
++ size_t *lengthp;
++{
++ struct loaded_domain *domain;
++ size_t act;
++ char *result;
++ size_t resultlen;
++
++ if (domain_file->decided == 0)
++ _nl_load_domain (domain_file, domainbinding);
++
++ if (domain_file->data == NULL)
++ return NULL;
++
++ domain = (struct loaded_domain *) domain_file->data;
++
++ /* Locate the MSGID and its translation. */
++ if (domain->hash_size > 2 && domain->hash_tab != NULL)
++ {
++ /* Use the hashing table. */
++ nls_uint32 len = strlen (msgid);
++ nls_uint32 hash_val = hash_string (msgid);
++ nls_uint32 idx = hash_val % domain->hash_size;
++ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
++
++ while (1)
++ {
++ nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
++
++ if (nstr == 0)
++ /* Hash table entry is empty. */
++ return NULL;
++
++ /* Compare msgid with the original string at index nstr-1.
++ We compare the lengths with >=, not ==, because plural entries
++ are represented by strings with an embedded NUL. */
++ if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
++ && (strcmp (msgid,
++ domain->data + W (domain->must_swap,
++ domain->orig_tab[nstr - 1].offset))
++ == 0))
++ {
++ act = nstr - 1;
++ goto found;
++ }
++
++ if (idx >= domain->hash_size - incr)
++ idx -= domain->hash_size - incr;
++ else
++ idx += incr;
++ }
++ /* NOTREACHED */
++ }
++ else
++ {
++ /* Try the default method: binary search in the sorted array of
++ messages. */
++ size_t top, bottom;
++
++ bottom = 0;
++ top = domain->nstrings;
++ while (bottom < top)
++ {
++ int cmp_val;
++
++ act = (bottom + top) / 2;
++ cmp_val = strcmp (msgid, (domain->data
++ + W (domain->must_swap,
++ domain->orig_tab[act].offset)));
++ if (cmp_val < 0)
++ top = act;
++ else if (cmp_val > 0)
++ bottom = act + 1;
++ else
++ goto found;
++ }
++ /* No translation was found. */
++ return NULL;
++ }
++
++ found:
++ /* The translation was found at index ACT. If we have to convert the
++ string to use a different character set, this is the time. */
++ result = ((char *) domain->data
++ + W (domain->must_swap, domain->trans_tab[act].offset));
++ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
++
++#if defined _LIBC || HAVE_ICONV
++ if (domain->codeset_cntr
++ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
++ {
++ /* The domain's codeset has changed through bind_textdomain_codeset()
++ since the message catalog was initialized or last accessed. We
++ have to reinitialize the converter. */
++ _nl_free_domain_conv (domain);
++ _nl_init_domain_conv (domain_file, domain, domainbinding);
++ }
++
++ if (
++# ifdef _LIBC
++ domain->conv != (__gconv_t) -1
++# else
++# if HAVE_ICONV
++ domain->conv != (iconv_t) -1
++# endif
++# endif
++ )
++ {
++ /* We are supposed to do a conversion. First allocate an
++ appropriate table with the same structure as the table
++ of translations in the file, where we can put the pointers
++ to the converted strings in.
++ There is a slight complication with plural entries. They
++ are represented by consecutive NUL terminated strings. We
++ handle this case by converting RESULTLEN bytes, including
++ NULs. */
++
++ if (domain->conv_tab == NULL
++ && ((domain->conv_tab = (char **) calloc (domain->nstrings,
++ sizeof (char *)))
++ == NULL))
++ /* Mark that we didn't succeed allocating a table. */
++ domain->conv_tab = (char **) -1;
++
++ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
++ /* Nothing we can do, no more memory. */
++ goto converted;
++
++ if (domain->conv_tab[act] == NULL)
++ {
++ /* We haven't used this string so far, so it is not
++ translated yet. Do this now. */
++ /* We use a bit more efficient memory handling.
++ We allocate always larger blocks which get used over
++ time. This is faster than many small allocations. */
++ __libc_lock_define_initialized (static, lock)
++# define INITIAL_BLOCK_SIZE 4080
++ static unsigned char *freemem;
++ static size_t freemem_size;
++
++ const unsigned char *inbuf;
++ unsigned char *outbuf;
++ int malloc_count;
++# ifndef _LIBC
++ transmem_block_t *transmem_list = NULL;
++# endif
++
++ __libc_lock_lock (lock);
++
++ inbuf = (const unsigned char *) result;
++ outbuf = freemem + sizeof (size_t);
++
++ malloc_count = 0;
++ while (1)
++ {
++ transmem_block_t *newmem;
++# ifdef _LIBC
++ size_t non_reversible;
++ int res;
++
++ if (freemem_size < sizeof (size_t))
++ goto resize_freemem;
++
++ res = __gconv (domain->conv,
++ &inbuf, inbuf + resultlen,
++ &outbuf,
++ outbuf + freemem_size - sizeof (size_t),
++ &non_reversible);
++
++ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
++ break;
++
++ if (res != __GCONV_FULL_OUTPUT)
++ {
++ __libc_lock_unlock (lock);
++ goto converted;
++ }
++
++ inbuf = result;
++# else
++# if HAVE_ICONV
++ const char *inptr = (const char *) inbuf;
++ size_t inleft = resultlen;
++ char *outptr = (char *) outbuf;
++ size_t outleft;
++
++ if (freemem_size < sizeof (size_t))
++ goto resize_freemem;
++
++ outleft = freemem_size - sizeof (size_t);
++ if (iconv (domain->conv,
++ (ICONV_CONST char **) &inptr, &inleft,
++ &outptr, &outleft)
++ != (size_t) (-1))
++ {
++ outbuf = (unsigned char *) outptr;
++ break;
++ }
++ if (errno != E2BIG)
++ {
++ __libc_lock_unlock (lock);
++ goto converted;
++ }
++# endif
++# endif
++
++ resize_freemem:
++ /* We must allocate a new buffer or resize the old one. */
++ if (malloc_count > 0)
++ {
++ ++malloc_count;
++ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
++ newmem = (transmem_block_t *) realloc (transmem_list,
++ freemem_size);
++# ifdef _LIBC
++ if (newmem != NULL)
++ transmem_list = transmem_list->next;
++ else
++ {
++ struct transmem_list *old = transmem_list;
++
++ transmem_list = transmem_list->next;
++ free (old);
++ }
++# endif
++ }
++ else
++ {
++ malloc_count = 1;
++ freemem_size = INITIAL_BLOCK_SIZE;
++ newmem = (transmem_block_t *) malloc (freemem_size);
++ }
++ if (__builtin_expect (newmem == NULL, 0))
++ {
++ freemem = NULL;
++ freemem_size = 0;
++ __libc_lock_unlock (lock);
++ goto converted;
++ }
++
++# ifdef _LIBC
++ /* Add the block to the list of blocks we have to free
++ at some point. */
++ newmem->next = transmem_list;
++ transmem_list = newmem;
++
++ freemem = newmem->data;
++ freemem_size -= offsetof (struct transmem_list, data);
++# else
++ transmem_list = newmem;
++ freemem = newmem;
++# endif
++
++ outbuf = freemem + sizeof (size_t);
++ }
++
++ /* We have now in our buffer a converted string. Put this
++ into the table of conversions. */
++ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
++ domain->conv_tab[act] = (char *) freemem;
++ /* Shrink freemem, but keep it aligned. */
++ freemem_size -= outbuf - freemem;
++ freemem = outbuf;
++ freemem += freemem_size & (alignof (size_t) - 1);
++ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
++
++ __libc_lock_unlock (lock);
++ }
++
++ /* Now domain->conv_tab[act] contains the translation of all
++ the plural variants. */
++ result = domain->conv_tab[act] + sizeof (size_t);
++ resultlen = *(size_t *) domain->conv_tab[act];
++ }
++
++ converted:
++ /* The result string is converted. */
++
++#endif /* _LIBC || HAVE_ICONV */
++
++ *lengthp = resultlen;
++ return result;
++}
++
++
++/* Look up a plural variant. */
++static char *
++internal_function
++plural_lookup (domain, n, translation, translation_len)
++ struct loaded_l10nfile *domain;
++ unsigned long int n;
++ const char *translation;
++ size_t translation_len;
++{
++ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
++ unsigned long int index;
++ const char *p;
++
++ index = plural_eval (domaindata->plural, n);
++ if (index >= domaindata->nplurals)
++ /* This should never happen. It means the plural expression and the
++ given maximum value do not match. */
++ index = 0;
++
++ /* Skip INDEX strings at TRANSLATION. */
++ p = translation;
++ while (index-- > 0)
++ {
++#ifdef _LIBC
++ p = __rawmemchr (p, '\0');
++#else
++ p = strchr (p, '\0');
++#endif
++ /* And skip over the NUL byte. */
++ p++;
++
++ if (p >= translation + translation_len)
++ /* This should never happen. It means the plural expression
++ evaluated to a value larger than the number of variants
++ available for MSGID1. */
++ return (char *) translation;
++ }
++ return (char *) p;
++}
++
++
++/* Function to evaluate the plural expression and return an index value. */
++static unsigned long int
++internal_function
++plural_eval (pexp, n)
++ struct expression *pexp;
++ unsigned long int n;
++{
++ switch (pexp->nargs)
++ {
++ case 0:
++ switch (pexp->operation)
++ {
++ case var:
++ return n;
++ case num:
++ return pexp->val.num;
++ default:
++ break;
++ }
++ /* NOTREACHED */
++ break;
++ case 1:
++ {
++ /* pexp->operation must be lnot. */
++ unsigned long int arg = plural_eval (pexp->val.args[0], n);
++ return ! arg;
++ }
++ case 2:
++ {
++ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
++ if (pexp->operation == lor)
++ return leftarg || plural_eval (pexp->val.args[1], n);
++ else if (pexp->operation == land)
++ return leftarg && plural_eval (pexp->val.args[1], n);
++ else
++ {
++ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
++
++ switch (pexp->operation)
++ {
++ case mult:
++ return leftarg * rightarg;
++ case divide:
++ return leftarg / rightarg;
++ case module:
++ return leftarg % rightarg;
++ case plus:
++ return leftarg + rightarg;
++ case minus:
++ return leftarg - rightarg;
++ case less_than:
++ return leftarg < rightarg;
++ case greater_than:
++ return leftarg > rightarg;
++ case less_or_equal:
++ return leftarg <= rightarg;
++ case greater_or_equal:
++ return leftarg >= rightarg;
++ case equal:
++ return leftarg == rightarg;
++ case not_equal:
++ return leftarg != rightarg;
++ default:
++ break;
++ }
++ }
++ /* NOTREACHED */
++ break;
++ }
++ case 3:
++ {
++ /* pexp->operation must be qmop. */
++ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
++ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
++ }
++ }
++ /* NOTREACHED */
++ return 0;
++}
++
++
++/* Return string representation of locale CATEGORY. */
++static const char *
++internal_function
++category_to_name (category)
++ int category;
++{
++ const char *retval;
++
++ switch (category)
++ {
++#ifdef LC_COLLATE
++ case LC_COLLATE:
++ retval = "LC_COLLATE";
++ break;
++#endif
++#ifdef LC_CTYPE
++ case LC_CTYPE:
++ retval = "LC_CTYPE";
++ break;
++#endif
++#ifdef LC_MONETARY
++ case LC_MONETARY:
++ retval = "LC_MONETARY";
++ break;
++#endif
++#ifdef LC_NUMERIC
++ case LC_NUMERIC:
++ retval = "LC_NUMERIC";
++ break;
++#endif
++#ifdef LC_TIME
++ case LC_TIME:
++ retval = "LC_TIME";
++ break;
++#endif
++#ifdef LC_MESSAGES
++ case LC_MESSAGES:
++ retval = "LC_MESSAGES";
++ break;
++#endif
++#ifdef LC_RESPONSE
++ case LC_RESPONSE:
++ retval = "LC_RESPONSE";
++ break;
++#endif
++#ifdef LC_ALL
++ case LC_ALL:
++ /* This might not make sense but is perhaps better than any other
++ value. */
++ retval = "LC_ALL";
++ break;
++#endif
++ default:
++ /* If you have a better idea for a default value let me know. */
++ retval = "LC_XXX";
++ }
++
++ return retval;
++}
++
++/* Guess value of current locale from value of the environment variables. */
++static const char *
++internal_function
++guess_category_value (category, categoryname)
++ int category;
++ const char *categoryname;
++{
++ const char *language;
++ const char *retval;
++
++ /* The highest priority value is the `LANGUAGE' environment
++ variable. But we don't use the value if the currently selected
++ locale is the C locale. This is a GNU extension. */
++ language = getenv ("LANGUAGE");
++ if (language != NULL && language[0] == '\0')
++ language = NULL;
++
++ /* We have to proceed with the POSIX methods of looking to `LC_ALL',
++ `LC_xxx', and `LANG'. On some systems this can be done by the
++ `setlocale' function itself. */
++#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
++ retval = setlocale (category, NULL);
++#else
++ /* Setting of LC_ALL overwrites all other. */
++ retval = getenv ("LC_ALL");
++ if (retval == NULL || retval[0] == '\0')
++ {
++ /* Next comes the name of the desired category. */
++ retval = getenv (categoryname);
++ if (retval == NULL || retval[0] == '\0')
++ {
++ /* Last possibility is the LANG environment variable. */
++ retval = getenv ("LANG");
++ if (retval == NULL || retval[0] == '\0')
++ /* We use C as the default domain. POSIX says this is
++ implementation defined. */
++ return "C";
++ }
++ }
++#endif
++
++ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
++}
++
++/* @@ begin of epilog @@ */
++
++/* We don't want libintl.a to depend on any other library. So we
++ avoid the non-standard function stpcpy. In GNU C Library this
++ function is available, though. Also allow the symbol HAVE_STPCPY
++ to be defined. */
++#if !_LIBC && !HAVE_STPCPY
++static char *
++stpcpy (dest, src)
++ char *dest;
++ const char *src;
++{
++ while ((*dest++ = *src++) != '\0')
++ /* Do nothing. */ ;
++ return dest - 1;
++}
++#endif
++
++#if !_LIBC && !HAVE_MEMPCPY
++static void *
++mempcpy (dest, src, n)
++ void *dest;
++ const void *src;
++ size_t n;
++{
++ return (void *) ((char *) memcpy (dest, src, n) + n);
++}
++#endif
++
++
++#ifdef _LIBC
++/* If we want to free all resources we have to do some work at
++ program's end. */
++static void __attribute__ ((unused))
++free_mem (void)
++{
++ void *old;
++
++ while (_nl_domain_bindings != NULL)
++ {
++ struct binding *oldp = _nl_domain_bindings;
++ _nl_domain_bindings = _nl_domain_bindings->next;
++ if (oldp->dirname != _nl_default_dirname)
++ /* Yes, this is a pointer comparison. */
++ free (oldp->dirname);
++ free (oldp->codeset);
++ free (oldp);
++ }
++
++ if (_nl_current_default_domain != _nl_default_default_domain)
++ /* Yes, again a pointer comparison. */
++ free ((char *) _nl_current_default_domain);
++
++ /* Remove the search tree with the known translations. */
++ __tdestroy (root, free);
++ root = NULL;
++
++ while (transmem_list != NULL)
++ {
++ old = transmem_list;
++ transmem_list = transmem_list->next;
++ free (old);
++ }
++}
++
++text_set_element (__libc_subfreeres, free_mem);
++#endif
+diff -urN parted-1.4.17.orig/intl/dcngettext.c parted-1.4.17/intl/dcngettext.c
+--- parted-1.4.17.orig/intl/dcngettext.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/dcngettext.c Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,59 @@
++/* Implementation of the dcngettext(3) function.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "gettextP.h"
++#ifdef _LIBC
++# include <libintl.h>
++#else
++# include "libgnuintl.h"
++#endif
++
++/* @@ end of prolog @@ */
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define DCNGETTEXT __dcngettext
++# define DCIGETTEXT __dcigettext
++#else
++# define DCNGETTEXT dcngettext__
++# define DCIGETTEXT dcigettext__
++#endif
++
++/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
++ locale. */
++char *
++DCNGETTEXT (domainname, msgid1, msgid2, n, category)
++ const char *domainname;
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
++ int category;
++{
++ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
++}
++
++#ifdef _LIBC
++/* Alias for function name in GNU C Library. */
++weak_alias (__dcngettext, dcngettext);
++#endif
+diff -urN parted-1.4.17.orig/intl/dgettext.c parted-1.4.17/intl/dgettext.c
+--- parted-1.4.17.orig/intl/dgettext.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/dgettext.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+-/* Implementation of the dgettext(3) function
+- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
++/* Implementation of the dgettext(3) function.
++ Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -19,14 +19,13 @@
+ # include <config.h>
+ #endif
+
+-#if defined HAVE_LOCALE_H || defined _LIBC
+-# include <locale.h>
+-#endif
++#include <locale.h>
+
++#include "gettextP.h"
+ #ifdef _LIBC
+ # include <libintl.h>
+ #else
+-# include "libgettext.h"
++# include "libgnuintl.h"
+ #endif
+
+ /* @@ end of prolog @@ */
+diff -urN parted-1.4.17.orig/intl/dngettext.c parted-1.4.17/intl/dngettext.c
+--- parted-1.4.17.orig/intl/dngettext.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/dngettext.c Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,60 @@
++/* Implementation of the dngettext(3) function.
++ Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <locale.h>
++
++#include "gettextP.h"
++#ifdef _LIBC
++# include <libintl.h>
++#else
++# include "libgnuintl.h"
++#endif
++
++/* @@ end of prolog @@ */
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define DNGETTEXT __dngettext
++# define DCNGETTEXT __dcngettext
++#else
++# define DNGETTEXT dngettext__
++# define DCNGETTEXT dcngettext__
++#endif
++
++/* Look up MSGID in the DOMAINNAME message catalog of the current
++ LC_MESSAGES locale and skip message according to the plural form. */
++char *
++DNGETTEXT (domainname, msgid1, msgid2, n)
++ const char *domainname;
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
++{
++ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
++}
++
++#ifdef _LIBC
++/* Alias for function name in GNU C Library. */
++weak_alias (__dngettext, dngettext);
++#endif
+diff -urN parted-1.4.17.orig/intl/explodename.c parted-1.4.17/intl/explodename.c
+--- parted-1.4.17.orig/intl/explodename.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/explodename.c Thu Aug 2 14:26:15 2001
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify
+@@ -19,15 +19,8 @@
+ # include <config.h>
+ #endif
+
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#endif
+-
+-#if defined HAVE_STRING_H || defined _LIBC
+-# include <string.h>
+-#else
+-# include <strings.h>
+-#endif
++#include <stdlib.h>
++#include <string.h>
+ #include <sys/types.h>
+
+ #include "loadinfo.h"
+@@ -43,6 +36,18 @@
+
+ /* @@ end of prolog @@ */
+
++char *
++_nl_find_language (name)
++ const char *name;
++{
++ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
++ && name[0] != '+' && name[0] != ',')
++ ++name;
++
++ return (char *) name;
++}
++
++
+ int
+ _nl_explode_name (name, language, modifier, territory, codeset,
+ normalized_codeset, special, sponsor, revision)
+@@ -74,9 +79,7 @@
+ mask = 0;
+ syntax = undecided;
+ *language = cp = name;
+- while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
+- && cp[0] != '+' && cp[0] != ',')
+- ++cp;
++ cp = _nl_find_language (*language);
+
+ if (*language == cp)
+ /* This does not make sense: language has to be specified. Use
+diff -urN parted-1.4.17.orig/intl/finddomain.c parted-1.4.17/intl/finddomain.c
+--- parted-1.4.17.orig/intl/finddomain.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/finddomain.c Thu Aug 2 14:26:15 2001
+@@ -1,6 +1,6 @@
+ /* Handle list of needed message catalogs
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
++ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -20,45 +20,20 @@
+ # include <config.h>
+ #endif
+
+-#include <ctype.h>
+-#include <errno.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+-
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#else
+-# ifdef HAVE_MALLOC_H
+-# include <malloc.h>
+-# else
+-void free ();
+-# endif
+-#endif
+-
+-#if defined HAVE_STRING_H || defined _LIBC
+-# include <string.h>
+-#else
+-# include <strings.h>
+-# ifndef memcpy
+-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+-# endif
+-#endif
+-#if !HAVE_STRCHR && !defined _LIBC
+-# ifndef strchr
+-# define strchr index
+-# endif
+-#endif
++#include <stdlib.h>
++#include <string.h>
+
+ #if defined HAVE_UNISTD_H || defined _LIBC
+ # include <unistd.h>
+ #endif
+
+-#include "gettext.h"
+ #include "gettextP.h"
+ #ifdef _LIBC
+ # include <libintl.h>
+ #else
+-# include "libgettext.h"
++# include "libgnuintl.h"
+ #endif
+
+ /* @@ end of prolog @@ */
+@@ -71,10 +46,11 @@
+ established bindings. */
+ struct loaded_l10nfile *
+ internal_function
+-_nl_find_domain (dirname, locale, domainname)
++_nl_find_domain (dirname, locale, domainname, domainbinding)
+ const char *dirname;
+ char *locale;
+ const char *domainname;
++ struct binding *domainbinding;
+ {
+ struct loaded_l10nfile *retval;
+ const char *language;
+@@ -120,7 +96,7 @@
+ int cnt;
+
+ if (retval->decided == 0)
+- _nl_load_domain (retval);
++ _nl_load_domain (retval, domainbinding);
+
+ if (retval->data != NULL)
+ return retval;
+@@ -128,7 +104,7 @@
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+- _nl_load_domain (retval->successor[cnt]);
++ _nl_load_domain (retval->successor[cnt], domainbinding);
+
+ if (retval->successor[cnt]->data != NULL)
+ break;
+@@ -175,14 +151,14 @@
+ return NULL;
+
+ if (retval->decided == 0)
+- _nl_load_domain (retval);
++ _nl_load_domain (retval, domainbinding);
+ if (retval->data == NULL)
+ {
+ int cnt;
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+- _nl_load_domain (retval->successor[cnt]);
++ _nl_load_domain (retval->successor[cnt], domainbinding);
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+@@ -192,6 +168,10 @@
+ if (alias_value != NULL)
+ free (locale);
+
++ /* The space for normalized_codeset is dynamically allocated. Free it. */
++ if (mask & XPG_NORM_CODESET)
++ free ((void *) normalized_codeset);
++
+ return retval;
+ }
+
+@@ -208,6 +188,7 @@
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
++ free ((char *) here->filename);
+ free (here);
+ }
+ }
+diff -urN parted-1.4.17.orig/intl/gettext.c parted-1.4.17/intl/gettext.c
+--- parted-1.4.17.orig/intl/gettext.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/gettext.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+ /* Implementation of gettext(3) function.
+- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -23,21 +23,14 @@
+ # define __need_NULL
+ # include <stddef.h>
+ #else
+-# ifdef STDC_HEADERS
+-# include <stdlib.h> /* Just for NULL. */
+-# else
+-# ifdef HAVE_STRING_H
+-# include <string.h>
+-# else
+-# define NULL ((void *) 0)
+-# endif
+-# endif
++# include <stdlib.h> /* Just for NULL. */
+ #endif
+
++#include "gettextP.h"
+ #ifdef _LIBC
+ # include <libintl.h>
+ #else
+-# include "libgettext.h"
++# include "libgnuintl.h"
+ #endif
+
+ /* @@ end of prolog @@ */
+@@ -48,10 +41,10 @@
+ prefix. So we have to make a difference here. */
+ #ifdef _LIBC
+ # define GETTEXT __gettext
+-# define DGETTEXT __dgettext
++# define DCGETTEXT __dcgettext
+ #else
+ # define GETTEXT gettext__
+-# define DGETTEXT dgettext__
++# define DCGETTEXT dcgettext__
+ #endif
+
+ /* Look up MSGID in the current default message catalog for the current
+@@ -61,7 +54,7 @@
+ GETTEXT (msgid)
+ const char *msgid;
+ {
+- return DGETTEXT (NULL, msgid);
++ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+ }
+
+ #ifdef _LIBC
+diff -urN parted-1.4.17.orig/intl/gettext.h parted-1.4.17/intl/gettext.h
+--- parted-1.4.17.orig/intl/gettext.h Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/gettext.h Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+-/* Internal header for GNU gettext internationalization functions.
+- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
++/* Description of GNU message catalog format: general file layout.
++ Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -11,16 +11,13 @@
+ 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 Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+ #ifndef _GETTEXT_H
+ #define _GETTEXT_H 1
+
+-#include <stdio.h>
+-
+ #if HAVE_LIMITS_H || _LIBC
+ # include <limits.h>
+ #endif
+@@ -37,9 +34,8 @@
+ /* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+- doing that would require that the configure script compile and *run*
+- the resulting executable. Locally running cross-compiled executables
+- is usually not possible. */
++ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
++ when cross-compiling. */
+
+ #if __STDC__
+ # define UINT_MAX_32_BITS 4294967295U
+diff -urN parted-1.4.17.orig/intl/gettextP.h parted-1.4.17/intl/gettextP.h
+--- parted-1.4.17.orig/intl/gettextP.h Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/gettextP.h Thu Aug 2 14:26:15 2001
+@@ -1,6 +1,6 @@
+-/* Header describing internals of gettext library
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
++/* Header describing internals of libintl library.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
++ Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -19,8 +19,20 @@
+ #ifndef _GETTEXTP_H
+ #define _GETTEXTP_H
+
++#include <stddef.h> /* Get size_t. */
++
++#ifdef _LIBC
++# include "../iconv/gconv_int.h"
++#else
++# if HAVE_ICONV
++# include <iconv.h>
++# endif
++#endif
++
+ #include "loadinfo.h"
+
++#include "gettext.h" /* Get nls_uint32. */
++
+ /* @@ end of prolog @@ */
+
+ #ifndef PARAMS
+@@ -35,6 +47,12 @@
+ # define internal_function
+ #endif
+
++/* Tell the compiler when a conditional or integer expression is
++ almost always true or almost always false. */
++#ifndef HAVE_BUILTIN_EXPECT
++# define __builtin_expect(expr, val) (expr)
++#endif
++
+ #ifndef W
+ # define W(flag, data) ((flag) ? SWAP (data) : (data))
+ #endif
+@@ -44,8 +62,6 @@
+ # include <byteswap.h>
+ # define SWAP(i) bswap_32 (i)
+ #else
+-static nls_uint32 SWAP PARAMS ((nls_uint32 i));
+-
+ static inline nls_uint32
+ SWAP (i)
+ nls_uint32 i;
+@@ -55,6 +71,52 @@
+ #endif
+
+
++/* This is the representation of the expressions to determine the
++ plural form. */
++struct expression
++{
++ int nargs; /* Number of arguments. */
++ enum operator
++ {
++ /* Without arguments: */
++ var, /* The variable "n". */
++ num, /* Decimal number. */
++ /* Unary operators: */
++ lnot, /* Logical NOT. */
++ /* Binary operators: */
++ mult, /* Multiplication. */
++ divide, /* Division. */
++ module, /* Module operation. */
++ plus, /* Addition. */
++ minus, /* Subtraction. */
++ less_than, /* Comparison. */
++ greater_than, /* Comparison. */
++ less_or_equal, /* Comparison. */
++ greater_or_equal, /* Comparison. */
++ equal, /* Comparision for equality. */
++ not_equal, /* Comparision for inequality. */
++ land, /* Logical AND. */
++ lor, /* Logical OR. */
++ /* Ternary operators: */
++ qmop /* Question mark operator. */
++ } operation;
++ union
++ {
++ unsigned long int num; /* Number value for `num'. */
++ struct expression *args[3]; /* Up to three arguments. */
++ } val;
++};
++
++/* This is the data structure to pass information to the parser and get
++ the result in a thread-safe way. */
++struct parse_args
++{
++ const char *cp;
++ struct expression *res;
++};
++
++
++/* The representation of an opened message catalog. */
+ struct loaded_domain
+ {
+ const char *data;
+@@ -66,23 +128,123 @@
+ struct string_desc *trans_tab;
+ nls_uint32 hash_size;
+ nls_uint32 *hash_tab;
++ int codeset_cntr;
++#ifdef _LIBC
++ __gconv_t conv;
++#else
++# if HAVE_ICONV
++ iconv_t conv;
++# endif
++#endif
++ char **conv_tab;
++
++ struct expression *plural;
++ unsigned long int nplurals;
+ };
+
++/* We want to allocate a string at the end of the struct. But ISO C
++ doesn't allow zero sized arrays. */
++#ifdef __GNUC__
++# define ZERO 0
++#else
++# define ZERO 1
++#endif
++
++/* A set of settings bound to a message domain. Used to store settings
++ from bindtextdomain() and bind_textdomain_codeset(). */
+ struct binding
+ {
+ struct binding *next;
+- char *domainname;
+ char *dirname;
++ int codeset_cntr; /* Incremented each time codeset changes. */
++ char *codeset;
++ char domainname[ZERO];
+ };
+
++/* A counter which is incremented each time some previous translations
++ become invalid.
++ This variable is part of the external ABI of the GNU libintl. */
++extern int _nl_msg_cat_cntr;
++
+ struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+ char *__locale,
+- const char *__domainname))
++ const char *__domainname,
++ struct binding *__domainbinding))
+ internal_function;
+-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
++void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
++ struct binding *__domainbinding))
+ internal_function;
+ void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+ internal_function;
++const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
++ struct loaded_domain *__domain,
++ struct binding *__domainbinding))
++ internal_function;
++void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
++ internal_function;
++
++char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
++ struct binding *domainbinding,
++ const char *msgid, size_t *lengthp))
++ internal_function;
++
++#ifdef _LIBC
++extern char *__gettext PARAMS ((const char *__msgid));
++extern char *__dgettext PARAMS ((const char *__domainname,
++ const char *__msgid));
++extern char *__dcgettext PARAMS ((const char *__domainname,
++ const char *__msgid, int __category));
++extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
++ unsigned long int __n));
++extern char *__dngettext PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ unsigned long int n));
++extern char *__dcngettext PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ unsigned long int __n, int __category));
++extern char *__dcigettext PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ int __plural, unsigned long int __n,
++ int __category));
++extern char *__textdomain PARAMS ((const char *__domainname));
++extern char *__bindtextdomain PARAMS ((const char *__domainname,
++ const char *__dirname));
++extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
++ const char *__codeset));
++#else
++extern char *gettext__ PARAMS ((const char *__msgid));
++extern char *dgettext__ PARAMS ((const char *__domainname,
++ const char *__msgid));
++extern char *dcgettext__ PARAMS ((const char *__domainname,
++ const char *__msgid, int __category));
++extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
++ unsigned long int __n));
++extern char *dngettext__ PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ unsigned long int __n));
++extern char *dcngettext__ PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ unsigned long int __n, int __category));
++extern char *dcigettext__ PARAMS ((const char *__domainname,
++ const char *__msgid1, const char *__msgid2,
++ int __plural, unsigned long int __n,
++ int __category));
++extern char *textdomain__ PARAMS ((const char *__domainname));
++extern char *bindtextdomain__ PARAMS ((const char *__domainname,
++ const char *__dirname));
++extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
++ const char *__codeset));
++#endif
++
++#ifdef _LIBC
++extern void __gettext_free_exp PARAMS ((struct expression *exp))
++ internal_function;
++extern int __gettextparse PARAMS ((void *arg));
++#else
++extern void gettext_free_exp__ PARAMS ((struct expression *exp))
++ internal_function;
++extern int gettextparse__ PARAMS ((void *arg));
++#endif
+
+ /* @@ begin of epilog @@ */
+
+diff -urN parted-1.4.17.orig/intl/hash-string.h parted-1.4.17/intl/hash-string.h
+--- parted-1.4.17.orig/intl/hash-string.h Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/hash-string.h Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+-/* Implements a string hashing function.
+- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
++/* Description of GNU message catalog format: string hashing function.
++ Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -11,10 +11,9 @@
+ 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 Library General Public
+- License along with the GNU C Library; see the file COPYING.LIB. If not,
+- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+ /* @@ end of prolog @@ */
+
+@@ -33,9 +32,9 @@
+ /* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+-static unsigned long hash_string PARAMS ((const char *__str_param));
++static unsigned long int hash_string PARAMS ((const char *__str_param));
+
+-static inline unsigned long
++static inline unsigned long int
+ hash_string (str_param)
+ const char *str_param;
+ {
+@@ -47,8 +46,8 @@
+ while (*str != '\0')
+ {
+ hval <<= 4;
+- hval += (unsigned long) *str++;
+- g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
++ hval += (unsigned long int) *str++;
++ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+diff -urN parted-1.4.17.orig/intl/intl-compat.c parted-1.4.17/intl/intl-compat.c
+--- parted-1.4.17.orig/intl/intl-compat.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/intl-compat.c Thu Aug 2 14:26:15 2001
+@@ -1,6 +1,6 @@
+ /* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+ Library.
+- Copyright (C) 1995 Software Foundation, Inc.
++ Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -20,24 +20,79 @@
+ # include <config.h>
+ #endif
+
+-#include "libgettext.h"
++#include "libgnuintl.h"
++#include "gettextP.h"
+
+ /* @@ end of prolog @@ */
+
++/* This file redirects the gettext functions (without prefix or suffix) to
++ those defined in the included GNU gettext library (with "__" suffix).
++ It is compiled into libintl when the included GNU gettext library is
++ configured --with-included-gettext.
++
++ This redirection works also in the case that the system C library or
++ the system libintl library contain gettext/textdomain/... functions.
++ If it didn't, we would need to add preprocessor level redirections to
++ libgnuintl.h of the following form:
++
++# define gettext gettext__
++# define dgettext dgettext__
++# define dcgettext dcgettext__
++# define ngettext ngettext__
++# define dngettext dngettext__
++# define dcngettext dcngettext__
++# define textdomain textdomain__
++# define bindtextdomain bindtextdomain__
++# define bind_textdomain_codeset bind_textdomain_codeset__
++
++ How does this redirection work? There are two cases.
++ A. When libintl.a is linked into an executable, it works because
++ functions defined in the executable always override functions in
++ the shared libraries.
++ B. When libintl.so is used, it works because
++ 1. those systems defining gettext/textdomain/... in the C library
++ (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
++ ELF systems and define these symbols as weak, thus explicitly
++ letting other shared libraries override it.
++ 2. those systems defining gettext/textdomain/... in a standalone
++ libintl.so library (namely, Solaris 2.3 and newer) have this
++ shared library in /usr/lib, and the linker will search /usr/lib
++ *after* the directory where the GNU gettext library is installed.
++
++ A third case, namely when libintl.a is linked into a shared library
++ whose name is not libintl.so, is not supported. In this case, on
++ Solaris, when -lintl precedes the linker option for the shared library
++ containing GNU gettext, the system's gettext would indeed override
++ the GNU gettext. Anyone doing this kind of stuff must be clever enough
++ to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
++ command line. */
++
+
+ #undef gettext
+ #undef dgettext
+ #undef dcgettext
++#undef ngettext
++#undef dngettext
++#undef dcngettext
+ #undef textdomain
+ #undef bindtextdomain
++#undef bind_textdomain_codeset
+
+
+ char *
+-bindtextdomain (domainname, dirname)
++gettext (msgid)
++ const char *msgid;
++{
++ return gettext__ (msgid);
++}
++
++
++char *
++dgettext (domainname, msgid)
+ const char *domainname;
+- const char *dirname;
++ const char *msgid;
+ {
+- return bindtextdomain__ (domainname, dirname);
++ return dgettext__ (domainname, msgid);
+ }
+
+
+@@ -52,19 +107,35 @@
+
+
+ char *
+-dgettext (domainname, msgid)
++ngettext (msgid1, msgid2, n)
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
++{
++ return ngettext__ (msgid1, msgid2, n);
++}
++
++
++char *
++dngettext (domainname, msgid1, msgid2, n)
+ const char *domainname;
+- const char *msgid;
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
+ {
+- return dgettext__ (domainname, msgid);
++ return dngettext__ (domainname, msgid1, msgid2, n);
+ }
+
+
+ char *
+-gettext (msgid)
+- const char *msgid;
++dcngettext (domainname, msgid1, msgid2, n, category)
++ const char *domainname;
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
++ int category;
+ {
+- return gettext__ (msgid);
++ return dcngettext__ (domainname, msgid1, msgid2, n, category);
+ }
+
+
+@@ -73,4 +144,22 @@
+ const char *domainname;
+ {
+ return textdomain__ (domainname);
++}
++
++
++char *
++bindtextdomain (domainname, dirname)
++ const char *domainname;
++ const char *dirname;
++{
++ return bindtextdomain__ (domainname, dirname);
++}
++
++
++char *
++bind_textdomain_codeset (domainname, codeset)
++ const char *domainname;
++ const char *codeset;
++{
++ return bind_textdomain_codeset__ (domainname, codeset);
+ }
+diff -urN parted-1.4.17.orig/intl/l10nflist.c parted-1.4.17/intl/l10nflist.c
+--- parted-1.4.17.orig/intl/l10nflist.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/l10nflist.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,4 @@
+-/* Handle list of needed message catalogs
+- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
++/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify
+@@ -16,22 +15,18 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
++/* Tell glibc's <string.h> to provide a prototype for stpcpy().
++ This must come before <config.h> because <config.h> may include
++ <features.h>, and once <features.h> has been included, it's too late. */
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+
+-
+-#if defined HAVE_STRING_H || defined _LIBC
+-# ifndef _GNU_SOURCE
+-# define _GNU_SOURCE 1
+-# endif
+-# include <string.h>
+-#else
+-# include <strings.h>
+-# ifndef memcpy
+-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+-# endif
+-#endif
++#include <string.h>
+ #if !HAVE_STRCHR && !defined _LIBC
+ # ifndef strchr
+ # define strchr index
+@@ -43,10 +38,7 @@
+ #endif
+ #include <ctype.h>
+ #include <sys/types.h>
+-
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#endif
++#include <stdlib.h>
+
+ #include "loadinfo.h"
+
+@@ -224,7 +216,7 @@
+
+ /* Construct file name. */
+ memcpy (abs_filename, dirlist, dirlist_len);
+- __argz_stringify (abs_filename, dirlist_len, ':');
++ __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
+ cp = abs_filename + (dirlist_len - 1);
+ *cp++ = '/';
+ cp = stpcpy (cp, language);
+@@ -349,10 +341,11 @@
+
+ /* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+- names. */
++ names. The return value is dynamically allocated and has to be
++ freed by the caller. */
+ const char *
+ _nl_normalize_codeset (codeset, name_len)
+- const unsigned char *codeset;
++ const char *codeset;
+ size_t name_len;
+ {
+ int len = 0;
+diff -urN parted-1.4.17.orig/intl/libgettext.h parted-1.4.17/intl/libgettext.h
+--- parted-1.4.17.orig/intl/libgettext.h Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/libgettext.h Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+-/* Message catalogs for internationalization.
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++/* Convenience header for conditional use of GNU <libintl.h>.
++ Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -15,168 +15,34 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+-/* Because on some systems (e.g. Solaris) we sometimes have to include
+- the systems libintl.h as well as this file we have more complex
+- include protection above. But the systems header might perhaps also
+- define _LIBINTL_H and therefore we have to protect the definition here. */
+-
+-#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
+-#ifndef _LIBINTL_H
+-# define _LIBINTL_H 1
+-#endif
+-#define _LIBGETTEXT_H 1
+-
+-/* We define an additional symbol to signal that we use the GNU
+- implementation of gettext. */
+-#define __USE_GNU_GETTEXT 1
+-
+-#include <sys/types.h>
+-
+-#if HAVE_LOCALE_H
+-# include <locale.h>
+-#endif
+-
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/* @@ end of prolog @@ */
+-
+-#ifndef PARAMS
+-# if __STDC__ || defined __cplusplus
+-# define PARAMS(args) args
+-# else
+-# define PARAMS(args) ()
+-# endif
+-#endif
+-
+-#ifndef NULL
+-# if !defined __cplusplus || defined __GNUC__
+-# define NULL ((void *) 0)
+-# else
+-# define NULL (0)
+-# endif
+-#endif
+-
+-#if !HAVE_LC_MESSAGES
+-/* This value determines the behaviour of the gettext() and dgettext()
+- function. But some system does not have this defined. Define it
+- to a default value. */
+-# define LC_MESSAGES (-1)
+-#endif
+-
+-
+-/* Declarations for gettext-using-catgets interface. Derived from
+- Jim Meyering's libintl.h. */
+-struct _msg_ent
+-{
+- const char *_msg;
+- int _msg_number;
+-};
+-
+-
+-#if HAVE_CATGETS
+-/* These two variables are defined in the automatically by po-to-tbl.sed
+- generated file `cat-id-tbl.c'. */
+-extern const struct _msg_ent _msg_tbl[];
+-extern int _msg_tbl_length;
+-#endif
+-
+-
+-/* For automatical extraction of messages sometimes no real
+- translation is needed. Instead the string itself is the result. */
+-#define gettext_noop(Str) (Str)
+-
+-/* Look up MSGID in the current default message catalog for the current
+- LC_MESSAGES locale. If not found, returns MSGID itself (the default
+- text). */
+-extern char *gettext PARAMS ((const char *__msgid));
+-extern char *gettext__ PARAMS ((const char *__msgid));
+-
+-/* Look up MSGID in the DOMAINNAME message catalog for the current
+- LC_MESSAGES locale. */
+-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+-extern char *dgettext__ PARAMS ((const char *__domainname,
+- const char *__msgid));
+-
+-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+- locale. */
+-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+- int __category));
+-extern char *dcgettext__ PARAMS ((const char *__domainname,
+- const char *__msgid, int __category));
+-
+-
+-/* Set the current default message catalog to DOMAINNAME.
+- If DOMAINNAME is null, return the current default.
+- If DOMAINNAME is "", reset to the default of "messages". */
+-extern char *textdomain PARAMS ((const char *__domainname));
+-extern char *textdomain__ PARAMS ((const char *__domainname));
+-
+-/* Specify that the DOMAINNAME message catalog will be found
+- in DIRNAME rather than in the system locale data base. */
+-extern char *bindtextdomain PARAMS ((const char *__domainname,
+- const char *__dirname));
+-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+- const char *__dirname));
++#ifndef _LIBGETTEXT_H
++#define _LIBGETTEXT_H 1
+
++/* NLS can be disabled through the configure --disable-nls option. */
+ #if ENABLE_NLS
+
+-/* Solaris 2.3 has the gettext function but dcgettext is missing.
+- So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4
+- has dcgettext. */
+-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
+-
+-# define gettext(Msgid) \
+- dgettext (NULL, Msgid)
+-
+-# define dgettext(Domainname, Msgid) \
+- dcgettext (Domainname, Msgid, LC_MESSAGES)
+-
+-# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+-/* This global variable is defined in loadmsgcat.c. We need a sign,
+- whether a new catalog was loaded, which can be associated with all
+- translations. */
+-extern int _nl_msg_cat_cntr;
+-
+-# define dcgettext(Domainname, Msgid, Category) \
+- (__extension__ \
+- ({ \
+- char *__result; \
+- if (__builtin_constant_p (Msgid)) \
+- { \
+- static char *__translation__; \
+- static int __catalog_counter__; \
+- if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
+- { \
+- __translation__ = \
+- dcgettext__ (Domainname, Msgid, Category); \
+- __catalog_counter__ = _nl_msg_cat_cntr; \
+- } \
+- __result = __translation__; \
+- } \
+- else \
+- __result = dcgettext__ (Domainname, Msgid, Category); \
+- __result; \
+- }))
+-# endif
+-# endif
++/* Get declarations of GNU message catalog functions. */
++# include <libintl.h>
+
+ #else
+
+ # define gettext(Msgid) (Msgid)
+ # define dgettext(Domainname, Msgid) (Msgid)
+ # define dcgettext(Domainname, Msgid, Category) (Msgid)
+-# define textdomain(Domainname) ((char *) Domainname)
+-# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
++# define ngettext(Msgid1, Msgid2, N) \
++ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
++# define dngettext(Domainname, Msgid1, Msgid2, N) \
++ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
++# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
++ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
++# define textdomain(Domainname) ((char *) (Domainname))
++# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
++# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
+
+ #endif
+
+-/* @@ begin of epilog @@ */
+-
+-#ifdef __cplusplus
+-}
+-#endif
++/* For automatical extraction of messages sometimes no real
++ translation is needed. Instead the string itself is the result. */
++#define gettext_noop(Str) (Str)
+
+-#endif
++#endif /* _LIBGETTEXT_H */
+diff -urN parted-1.4.17.orig/intl/libgnuintl.h parted-1.4.17/intl/libgnuintl.h
+--- parted-1.4.17.orig/intl/libgnuintl.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/libgnuintl.h Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,127 @@
++/* Message catalogs for internationalization.
++ Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#ifndef _LIBINTL_H
++#define _LIBINTL_H 1
++
++#include <locale.h>
++
++/* The LC_MESSAGES locale category is the category used by the functions
++ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
++ On systems that don't define it, use an arbitrary value instead.
++ On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e.
++ this file!) and then only defines LC_MESSAGES. To avoid a redefinition
++ warning, don't define LC_MESSAGES in this case. */
++#if !defined LC_MESSAGES && !defined __LOCALE_H
++# define LC_MESSAGES 1729
++#endif
++
++/* We define an additional symbol to signal that we use the GNU
++ implementation of gettext. */
++#define __USE_GNU_GETTEXT 1
++
++/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
++ precedence over _conio_gettext. */
++#ifdef __DJGPP__
++# undef gettext
++# define gettext gettext
++#endif
++
++#ifndef PARAMS
++# if __STDC__ || defined __cplusplus
++# define PARAMS(args) args
++# else
++# define PARAMS(args) ()
++# endif
++#endif
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* Look up MSGID in the current default message catalog for the current
++ LC_MESSAGES locale. If not found, returns MSGID itself (the default
++ text). */
++extern char *gettext PARAMS ((const char *__msgid));
++
++/* Look up MSGID in the DOMAINNAME message catalog for the current
++ LC_MESSAGES locale. */
++extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
++
++/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
++ locale. */
++extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
++ int __category));
++
++
++/* Similar to `gettext' but select the plural form corresponding to the
++ number N. */
++extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
++ unsigned long int __n));
++
++/* Similar to `dgettext' but select the plural form corresponding to the
++ number N. */
++extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1,
++ const char *__msgid2, unsigned long int __n));
++
++/* Similar to `dcgettext' but select the plural form corresponding to the
++ number N. */
++extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1,
++ const char *__msgid2, unsigned long int __n,
++ int __category));
++
++
++/* Set the current default message catalog to DOMAINNAME.
++ If DOMAINNAME is null, return the current default.
++ If DOMAINNAME is "", reset to the default of "messages". */
++extern char *textdomain PARAMS ((const char *__domainname));
++
++/* Specify that the DOMAINNAME message catalog will be found
++ in DIRNAME rather than in the system locale data base. */
++extern char *bindtextdomain PARAMS ((const char *__domainname,
++ const char *__dirname));
++
++/* Specify the character encoding in which the messages from the
++ DOMAINNAME message catalog will be returned. */
++extern char *bind_textdomain_codeset PARAMS ((const char *__domainname,
++ const char *__codeset));
++
++
++/* Optimized version of the functions above. */
++#if defined __OPTIMIZED
++/* These are macros, but could also be inline functions. */
++
++# define gettext(msgid) \
++ dgettext (NULL, msgid)
++
++# define dgettext(domainname, msgid) \
++ dcgettext (domainname, msgid, LC_MESSAGES)
++
++# define ngettext(msgid1, msgid2, n) \
++ dngettext (NULL, msgid1, msgid2, n)
++
++# define dngettext(domainname, msgid1, msgid2, n) \
++ dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
++
++#endif /* Optimizing. */
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* libintl.h */
+diff -urN parted-1.4.17.orig/intl/linux-msg.sed parted-1.4.17/intl/linux-msg.sed
+--- parted-1.4.17.orig/intl/linux-msg.sed Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/linux-msg.sed Wed Dec 31 19:00:00 1969
+@@ -1,100 +0,0 @@
+-# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
+-# Copyright (C) 1995 Free Software Foundation, Inc.
+-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+-#
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-#
+-#
+-# The first directive in the .msg should be the definition of the
+-# message set number. We use always set number 1.
+-#
+-1 {
+- i\
+-$set 1 # Automatically created by po2msg.sed
+- h
+- s/.*/0/
+- x
+-}
+-#
+-# Mitch's old catalog format does not allow comments.
+-#
+-# We copy the original message as a comment into the .msg file.
+-#
+-/^msgid/ {
+- s/msgid[ ]*"//
+-#
+-# This does not work now with the new format.
+-# /"$/! {
+-# s/\\$//
+-# s/$/ ... (more lines following)"/
+-# }
+- x
+-# The following nice solution is by
+-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+- td
+-# Increment a decimal number in pattern space.
+-# First hide trailing `9' digits.
+- :d
+- s/9\(_*\)$/_\1/
+- td
+-# Assure at least one digit is available.
+- s/^\(_*\)$/0\1/
+-# Increment the last digit.
+- s/8\(_*\)$/9\1/
+- s/7\(_*\)$/8\1/
+- s/6\(_*\)$/7\1/
+- s/5\(_*\)$/6\1/
+- s/4\(_*\)$/5\1/
+- s/3\(_*\)$/4\1/
+- s/2\(_*\)$/3\1/
+- s/1\(_*\)$/2\1/
+- s/0\(_*\)$/1\1/
+-# Convert the hidden `9' digits to `0's.
+- s/_/0/g
+- x
+- G
+- s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
+-}
+-#
+-# The .msg file contains, other then the .po file, only the translations
+-# but each given a unique ID. Starting from 1 and incrementing by 1 for
+-# each message we assign them to the messages.
+-# It is important that the .po file used to generate the cat-id-tbl.c file
+-# (with po-to-tbl) is the same as the one used here. (At least the order
+-# of declarations must not be changed.)
+-#
+-/^msgstr/ {
+- s/msgstr[ ]*"\(.*\)"/# \1/
+-# Clear substitution flag.
+- tb
+-# Append the next line.
+- :b
+- N
+-# Look whether second part is continuation line.
+- s/\(.*\n\)"\(.*\)"/\1\2/
+-# Yes, then branch.
+- ta
+- P
+- D
+-# Note that D includes a jump to the start!!
+-# We found a continuation line. But before printing insert '\'.
+- :a
+- s/\(.*\)\(\n.*\)/\1\\\2/
+- P
+-# We cannot use D here.
+- s/.*\n\(.*\)/\1/
+- tb
+-}
+-d
+diff -urN parted-1.4.17.orig/intl/loadinfo.h parted-1.4.17/intl/loadinfo.h
+--- parted-1.4.17.orig/intl/loadinfo.h Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/loadinfo.h Thu Aug 2 14:26:15 2001
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
++/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+@@ -16,6 +16,9 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
++#ifndef _LOADINFO_H
++#define _LOADINFO_H 1
++
+ #ifndef PARAMS
+ # if __STDC__
+ # define PARAMS(args) args
+@@ -24,6 +27,25 @@
+ # endif
+ #endif
+
++#ifndef internal_function
++# define internal_function
++#endif
++
++/* Tell the compiler when a conditional or integer expression is
++ almost always true or almost always false. */
++#ifndef HAVE_BUILTIN_EXPECT
++# define __builtin_expect(expr, val) (expr)
++#endif
++
++/* Separator in PATH like lists of pathnames. */
++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
++# define PATH_SEPARATOR ';'
++#else
++ /* Unix */
++# define PATH_SEPARATOR ':'
++#endif
++
+ /* Encoding of locale name parts. */
+ #define CEN_REVISION 1
+ #define CEN_SPONSOR 2
+@@ -50,7 +72,11 @@
+ };
+
+
+-extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
++/* Normalize codeset name. There is no standard for the codeset
++ names. Normalization allows the user to use any of the common
++ names. The return value is dynamically allocated and has to be
++ freed by the caller. */
++extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+ size_t name_len));
+
+ extern struct loaded_l10nfile *
+@@ -66,6 +92,8 @@
+
+ extern const char *_nl_expand_alias PARAMS ((const char *name));
+
++/* normalized_codeset is dynamically allocated and has to be freed by
++ the caller. */
+ extern int _nl_explode_name PARAMS ((char *name, const char **language,
+ const char **modifier,
+ const char **territory,
+@@ -74,3 +102,7 @@
+ const char **special,
+ const char **sponsor,
+ const char **revision));
++
++extern char *_nl_find_language PARAMS ((const char *name));
++
++#endif /* loadinfo.h */
+diff -urN parted-1.4.17.orig/intl/loadmsgcat.c parted-1.4.17/intl/loadmsgcat.c
+--- parted-1.4.17.orig/intl/loadmsgcat.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/loadmsgcat.c Thu Aug 2 14:26:15 2001
+@@ -1,5 +1,5 @@
+ /* Load needed message catalogs.
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -15,29 +15,68 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
++ This must come before <config.h> because <config.h> may include
++ <features.h>, and once <features.h> has been included, it's too late. */
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+
++#include <ctype.h>
++#include <errno.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
++#ifdef __GNUC__
++# define alloca __builtin_alloca
++# define HAVE_ALLOCA 1
++#else
++# if defined HAVE_ALLOCA_H || defined _LIBC
++# include <alloca.h>
++# else
++# ifdef _AIX
++ #pragma alloca
++# else
++# ifndef alloca
++char *alloca ();
++# endif
++# endif
++# endif
+ #endif
+
++#include <stdlib.h>
++#include <string.h>
++
+ #if defined HAVE_UNISTD_H || defined _LIBC
+ # include <unistd.h>
+ #endif
+
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
++#ifdef _LIBC
++# include <langinfo.h>
++# include <locale.h>
++#endif
++
++#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
++ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+ # include <sys/mman.h>
++# undef HAVE_MMAP
++# define HAVE_MMAP 1
++#else
++# undef HAVE_MMAP
+ #endif
+
+ #include "gettext.h"
+ #include "gettextP.h"
+
++#ifdef _LIBC
++# include "../locale/localeinfo.h"
++#endif
++
+ /* @@ end of prolog @@ */
+
+ #ifdef _LIBC
+@@ -51,32 +90,275 @@
+ # define munmap __munmap
+ #endif
+
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define PLURAL_PARSE __gettextparse
++#else
++# define PLURAL_PARSE gettextparse__
++#endif
++
++/* For those losing systems which don't have `alloca' we have to add
++ some additional code emulating it. */
++#ifdef HAVE_ALLOCA
++# define freea(p) /* nothing */
++#else
++# define alloca(n) malloc (n)
++# define freea(p) free (p)
++#endif
++
++/* For systems that distinguish between text and binary I/O.
++ O_BINARY is usually declared in <fcntl.h>. */
++#if !defined O_BINARY && defined _O_BINARY
++ /* For MSC-compatible compilers. */
++# define O_BINARY _O_BINARY
++# define O_TEXT _O_TEXT
++#endif
++#ifdef __BEOS__
++ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
++# undef O_BINARY
++# undef O_TEXT
++#endif
++/* On reasonable systems, binary I/O is the default. */
++#ifndef O_BINARY
++# define O_BINARY 0
++#endif
++
+ /* We need a sign, whether a new catalog was loaded, which can be associated
+ with all translations. This is important if the translations are
+ cached by one of GCC's features. */
+-int _nl_msg_cat_cntr = 0;
++int _nl_msg_cat_cntr;
++
++#if (defined __GNUC__ && !defined __APPLE_CC__) \
++ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
++
++/* These structs are the constant expression for the germanic plural
++ form determination. It represents the expression "n != 1". */
++static const struct expression plvar =
++{
++ .nargs = 0,
++ .operation = var,
++};
++static const struct expression plone =
++{
++ .nargs = 0,
++ .operation = num,
++ .val =
++ {
++ .num = 1
++ }
++};
++static struct expression germanic_plural =
++{
++ .nargs = 2,
++ .operation = not_equal,
++ .val =
++ {
++ .args =
++ {
++ [0] = (struct expression *) &plvar,
++ [1] = (struct expression *) &plone
++ }
++ }
++};
++
++# define INIT_GERMANIC_PLURAL()
++
++#else
++
++/* For compilers without support for ISO C 99 struct/union initializers:
++ Initialization at run-time. */
++
++static struct expression plvar;
++static struct expression plone;
++static struct expression germanic_plural;
++
++static void
++init_germanic_plural ()
++{
++ if (plone.val.num == 0)
++ {
++ plvar.nargs = 0;
++ plvar.operation = var;
++
++ plone.nargs = 0;
++ plone.operation = num;
++ plone.val.num = 1;
++
++ germanic_plural.nargs = 2;
++ germanic_plural.operation = not_equal;
++ germanic_plural.val.args[0] = &plvar;
++ germanic_plural.val.args[1] = &plone;
++ }
++}
+
++# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
++
++#endif
++
++
++/* Initialize the codeset dependent parts of an opened message catalog.
++ Return the header entry. */
++const char *
++internal_function
++_nl_init_domain_conv (domain_file, domain, domainbinding)
++ struct loaded_l10nfile *domain_file;
++ struct loaded_domain *domain;
++ struct binding *domainbinding;
++{
++ /* Find out about the character set the file is encoded with.
++ This can be found (in textual form) in the entry "". If this
++ entry does not exist or if this does not contain the `charset='
++ information, we will assume the charset matches the one the
++ current locale and we don't have to perform any conversion. */
++ char *nullentry;
++ size_t nullentrylen;
++
++ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
++ domain->codeset_cntr =
++ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
++#ifdef _LIBC
++ domain->conv = (__gconv_t) -1;
++#else
++# if HAVE_ICONV
++ domain->conv = (iconv_t) -1;
++# endif
++#endif
++ domain->conv_tab = NULL;
++
++ /* Get the header entry. */
++ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
++
++ if (nullentry != NULL)
++ {
++#if defined _LIBC || HAVE_ICONV
++ const char *charsetstr;
++
++ charsetstr = strstr (nullentry, "charset=");
++ if (charsetstr != NULL)
++ {
++ size_t len;
++ char *charset;
++ const char *outcharset;
++
++ charsetstr += strlen ("charset=");
++ len = strcspn (charsetstr, " \t\n");
++
++ charset = (char *) alloca (len + 1);
++# if defined _LIBC || HAVE_MEMPCPY
++ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
++# else
++ memcpy (charset, charsetstr, len);
++ charset[len] = '\0';
++# endif
++
++ /* The output charset should normally be determined by the
++ locale. But sometimes the locale is not used or not correctly
++ set up, so we provide a possibility for the user to override
++ this. Moreover, the value specified through
++ bind_textdomain_codeset overrides both. */
++ if (domainbinding != NULL && domainbinding->codeset != NULL)
++ outcharset = domainbinding->codeset;
++ else
++ {
++ outcharset = getenv ("OUTPUT_CHARSET");
++ if (outcharset == NULL || outcharset[0] == '\0')
++ {
++# ifdef _LIBC
++ outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
++# else
++# if HAVE_ICONV
++ extern const char *locale_charset (void);
++ outcharset = locale_charset ();
++# endif
++# endif
++ }
++ }
++
++# ifdef _LIBC
++ /* We always want to use transliteration. */
++ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
++ charset = norm_add_slashes (charset, NULL);
++ if (__gconv_open (outcharset, charset, &domain->conv,
++ GCONV_AVOID_NOCONV)
++ != __GCONV_OK)
++ domain->conv = (__gconv_t) -1;
++# else
++# if HAVE_ICONV
++ /* When using GNU libiconv, we want to use transliteration. */
++# if _LIBICONV_VERSION >= 0x0105
++ len = strlen (outcharset);
++ {
++ char *tmp = (char *) alloca (len + 10 + 1);
++ memcpy (tmp, outcharset, len);
++ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
++ outcharset = tmp;
++ }
++# endif
++ domain->conv = iconv_open (outcharset, charset);
++# if _LIBICONV_VERSION >= 0x0105
++ freea (outcharset);
++# endif
++# endif
++# endif
++
++ freea (charset);
++ }
++#endif /* _LIBC || HAVE_ICONV */
++ }
++
++ return nullentry;
++}
++
++/* Frees the codeset dependent parts of an opened message catalog. */
++void
++internal_function
++_nl_free_domain_conv (domain)
++ struct loaded_domain *domain;
++{
++ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
++ free (domain->conv_tab);
++
++#ifdef _LIBC
++ if (domain->conv != (__gconv_t) -1)
++ __gconv_close (domain->conv);
++#else
++# if HAVE_ICONV
++ if (domain->conv != (iconv_t) -1)
++ iconv_close (domain->conv);
++# endif
++#endif
++}
+
+ /* Load the message catalogs specified by FILENAME. If it is no valid
+ message catalog do nothing. */
+ void
+ internal_function
+-_nl_load_domain (domain_file)
++_nl_load_domain (domain_file, domainbinding)
+ struct loaded_l10nfile *domain_file;
++ struct binding *domainbinding;
+ {
+ int fd;
+ size_t size;
++#ifdef _LIBC
++ struct stat64 st;
++#else
+ struct stat st;
++#endif
+ struct mo_file_header *data = (struct mo_file_header *) -1;
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+- || defined _LIBC
+ int use_mmap = 0;
+-#endif
+ struct loaded_domain *domain;
++ const char *nullentry;
+
+ domain_file->decided = 1;
+ domain_file->data = NULL;
+
++ /* Note that it would be useless to store domainbinding in domain_file
++ because domainbinding might be == NULL now but != NULL later (after
++ a call to bind_textdomain_codeset). */
++
+ /* If the record does not represent a valid locale the FILENAME
+ might be NULL. This can happen when according to the given
+ specification the locale file name is different for XPG and CEN
+@@ -85,28 +367,32 @@
+ return;
+
+ /* Try to open the addressed file. */
+- fd = open (domain_file->filename, O_RDONLY);
++ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ return;
+
+ /* We must know about the size of the file. */
+- if (fstat (fd, &st) != 0
+- || (size = (size_t) st.st_size) != st.st_size
+- || size < sizeof (struct mo_file_header))
++ if (
++#ifdef _LIBC
++ __builtin_expect (fstat64 (fd, &st) != 0, 0)
++#else
++ __builtin_expect (fstat (fd, &st) != 0, 0)
++#endif
++ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
++ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+ {
+ /* Something went wrong. */
+ close (fd);
+ return;
+ }
+
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+- || defined _LIBC
++#ifdef HAVE_MMAP
+ /* Now we are ready to load the file. If mmap() is available we try
+ this first. If not available or it failed we try to load it. */
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+
+- if (data != (struct mo_file_header *) -1)
++ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+ {
+ /* mmap() call was successful. */
+ close (fd);
+@@ -130,12 +416,15 @@
+ do
+ {
+ long int nb = (long int) read (fd, read_ptr, to_read);
+- if (nb == -1)
++ if (nb <= 0)
+ {
++#ifdef EINTR
++ if (nb == -1 && errno == EINTR)
++ continue;
++#endif
+ close (fd);
+ return;
+ }
+-
+ read_ptr += nb;
+ to_read -= nb;
+ }
+@@ -146,11 +435,11 @@
+
+ /* Using the magic number we can test whether it really is a message
+ catalog file. */
+- if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
++ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
++ 0))
+ {
+ /* The magic number is wrong: not a message catalog file. */
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+- || defined _LIBC
++#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+@@ -159,17 +448,13 @@
+ return;
+ }
+
+- domain_file->data
+- = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+- if (domain_file->data == NULL)
++ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
++ if (domain == NULL)
+ return;
++ domain_file->data = domain;
+
+- domain = (struct loaded_domain *) domain_file->data;
+ domain->data = (char *) data;
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+- || defined _LIBC
+ domain->use_mmap = use_mmap;
+-#endif
+ domain->mmap_size = size;
+ domain->must_swap = data->magic != _MAGIC;
+
+@@ -187,9 +472,8 @@
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+ break;
+ default:
+- /* This is an illegal revision. */
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+- || defined _LIBC
++ /* This is an invalid revision. */
++#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+@@ -200,9 +484,62 @@
+ return;
+ }
+
+- /* Show that one domain is changed. This might make some cached
+- translations invalid. */
+- ++_nl_msg_cat_cntr;
++ /* Now initialize the character set converter from the character set
++ the file is encoded with (found in the header entry) to the domain's
++ specified character set or the locale's character set. */
++ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
++
++ /* Also look for a plural specification. */
++ if (nullentry != NULL)
++ {
++ const char *plural;
++ const char *nplurals;
++
++ plural = strstr (nullentry, "plural=");
++ nplurals = strstr (nullentry, "nplurals=");
++ if (plural == NULL || nplurals == NULL)
++ goto no_plural;
++ else
++ {
++ /* First get the number. */
++ char *endp;
++ unsigned long int n;
++ struct parse_args args;
++
++ nplurals += 9;
++ while (*nplurals != '\0' && isspace (*nplurals))
++ ++nplurals;
++#if defined HAVE_STRTOUL || defined _LIBC
++ n = strtoul (nplurals, &endp, 10);
++#else
++ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
++ n = n * 10 + (*endp - '0');
++#endif
++ domain->nplurals = n;
++ if (nplurals == endp)
++ goto no_plural;
++
++ /* Due to the restrictions bison imposes onto the interface of the
++ scanner function we have to put the input string and the result
++ passed up from the parser into the same structure which address
++ is passed down to the parser. */
++ plural += 7;
++ args.cp = plural;
++ if (PLURAL_PARSE (&args) != 0)
++ goto no_plural;
++ domain->plural = args.res;
++ }
++ }
++ else
++ {
++ /* By default we are using the Germanic form: singular form only
++ for `one', the plural form otherwise. Yes, this is also what
++ English is using since English is a Germanic language. */
++ no_plural:
++ INIT_GERMANIC_PLURAL ();
++ domain->plural = &germanic_plural;
++ domain->nplurals = 2;
++ }
+ }
+
+
+@@ -212,9 +549,16 @@
+ _nl_unload_domain (domain)
+ struct loaded_domain *domain;
+ {
++ if (domain->plural != &germanic_plural)
++ __gettext_free_exp (domain->plural);
++
++ _nl_free_domain_conv (domain);
++
++# ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
++# endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+
+ free (domain);
+diff -urN parted-1.4.17.orig/intl/localcharset.c parted-1.4.17/intl/localcharset.c
+--- parted-1.4.17.orig/intl/localcharset.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/localcharset.c Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,271 @@
++/* Determine a canonical name for the current locale's character encoding.
++
++ Copyright (C) 2000-2001 Free Software Foundation, Inc.
++
++ This program 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, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++ USA. */
++
++/* Written by Bruno Haible <haible@clisp.cons.org>. */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#if HAVE_STDDEF_H
++# include <stddef.h>
++#endif
++
++#include <stdio.h>
++#if HAVE_STRING_H
++# include <string.h>
++#else
++# include <strings.h>
++#endif
++#if HAVE_STDLIB_H
++# include <stdlib.h>
++#endif
++
++#if defined _WIN32 || defined __WIN32__
++# undef WIN32 /* avoid warning on mingw32 */
++# define WIN32
++#endif
++
++#ifndef WIN32
++# if HAVE_LANGINFO_CODESET
++# include <langinfo.h>
++# else
++# if HAVE_SETLOCALE
++# include <locale.h>
++# endif
++# endif
++#else /* WIN32 */
++# define WIN32_LEAN_AND_MEAN
++# include <windows.h>
++#endif
++
++#ifndef DIRECTORY_SEPARATOR
++# define DIRECTORY_SEPARATOR '/'
++#endif
++
++#ifndef ISSLASH
++# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
++#endif
++
++/* The following static variable is declared 'volatile' to avoid a
++ possible multithread problem in the function get_charset_aliases. If we
++ are running in a threaded environment, and if two threads initialize
++ 'charset_aliases' simultaneously, both will produce the same value,
++ and everything will be ok if the two assignments to 'charset_aliases'
++ are atomic. But I don't know what will happen if the two assignments mix. */
++#if __STDC__ != 1
++# define volatile /* empty */
++#endif
++/* Pointer to the contents of the charset.alias file, if it has already been
++ read, else NULL. Its format is:
++ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
++static const char * volatile charset_aliases;
++
++/* Return a pointer to the contents of the charset.alias file. */
++static const char *
++get_charset_aliases ()
++{
++ const char *cp;
++
++ cp = charset_aliases;
++ if (cp == NULL)
++ {
++#ifndef WIN32
++ FILE *fp;
++ const char *dir = LIBDIR;
++ const char *base = "charset.alias";
++ char *file_name;
++
++ /* Concatenate dir and base into freshly allocated file_name. */
++ {
++ size_t dir_len = strlen (dir);
++ size_t base_len = strlen (base);
++ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
++ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
++ if (file_name != NULL)
++ {
++ memcpy (file_name, dir, dir_len);
++ if (add_slash)
++ file_name[dir_len] = DIRECTORY_SEPARATOR;
++ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
++ }
++ }
++
++ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
++ /* Out of memory or file not found, treat it as empty. */
++ cp = "";
++ else
++ {
++ /* Parse the file's contents. */
++ int c;
++ char buf1[50+1];
++ char buf2[50+1];
++ char *res_ptr = NULL;
++ size_t res_size = 0;
++ size_t l1, l2;
++
++ for (;;)
++ {
++ c = getc (fp);
++ if (c == EOF)
++ break;
++ if (c == '\n' || c == ' ' || c == '\t')
++ continue;
++ if (c == '#')
++ {
++ /* Skip comment, to end of line. */
++ do
++ c = getc (fp);
++ while (!(c == EOF || c == '\n'));
++ if (c == EOF)
++ break;
++ continue;
++ }
++ ungetc (c, fp);
++ if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
++ break;
++ l1 = strlen (buf1);
++ l2 = strlen (buf2);
++ if (res_size == 0)
++ {
++ res_size = l1 + 1 + l2 + 1;
++ res_ptr = malloc (res_size + 1);
++ }
++ else
++ {
++ res_size += l1 + 1 + l2 + 1;
++ res_ptr = realloc (res_ptr, res_size + 1);
++ }
++ if (res_ptr == NULL)
++ {
++ /* Out of memory. */
++ res_size = 0;
++ break;
++ }
++ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
++ strcpy (res_ptr + res_size - (l2 + 1), buf2);
++ }
++ fclose (fp);
++ if (res_size == 0)
++ cp = "";
++ else
++ {
++ *(res_ptr + res_size) = '\0';
++ cp = res_ptr;
++ }
++ }
++
++ if (file_name != NULL)
++ free (file_name);
++
++#else /* WIN32 */
++
++ /* To avoid the troubles of installing a separate file in the same
++ directory as the DLL and of retrieving the DLL's directory at
++ runtime, simply inline the aliases here. */
++
++ cp = "CP936" "\0" "GBK" "\0"
++ "CP1361" "\0" "JOHAB" "\0";
++#endif
++
++ charset_aliases = cp;
++ }
++
++ return cp;
++}
++
++/* Determine the current locale's character encoding, and canonicalize it
++ into one of the canonical names listed in config.charset.
++ The result must not be freed; it is statically allocated.
++ If the canonical name cannot be determined, the result is a non-canonical
++ name. */
++
++#ifdef STATIC
++STATIC
++#endif
++const char *
++locale_charset ()
++{
++ const char *codeset;
++ const char *aliases;
++
++#ifndef WIN32
++
++# if HAVE_LANGINFO_CODESET
++
++ /* Most systems support nl_langinfo (CODESET) nowadays. */
++ codeset = nl_langinfo (CODESET);
++
++# else
++
++ /* On old systems which lack it, use setlocale or getenv. */
++ const char *locale = NULL;
++
++ /* But most old systems don't have a complete set of locales. Some
++ (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
++ use setlocale here; it would return "C" when it doesn't support the
++ locale name the user has set. */
++# if HAVE_SETLOCALE && 0
++ locale = setlocale (LC_CTYPE, NULL);
++# endif
++ if (locale == NULL || locale[0] == '\0')
++ {
++ locale = getenv ("LC_ALL");
++ if (locale == NULL || locale[0] == '\0')
++ {
++ locale = getenv ("LC_CTYPE");
++ if (locale == NULL || locale[0] == '\0')
++ locale = getenv ("LANG");
++ }
++ }
++
++ /* On some old systems, one used to set locale = "iso8859_1". On others,
++ you set it to "language_COUNTRY.charset". In any case, we resolve it
++ through the charset.alias file. */
++ codeset = locale;
++
++# endif
++
++#else /* WIN32 */
++
++ static char buf[2 + 10 + 1];
++
++ /* Win32 has a function returning the locale's codepage as a number. */
++ sprintf (buf, "CP%u", GetACP ());
++ codeset = buf;
++
++#endif
++
++ if (codeset == NULL)
++ /* The canonical name cannot be determined. */
++ codeset = "";
++
++ /* Resolve alias. */
++ for (aliases = get_charset_aliases ();
++ *aliases != '\0';
++ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
++ if (strcmp (codeset, aliases) == 0
++ || (aliases[0] == '*' && aliases[1] == '\0'))
++ {
++ codeset = aliases + strlen (aliases) + 1;
++ break;
++ }
++
++ return codeset;
++}
+diff -urN parted-1.4.17.orig/intl/locale.alias parted-1.4.17/intl/locale.alias
+--- parted-1.4.17.orig/intl/locale.alias Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/locale.alias Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,77 @@
++# Locale name alias data base.
++# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# The format of this file is the same as for the corresponding file of
++# the X Window System, which normally can be found in
++# /usr/lib/X11/locale/locale.alias
++# A single line contains two fields: an alias and a substitution value.
++# All entries are case independent.
++
++# Note: This file is far from being complete. If you have a value for
++# your own site which you think might be useful for others too, share
++# it with the rest of us. Send it using the `glibcbug' script to
++# bugs@gnu.org.
++
++# Packages using this file:
++
++bokmal no_NO.ISO-8859-1
++bokmål no_NO.ISO-8859-1
++catalan ca_ES.ISO-8859-1
++croatian hr_HR.ISO-8859-2
++czech cs_CZ.ISO-8859-2
++danish da_DK.ISO-8859-1
++dansk da_DK.ISO-8859-1
++deutsch de_DE.ISO-8859-1
++dutch nl_NL.ISO-8859-1
++eesti et_EE.ISO-8859-1
++estonian et_EE.ISO-8859-1
++finnish fi_FI.ISO-8859-1
++français fr_FR.ISO-8859-1
++french fr_FR.ISO-8859-1
++galego gl_ES.ISO-8859-1
++galician gl_ES.ISO-8859-1
++german de_DE.ISO-8859-1
++greek el_GR.ISO-8859-7
++hebrew iw_IL.ISO-8859-8
++hrvatski hr_HR.ISO-8859-2
++hungarian hu_HU.ISO-8859-2
++icelandic is_IS.ISO-8859-1
++italian it_IT.ISO-8859-1
++japanese ja_JP.eucJP
++japanese.euc ja_JP.eucJP
++ja_JP ja_JP.eucJP
++ja_JP.ujis ja_JP.eucJP
++japanese.sjis ja_JP.SJIS
++korean ko_KR.eucKR
++korean.euc ko_KR.eucKR
++ko_KR ko_KR.eucKR
++lithuanian lt_LT.ISO-8859-13
++nb_NO no_NO.ISO-8859-1
++nb_NO.ISO-8859-1 no_NO.ISO-8859-1
++norwegian no_NO.ISO-8859-1
++nynorsk nn_NO.ISO-8859-1
++polish pl_PL.ISO-8859-2
++portuguese pt_PT.ISO-8859-1
++romanian ro_RO.ISO-8859-2
++russian ru_RU.ISO-8859-5
++slovak sk_SK.ISO-8859-2
++slovene sl_SI.ISO-8859-2
++slovenian sl_SI.ISO-8859-2
++spanish es_ES.ISO-8859-1
++swedish sv_SE.ISO-8859-1
++thai th_TH.TIS-620
++turkish tr_TR.ISO-8859-9
+diff -urN parted-1.4.17.orig/intl/localealias.c parted-1.4.17/intl/localealias.c
+--- parted-1.4.17.orig/intl/localealias.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/localealias.c Thu Aug 2 14:26:15 2001
+@@ -1,6 +1,5 @@
+ /* Handle aliases for locale names.
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
++ Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -16,6 +15,13 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
++ This must come before <config.h> because <config.h> may include
++ <features.h>, and once <features.h> has been included, it's too late. */
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++
+ #ifdef HAVE_CONFIG_H
+ # include <config.h>
+ #endif
+@@ -41,35 +47,15 @@
+ # endif
+ #endif
+
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#else
+-char *getenv ();
+-# ifdef HAVE_MALLOC_H
+-# include <malloc.h>
+-# else
+-void free ();
+-# endif
+-#endif
++#include <stdlib.h>
+
+-#if defined HAVE_STRING_H || defined _LIBC
+-# ifndef _GNU_SOURCE
+-# define _GNU_SOURCE 1
+-# endif
+-# include <string.h>
+-#else
+-# include <strings.h>
+-# ifndef memcpy
+-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+-# endif
+-#endif
++#include <string.h>
+ #if !HAVE_STRCHR && !defined _LIBC
+ # ifndef strchr
+ # define strchr index
+ # endif
+ #endif
+
+-#include "gettext.h"
+ #include "gettextP.h"
+
+ /* @@ end of prolog @@ */
+@@ -80,7 +66,9 @@
+ file and the name space must not be polluted. */
+ # define strcasecmp __strcasecmp
+
+-# define mempcpy __mempcpy
++# ifndef mempcpy
++# define mempcpy __mempcpy
++# endif
+ # define HAVE_MEMPCPY 1
+
+ /* We need locking here since we can be called from different places. */
+@@ -89,41 +77,27 @@
+ __libc_lock_define_initialized (static, lock);
+ #endif
+
++#ifndef internal_function
++# define internal_function
++#endif
+
+-/* For those loosing systems which don't have `alloca' we have to add
++/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+ #ifdef HAVE_ALLOCA
+-/* Nothing has to be done. */
+-# define ADD_BLOCK(list, address) /* nothing */
+-# define FREE_BLOCKS(list) /* nothing */
++# define freea(p) /* nothing */
+ #else
+-struct block_list
+-{
+- void *address;
+- struct block_list *next;
+-};
+-# define ADD_BLOCK(list, addr) \
+- do { \
+- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+- /* If we cannot get a free block we cannot add the new element to \
+- the list. */ \
+- if (newp != NULL) { \
+- newp->address = (addr); \
+- newp->next = (list); \
+- (list) = newp; \
+- } \
+- } while (0)
+-# define FREE_BLOCKS(list) \
+- do { \
+- while (list != NULL) { \
+- struct block_list *old = list; \
+- list = list->next; \
+- free (old); \
+- } \
+- } while (0)
+-# undef alloca
+-# define alloca(size) (malloc (size))
+-#endif /* have alloca */
++# define alloca(n) malloc (n)
++# define freea(p) free (p)
++#endif
++
++#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
++# undef fgets
++# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
++#endif
++#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
++# undef feof
++# define feof(s) feof_unlocked (s)
++#endif
+
+
+ struct alias_map
+@@ -133,18 +107,18 @@
+ };
+
+
+-static char *string_space = NULL;
+-static size_t string_space_act = 0;
+-static size_t string_space_max = 0;
++static char *string_space;
++static size_t string_space_act;
++static size_t string_space_max;
+ static struct alias_map *map;
+-static size_t nmap = 0;
+-static size_t maxmap = 0;
++static size_t nmap;
++static size_t maxmap;
+
+
+ /* Prototypes for local functions. */
+ static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+ internal_function;
+-static void extend_alias_table PARAMS ((void));
++static int extend_alias_table PARAMS ((void));
+ static int alias_compare PARAMS ((const struct alias_map *map1,
+ const struct alias_map *map2));
+
+@@ -190,11 +164,12 @@
+ {
+ const char *start;
+
+- while (locale_alias_path[0] == ':')
++ while (locale_alias_path[0] == PATH_SEPARATOR)
+ ++locale_alias_path;
+ start = locale_alias_path;
+
+- while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
++ while (locale_alias_path[0] != '\0'
++ && locale_alias_path[0] != PATH_SEPARATOR)
+ ++locale_alias_path;
+
+ if (start < locale_alias_path)
+@@ -217,16 +192,12 @@
+ const char *fname;
+ int fname_len;
+ {
+-#ifndef HAVE_ALLOCA
+- struct block_list *block_list = NULL;
+-#endif
+ FILE *fp;
+ char *full_fname;
+ size_t added;
+ static const char aliasfile[] = "/locale.alias";
+
+ full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+- ADD_BLOCK (block_list, full_fname);
+ #ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+@@ -236,11 +207,9 @@
+ #endif
+
+ fp = fopen (full_fname, "r");
++ freea (full_fname);
+ if (fp == NULL)
+- {
+- FREE_BLOCKS (block_list);
+- return 0;
+- }
++ return 0;
+
+ added = 0;
+ while (!feof (fp))
+@@ -250,10 +219,10 @@
+ b) these fields must be usable as file names and so must not
+ be that long
+ */
+- unsigned char buf[BUFSIZ];
+- unsigned char *alias;
+- unsigned char *value;
+- unsigned char *cp;
++ char buf[BUFSIZ];
++ char *alias;
++ char *value;
++ char *cp;
+
+ if (fgets (buf, sizeof buf, fp) == NULL)
+ /* EOF reached. */
+@@ -312,7 +281,8 @@
+ *cp++ = '\0';
+
+ if (nmap >= maxmap)
+- extend_alias_table ();
++ if (__builtin_expect (extend_alias_table (), 0))
++ return added;
+
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
+@@ -325,10 +295,19 @@
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
++ return added;
++
++ if (__builtin_expect (string_space != new_pool, 0))
+ {
+- FREE_BLOCKS (block_list);
+- return added;
++ size_t i;
++
++ for (i = 0; i < nmap; i++)
++ {
++ map[i].alias += new_pool - string_space;
++ map[i].value += new_pool - string_space;
++ }
+ }
++
+ string_space = new_pool;
+ string_space_max = new_size;
+ }
+@@ -355,12 +334,11 @@
+ qsort (map, nmap, sizeof (struct alias_map),
+ (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+- FREE_BLOCKS (block_list);
+ return added;
+ }
+
+
+-static void
++static int
+ extend_alias_table ()
+ {
+ size_t new_size;
+@@ -371,10 +349,11 @@
+ * sizeof (struct alias_map)));
+ if (new_map == NULL)
+ /* Simply don't extend: we don't have any more core. */
+- return;
++ return -1;
+
+ map = new_map;
+ maxmap = new_size;
++ return 0;
+ }
+
+
+diff -urN parted-1.4.17.orig/intl/ngettext.c parted-1.4.17/intl/ngettext.c
+--- parted-1.4.17.orig/intl/ngettext.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/ngettext.c Thu Aug 2 14:26:15 2001
+@@ -0,0 +1,67 @@
++/* Implementation of ngettext(3) function.
++ Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#ifdef _LIBC
++# define __need_NULL
++# include <stddef.h>
++#else
++# include <stdlib.h> /* Just for NULL. */
++#endif
++
++#include "gettextP.h"
++#ifdef _LIBC
++# include <libintl.h>
++#else
++# include "libgnuintl.h"
++#endif
++
++#include <locale.h>
++
++/* @@ end of prolog @@ */
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define NGETTEXT __ngettext
++# define DCNGETTEXT __dcngettext
++#else
++# define NGETTEXT ngettext__
++# define DCNGETTEXT dcngettext__
++#endif
++
++/* Look up MSGID in the current default message catalog for the current
++ LC_MESSAGES locale. If not found, returns MSGID itself (the default
++ text). */
++char *
++NGETTEXT (msgid1, msgid2, n)
++ const char *msgid1;
++ const char *msgid2;
++ unsigned long int n;
++{
++ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
++}
++
++#ifdef _LIBC
++/* Alias for function name in GNU C Library. */
++weak_alias (__ngettext, ngettext);
++#endif
+diff -urN parted-1.4.17.orig/intl/plural.c parted-1.4.17/intl/plural.c
+--- parted-1.4.17.orig/intl/plural.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/plural.c Thu Aug 2 14:26:17 2001
+@@ -0,0 +1,1325 @@
++
++/* A Bison parser, made from plural.y
++ by GNU Bison version 1.28 */
++
++#define YYBISON 1 /* Identify Bison output. */
++
++#define yyparse __gettextparse
++#define yylex __gettextlex
++#define yyerror __gettexterror
++#define yylval __gettextlval
++#define yychar __gettextchar
++#define yydebug __gettextdebug
++#define yynerrs __gettextnerrs
++#define EQUOP2 257
++#define CMPOP2 258
++#define ADDOP2 259
++#define MULOP2 260
++#define NUMBER 261
++
++#line 1 "plural.y"
++
++/* Expression parsing for plural form selection.
++ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++/* The bison generated parser uses alloca. AIX 3 forces us to put this
++ declaration at the beginning of the file. The declaration in bison's
++ skeleton file comes too late. This must come before <config.h>
++ because <config.h> may include arbitrary system headers. */
++#if defined _AIX && !defined __GNUC__
++ #pragma alloca
++#endif
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <stdlib.h>
++#include "gettextP.h"
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define FREE_EXPRESSION __gettext_free_exp
++#else
++# define FREE_EXPRESSION gettext_free_exp__
++# define __gettextparse gettextparse__
++#endif
++
++#define YYLEX_PARAM &((struct parse_args *) arg)->cp
++#define YYPARSE_PARAM arg
++
++#line 52 "plural.y"
++typedef union {
++ unsigned long int num;
++ enum operator op;
++ struct expression *exp;
++} YYSTYPE;
++#line 58 "plural.y"
++
++/* Prototypes for local functions. */
++static struct expression *new_exp PARAMS ((int nargs, enum operator op,
++ struct expression * const *args));
++static inline struct expression *new_exp_0 PARAMS ((enum operator op));
++static inline struct expression *new_exp_1 PARAMS ((enum operator op,
++ struct expression *right));
++static struct expression *new_exp_2 PARAMS ((enum operator op,
++ struct expression *left,
++ struct expression *right));
++static inline struct expression *new_exp_3 PARAMS ((enum operator op,
++ struct expression *bexp,
++ struct expression *tbranch,
++ struct expression *fbranch));
++static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
++static void yyerror PARAMS ((const char *str));
++
++/* Allocation of expressions. */
++
++static struct expression *
++new_exp (nargs, op, args)
++ int nargs;
++ enum operator op;
++ struct expression * const *args;
++{
++ int i;
++ struct expression *newp;
++
++ /* If any of the argument could not be malloc'ed, just return NULL. */
++ for (i = nargs - 1; i >= 0; i--)
++ if (args[i] == NULL)
++ goto fail;
++
++ /* Allocate a new expression. */
++ newp = (struct expression *) malloc (sizeof (*newp));
++ if (newp != NULL)
++ {
++ newp->nargs = nargs;
++ newp->operation = op;
++ for (i = nargs - 1; i >= 0; i--)
++ newp->val.args[i] = args[i];
++ return newp;
++ }
++
++ fail:
++ for (i = nargs - 1; i >= 0; i--)
++ FREE_EXPRESSION (args[i]);
++
++ return NULL;
++}
++
++static inline struct expression *
++new_exp_0 (op)
++ enum operator op;
++{
++ return new_exp (0, op, NULL);
++}
++
++static inline struct expression *
++new_exp_1 (op, right)
++ enum operator op;
++ struct expression *right;
++{
++ struct expression *args[1];
++
++ args[0] = right;
++ return new_exp (1, op, args);
++}
++
++static struct expression *
++new_exp_2 (op, left, right)
++ enum operator op;
++ struct expression *left;
++ struct expression *right;
++{
++ struct expression *args[2];
++
++ args[0] = left;
++ args[1] = right;
++ return new_exp (2, op, args);
++}
++
++static inline struct expression *
++new_exp_3 (op, bexp, tbranch, fbranch)
++ enum operator op;
++ struct expression *bexp;
++ struct expression *tbranch;
++ struct expression *fbranch;
++{
++ struct expression *args[3];
++
++ args[0] = bexp;
++ args[1] = tbranch;
++ args[2] = fbranch;
++ return new_exp (3, op, args);
++}
++
++#include <stdio.h>
++
++#ifndef __cplusplus
++#ifndef __STDC__
++#define const
++#endif
++#endif
++
++
++
++#define YYFINAL 27
++#define YYFLAG -32768
++#define YYNTBASE 16
++
++#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
++
++static const char yytranslate[] = { 0,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 10, 2, 2, 2, 2, 5, 2, 14,
++ 15, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 12, 2, 2,
++ 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 13,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 1, 6, 7, 8, 9,
++ 11
++};
++
++#if YYDEBUG != 0
++static const short yyprhs[] = { 0,
++ 0, 2, 8, 12, 16, 20, 24, 28, 32, 35,
++ 37, 39
++};
++
++static const short yyrhs[] = { 17,
++ 0, 17, 3, 17, 12, 17, 0, 17, 4, 17,
++ 0, 17, 5, 17, 0, 17, 6, 17, 0, 17,
++ 7, 17, 0, 17, 8, 17, 0, 17, 9, 17,
++ 0, 10, 17, 0, 13, 0, 11, 0, 14, 17,
++ 15, 0
++};
++
++#endif
++
++#if YYDEBUG != 0
++static const short yyrline[] = { 0,
++ 177, 185, 189, 193, 197, 201, 205, 209, 213, 217,
++ 221, 226
++};
++#endif
++
++
++#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
++
++static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'",
++"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
++"start","exp", NULL
++};
++#endif
++
++static const short yyr1[] = { 0,
++ 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
++ 17, 17
++};
++
++static const short yyr2[] = { 0,
++ 1, 5, 3, 3, 3, 3, 3, 3, 2, 1,
++ 1, 3
++};
++
++static const short yydefact[] = { 0,
++ 0, 11, 10, 0, 1, 9, 0, 0, 0, 0,
++ 0, 0, 0, 0, 12, 0, 3, 4, 5, 6,
++ 7, 8, 0, 2, 0, 0, 0
++};
++
++static const short yydefgoto[] = { 25,
++ 5
++};
++
++static const short yypact[] = { -9,
++ -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9,
++ -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26,
++ -3,-32768, -9, 34, 21, 53,-32768
++};
++
++static const short yypgoto[] = {-32768,
++ -1
++};
++
++
++#define YYLAST 53
++
++
++static const short yytable[] = { 6,
++ 1, 2, 7, 3, 4, 14, 16, 17, 18, 19,
++ 20, 21, 22, 8, 9, 10, 11, 12, 13, 14,
++ 26, 24, 12, 13, 14, 15, 8, 9, 10, 11,
++ 12, 13, 14, 13, 14, 23, 8, 9, 10, 11,
++ 12, 13, 14, 10, 11, 12, 13, 14, 11, 12,
++ 13, 14, 27
++};
++
++static const short yycheck[] = { 1,
++ 10, 11, 4, 13, 14, 9, 8, 9, 10, 11,
++ 12, 13, 14, 3, 4, 5, 6, 7, 8, 9,
++ 0, 23, 7, 8, 9, 15, 3, 4, 5, 6,
++ 7, 8, 9, 8, 9, 12, 3, 4, 5, 6,
++ 7, 8, 9, 5, 6, 7, 8, 9, 6, 7,
++ 8, 9, 0
++};
++#define YYPURE 1
++
++/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
++#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
++/* This file comes from bison-1.28. */
++
++/* Skeleton output parser for bison,
++ Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++/* As a special exception, when this file is copied by Bison into a
++ Bison output file, you may use that output file without restriction.
++ This special exception was added by the Free Software Foundation
++ in version 1.24 of Bison. */
++
++/* This is the parser code that is written into each bison parser
++ when the %semantic_parser declaration is not specified in the grammar.
++ It was written by Richard Stallman by simplifying the hairy parser
++ used when %semantic_parser is specified. */
++
++#ifndef YYSTACK_USE_ALLOCA
++#ifdef alloca
++#define YYSTACK_USE_ALLOCA
++#else /* alloca not defined */
++#ifdef __GNUC__
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
++#else /* not GNU C. */
++#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
++#define YYSTACK_USE_ALLOCA
++#include <alloca.h>
++#else /* not sparc */
++/* We think this test detects Watcom and Microsoft C. */
++/* This used to test MSDOS, but that is a bad idea
++ since that symbol is in the user namespace. */
++#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
++#if 0 /* No need for malloc.h, which pollutes the namespace;
++ instead, just don't use alloca. */
++#include <malloc.h>
++#endif
++#else /* not MSDOS, or __TURBOC__ */
++#if defined(_AIX)
++/* I don't know what this was needed for, but it pollutes the namespace.
++ So I turned it off. rms, 2 May 1997. */
++/* #include <malloc.h> */
++ #pragma alloca
++#define YYSTACK_USE_ALLOCA
++#else /* not MSDOS, or __TURBOC__, or _AIX */
++#if 0
++#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
++ and on HPUX 10. Eventually we can turn this on. */
++#define YYSTACK_USE_ALLOCA
++#define alloca __builtin_alloca
++#endif /* __hpux */
++#endif
++#endif /* not _AIX */
++#endif /* not MSDOS, or __TURBOC__ */
++#endif /* not sparc */
++#endif /* not GNU C */
++#endif /* alloca not defined */
++#endif /* YYSTACK_USE_ALLOCA not defined */
++
++#ifdef YYSTACK_USE_ALLOCA
++#define YYSTACK_ALLOC alloca
++#else
++#define YYSTACK_ALLOC malloc
++#endif
++
++/* Note: there must be only one dollar sign in this file.
++ It is replaced by the list of actions, each action
++ as one case of the switch. */
++
++#define yyerrok (yyerrstatus = 0)
++#define yyclearin (yychar = YYEMPTY)
++#define YYEMPTY -2
++#define YYEOF 0
++#define YYACCEPT goto yyacceptlab
++#define YYABORT goto yyabortlab
++#define YYERROR goto yyerrlab1
++/* Like YYERROR except do call yyerror.
++ This remains here temporarily to ease the
++ transition to the new meaning of YYERROR, for GCC.
++ Once GCC version 2 has supplanted version 1, this can go. */
++#define YYFAIL goto yyerrlab
++#define YYRECOVERING() (!!yyerrstatus)
++#define YYBACKUP(token, value) \
++do \
++ if (yychar == YYEMPTY && yylen == 1) \
++ { yychar = (token), yylval = (value); \
++ yychar1 = YYTRANSLATE (yychar); \
++ YYPOPSTACK; \
++ goto yybackup; \
++ } \
++ else \
++ { yyerror ("syntax error: cannot back up"); YYERROR; } \
++while (0)
++
++#define YYTERROR 1
++#define YYERRCODE 256
++
++#ifndef YYPURE
++#define YYLEX yylex()
++#endif
++
++#ifdef YYPURE
++#ifdef YYLSP_NEEDED
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
++#else
++#define YYLEX yylex(&yylval, &yylloc)
++#endif
++#else /* not YYLSP_NEEDED */
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, YYLEX_PARAM)
++#else
++#define YYLEX yylex(&yylval)
++#endif
++#endif /* not YYLSP_NEEDED */
++#endif
++
++/* If nonreentrant, generate the variables here */
++
++#ifndef YYPURE
++
++int yychar; /* the lookahead symbol */
++YYSTYPE yylval; /* the semantic value of the */
++ /* lookahead symbol */
++
++#ifdef YYLSP_NEEDED
++YYLTYPE yylloc; /* location data for the lookahead */
++ /* symbol */
++#endif
++
++int yynerrs; /* number of parse errors so far */
++#endif /* not YYPURE */
++
++#if YYDEBUG != 0
++int yydebug; /* nonzero means print parse trace */
++/* Since this is uninitialized, it does not stop multiple parsers
++ from coexisting. */
++#endif
++
++/* YYINITDEPTH indicates the initial size of the parser's stacks */
++
++#ifndef YYINITDEPTH
++#define YYINITDEPTH 200
++#endif
++
++/* YYMAXDEPTH is the maximum size the stacks can grow to
++ (effective only if the built-in stack extension method is used). */
++
++#if YYMAXDEPTH == 0
++#undef YYMAXDEPTH
++#endif
++
++#ifndef YYMAXDEPTH
++#define YYMAXDEPTH 10000
++#endif
++
++/* Define __yy_memcpy. Note that the size argument
++ should be passed with type unsigned int, because that is what the non-GCC
++ definitions require. With GCC, __builtin_memcpy takes an arg
++ of type size_t, but it can handle unsigned int. */
++
++#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
++#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
++#else /* not GNU C or C++ */
++#ifndef __cplusplus
++
++/* This is the most reliable way to avoid incompatibilities
++ in available built-in functions on various systems. */
++static void
++__yy_memcpy (to, from, count)
++ char *to;
++ char *from;
++ unsigned int count;
++{
++ register char *f = from;
++ register char *t = to;
++ register int i = count;
++
++ while (i-- > 0)
++ *t++ = *f++;
++}
++
++#else /* __cplusplus */
++
++/* This is the most reliable way to avoid incompatibilities
++ in available built-in functions on various systems. */
++static void
++__yy_memcpy (char *to, char *from, unsigned int count)
++{
++ register char *t = to;
++ register char *f = from;
++ register int i = count;
++
++ while (i-- > 0)
++ *t++ = *f++;
++}
++
++#endif
++#endif
++
++#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
++
++/* The user can define YYPARSE_PARAM as the name of an argument to be passed
++ into yyparse. The argument should have type void *.
++ It should actually point to an object.
++ Grammar actions can access the variable by casting it
++ to the proper pointer type. */
++
++#ifdef YYPARSE_PARAM
++#ifdef __cplusplus
++#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL
++#else /* not __cplusplus */
++#define YYPARSE_PARAM_ARG YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
++#endif /* not __cplusplus */
++#else /* not YYPARSE_PARAM */
++#define YYPARSE_PARAM_ARG
++#define YYPARSE_PARAM_DECL
++#endif /* not YYPARSE_PARAM */
++
++/* Prevent warning if -Wstrict-prototypes. */
++#ifdef __GNUC__
++#ifdef YYPARSE_PARAM
++int yyparse (void *);
++#else
++int yyparse (void);
++#endif
++#endif
++
++int
++yyparse(YYPARSE_PARAM_ARG)
++ YYPARSE_PARAM_DECL
++{
++ register int yystate;
++ register int yyn;
++ register short *yyssp;
++ register YYSTYPE *yyvsp;
++ int yyerrstatus; /* number of tokens to shift before error messages enabled */
++ int yychar1 = 0; /* lookahead token as an internal (translated) token number */
++
++ short yyssa[YYINITDEPTH]; /* the state stack */
++ YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
++
++ short *yyss = yyssa; /* refer to the stacks thru separate pointers */
++ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
++
++#ifdef YYLSP_NEEDED
++ YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
++ YYLTYPE *yyls = yylsa;
++ YYLTYPE *yylsp;
++
++#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
++#else
++#define YYPOPSTACK (yyvsp--, yyssp--)
++#endif
++
++ int yystacksize = YYINITDEPTH;
++ int yyfree_stacks = 0;
++
++#ifdef YYPURE
++ int yychar;
++ YYSTYPE yylval;
++ int yynerrs;
++#ifdef YYLSP_NEEDED
++ YYLTYPE yylloc;
++#endif
++#endif
++
++ YYSTYPE yyval; /* the variable used to return */
++ /* semantic values from the action */
++ /* routines */
++
++ int yylen;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Starting parse\n");
++#endif
++
++ yystate = 0;
++ yyerrstatus = 0;
++ yynerrs = 0;
++ yychar = YYEMPTY; /* Cause a token to be read. */
++
++ /* Initialize stack pointers.
++ Waste one element of value and location stack
++ so that they stay on the same level as the state stack.
++ The wasted elements are never initialized. */
++
++ yyssp = yyss - 1;
++ yyvsp = yyvs;
++#ifdef YYLSP_NEEDED
++ yylsp = yyls;
++#endif
++
++/* Push a new state, which is found in yystate . */
++/* In all cases, when you get here, the value and location stacks
++ have just been pushed. so pushing a state here evens the stacks. */
++yynewstate:
++
++ *++yyssp = yystate;
++
++ if (yyssp >= yyss + yystacksize - 1)
++ {
++ /* Give user a chance to reallocate the stack */
++ /* Use copies of these so that the &'s don't force the real ones into memory. */
++ YYSTYPE *yyvs1 = yyvs;
++ short *yyss1 = yyss;
++#ifdef YYLSP_NEEDED
++ YYLTYPE *yyls1 = yyls;
++#endif
++
++ /* Get the current used size of the three stacks, in elements. */
++ int size = yyssp - yyss + 1;
++
++#ifdef yyoverflow
++ /* Each stack pointer address is followed by the size of
++ the data in use in that stack, in bytes. */
++#ifdef YYLSP_NEEDED
++ /* This used to be a conditional around just the two extra args,
++ but that might be undefined if yyoverflow is a macro. */
++ yyoverflow("parser stack overflow",
++ &yyss1, size * sizeof (*yyssp),
++ &yyvs1, size * sizeof (*yyvsp),
++ &yyls1, size * sizeof (*yylsp),
++ &yystacksize);
++#else
++ yyoverflow("parser stack overflow",
++ &yyss1, size * sizeof (*yyssp),
++ &yyvs1, size * sizeof (*yyvsp),
++ &yystacksize);
++#endif
++
++ yyss = yyss1; yyvs = yyvs1;
++#ifdef YYLSP_NEEDED
++ yyls = yyls1;
++#endif
++#else /* no yyoverflow */
++ /* Extend the stack our own way. */
++ if (yystacksize >= YYMAXDEPTH)
++ {
++ yyerror("parser stack overflow");
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 2;
++ }
++ yystacksize *= 2;
++ if (yystacksize > YYMAXDEPTH)
++ yystacksize = YYMAXDEPTH;
++#ifndef YYSTACK_USE_ALLOCA
++ yyfree_stacks = 1;
++#endif
++ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
++ __yy_memcpy ((char *)yyss, (char *)yyss1,
++ size * (unsigned int) sizeof (*yyssp));
++ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
++ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
++ size * (unsigned int) sizeof (*yyvsp));
++#ifdef YYLSP_NEEDED
++ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
++ __yy_memcpy ((char *)yyls, (char *)yyls1,
++ size * (unsigned int) sizeof (*yylsp));
++#endif
++#endif /* no yyoverflow */
++
++ yyssp = yyss + size - 1;
++ yyvsp = yyvs + size - 1;
++#ifdef YYLSP_NEEDED
++ yylsp = yyls + size - 1;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Stack size increased to %d\n", yystacksize);
++#endif
++
++ if (yyssp >= yyss + yystacksize - 1)
++ YYABORT;
++ }
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Entering state %d\n", yystate);
++#endif
++
++ goto yybackup;
++ yybackup:
++
++/* Do appropriate processing given the current state. */
++/* Read a lookahead token if we need one and don't already have one. */
++/* yyresume: */
++
++ /* First try to decide what to do without reference to lookahead token. */
++
++ yyn = yypact[yystate];
++ if (yyn == YYFLAG)
++ goto yydefault;
++
++ /* Not known => get a lookahead token if don't already have one. */
++
++ /* yychar is either YYEMPTY or YYEOF
++ or a valid token in external form. */
++
++ if (yychar == YYEMPTY)
++ {
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Reading a token: ");
++#endif
++ yychar = YYLEX;
++ }
++
++ /* Convert token to internal form (in yychar1) for indexing tables with */
++
++ if (yychar <= 0) /* This means end of input. */
++ {
++ yychar1 = 0;
++ yychar = YYEOF; /* Don't call YYLEX any more */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Now at end of input.\n");
++#endif
++ }
++ else
++ {
++ yychar1 = YYTRANSLATE(yychar);
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
++ /* Give the individual parser a way to print the precise meaning
++ of a token, for further debugging info. */
++#ifdef YYPRINT
++ YYPRINT (stderr, yychar, yylval);
++#endif
++ fprintf (stderr, ")\n");
++ }
++#endif
++ }
++
++ yyn += yychar1;
++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
++ goto yydefault;
++
++ yyn = yytable[yyn];
++
++ /* yyn is what to do for this token type in this state.
++ Negative => reduce, -yyn is rule number.
++ Positive => shift, yyn is new state.
++ New state is final state => don't bother to shift,
++ just return success.
++ 0, or most negative number => error. */
++
++ if (yyn < 0)
++ {
++ if (yyn == YYFLAG)
++ goto yyerrlab;
++ yyn = -yyn;
++ goto yyreduce;
++ }
++ else if (yyn == 0)
++ goto yyerrlab;
++
++ if (yyn == YYFINAL)
++ YYACCEPT;
++
++ /* Shift the lookahead token. */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
++#endif
++
++ /* Discard the token being shifted unless it is eof. */
++ if (yychar != YYEOF)
++ yychar = YYEMPTY;
++
++ *++yyvsp = yylval;
++#ifdef YYLSP_NEEDED
++ *++yylsp = yylloc;
++#endif
++
++ /* count tokens shifted since error; after three, turn off error status. */
++ if (yyerrstatus) yyerrstatus--;
++
++ yystate = yyn;
++ goto yynewstate;
++
++/* Do the default action for the current state. */
++yydefault:
++
++ yyn = yydefact[yystate];
++ if (yyn == 0)
++ goto yyerrlab;
++
++/* Do a reduction. yyn is the number of a rule to reduce with. */
++yyreduce:
++ yylen = yyr2[yyn];
++ if (yylen > 0)
++ yyval = yyvsp[1-yylen]; /* implement default value of the action */
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ int i;
++
++ fprintf (stderr, "Reducing via rule %d (line %d), ",
++ yyn, yyrline[yyn]);
++
++ /* Print the symbols being reduced, and their result. */
++ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
++ fprintf (stderr, "%s ", yytname[yyrhs[i]]);
++ fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
++ }
++#endif
++
++
++ switch (yyn) {
++
++case 1:
++#line 178 "plural.y"
++{
++ if (yyvsp[0].exp == NULL)
++ YYABORT;
++ ((struct parse_args *) arg)->res = yyvsp[0].exp;
++ ;
++ break;}
++case 2:
++#line 186 "plural.y"
++{
++ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 3:
++#line 190 "plural.y"
++{
++ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 4:
++#line 194 "plural.y"
++{
++ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 5:
++#line 198 "plural.y"
++{
++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 6:
++#line 202 "plural.y"
++{
++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 7:
++#line 206 "plural.y"
++{
++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 8:
++#line 210 "plural.y"
++{
++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
++ ;
++ break;}
++case 9:
++#line 214 "plural.y"
++{
++ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
++ ;
++ break;}
++case 10:
++#line 218 "plural.y"
++{
++ yyval.exp = new_exp_0 (var);
++ ;
++ break;}
++case 11:
++#line 222 "plural.y"
++{
++ if ((yyval.exp = new_exp_0 (num)) != NULL)
++ yyval.exp->val.num = yyvsp[0].num;
++ ;
++ break;}
++case 12:
++#line 227 "plural.y"
++{
++ yyval.exp = yyvsp[-1].exp;
++ ;
++ break;}
++}
++ /* the action file gets copied in in place of this dollarsign */
++#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
++
++ yyvsp -= yylen;
++ yyssp -= yylen;
++#ifdef YYLSP_NEEDED
++ yylsp -= yylen;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ short *ssp1 = yyss - 1;
++ fprintf (stderr, "state stack now");
++ while (ssp1 != yyssp)
++ fprintf (stderr, " %d", *++ssp1);
++ fprintf (stderr, "\n");
++ }
++#endif
++
++ *++yyvsp = yyval;
++
++#ifdef YYLSP_NEEDED
++ yylsp++;
++ if (yylen == 0)
++ {
++ yylsp->first_line = yylloc.first_line;
++ yylsp->first_column = yylloc.first_column;
++ yylsp->last_line = (yylsp-1)->last_line;
++ yylsp->last_column = (yylsp-1)->last_column;
++ yylsp->text = 0;
++ }
++ else
++ {
++ yylsp->last_line = (yylsp+yylen-1)->last_line;
++ yylsp->last_column = (yylsp+yylen-1)->last_column;
++ }
++#endif
++
++ /* Now "shift" the result of the reduction.
++ Determine what state that goes to,
++ based on the state we popped back to
++ and the rule number reduced by. */
++
++ yyn = yyr1[yyn];
++
++ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
++ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
++ yystate = yytable[yystate];
++ else
++ yystate = yydefgoto[yyn - YYNTBASE];
++
++ goto yynewstate;
++
++yyerrlab: /* here on detecting error */
++
++ if (! yyerrstatus)
++ /* If not already recovering from an error, report this error. */
++ {
++ ++yynerrs;
++
++#ifdef YYERROR_VERBOSE
++ yyn = yypact[yystate];
++
++ if (yyn > YYFLAG && yyn < YYLAST)
++ {
++ int size = 0;
++ char *msg;
++ int x, count;
++
++ count = 0;
++ /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
++ for (x = (yyn < 0 ? -yyn : 0);
++ x < (sizeof(yytname) / sizeof(char *)); x++)
++ if (yycheck[x + yyn] == x)
++ size += strlen(yytname[x]) + 15, count++;
++ msg = (char *) malloc(size + 15);
++ if (msg != 0)
++ {
++ strcpy(msg, "parse error");
++
++ if (count < 5)
++ {
++ count = 0;
++ for (x = (yyn < 0 ? -yyn : 0);
++ x < (sizeof(yytname) / sizeof(char *)); x++)
++ if (yycheck[x + yyn] == x)
++ {
++ strcat(msg, count == 0 ? ", expecting `" : " or `");
++ strcat(msg, yytname[x]);
++ strcat(msg, "'");
++ count++;
++ }
++ }
++ yyerror(msg);
++ free(msg);
++ }
++ else
++ yyerror ("parse error; also virtual memory exceeded");
++ }
++ else
++#endif /* YYERROR_VERBOSE */
++ yyerror("parse error");
++ }
++
++ goto yyerrlab1;
++yyerrlab1: /* here on error raised explicitly by an action */
++
++ if (yyerrstatus == 3)
++ {
++ /* if just tried and failed to reuse lookahead token after an error, discard it. */
++
++ /* return failure if at end of input */
++ if (yychar == YYEOF)
++ YYABORT;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
++#endif
++
++ yychar = YYEMPTY;
++ }
++
++ /* Else will try to reuse lookahead token
++ after shifting the error token. */
++
++ yyerrstatus = 3; /* Each real token shifted decrements this */
++
++ goto yyerrhandle;
++
++yyerrdefault: /* current state does not do anything special for the error token. */
++
++#if 0
++ /* This is wrong; only states that explicitly want error tokens
++ should shift them. */
++ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
++ if (yyn) goto yydefault;
++#endif
++
++yyerrpop: /* pop the current state because it cannot handle the error token */
++
++ if (yyssp == yyss) YYABORT;
++ yyvsp--;
++ yystate = *--yyssp;
++#ifdef YYLSP_NEEDED
++ yylsp--;
++#endif
++
++#if YYDEBUG != 0
++ if (yydebug)
++ {
++ short *ssp1 = yyss - 1;
++ fprintf (stderr, "Error: state stack now");
++ while (ssp1 != yyssp)
++ fprintf (stderr, " %d", *++ssp1);
++ fprintf (stderr, "\n");
++ }
++#endif
++
++yyerrhandle:
++
++ yyn = yypact[yystate];
++ if (yyn == YYFLAG)
++ goto yyerrdefault;
++
++ yyn += YYTERROR;
++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
++ goto yyerrdefault;
++
++ yyn = yytable[yyn];
++ if (yyn < 0)
++ {
++ if (yyn == YYFLAG)
++ goto yyerrpop;
++ yyn = -yyn;
++ goto yyreduce;
++ }
++ else if (yyn == 0)
++ goto yyerrpop;
++
++ if (yyn == YYFINAL)
++ YYACCEPT;
++
++#if YYDEBUG != 0
++ if (yydebug)
++ fprintf(stderr, "Shifting error token, ");
++#endif
++
++ *++yyvsp = yylval;
++#ifdef YYLSP_NEEDED
++ *++yylsp = yylloc;
++#endif
++
++ yystate = yyn;
++ goto yynewstate;
++
++ yyacceptlab:
++ /* YYACCEPT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 0;
++
++ yyabortlab:
++ /* YYABORT comes here. */
++ if (yyfree_stacks)
++ {
++ free (yyss);
++ free (yyvs);
++#ifdef YYLSP_NEEDED
++ free (yyls);
++#endif
++ }
++ return 1;
++}
++#line 232 "plural.y"
++
++
++void
++internal_function
++FREE_EXPRESSION (exp)
++ struct expression *exp;
++{
++ if (exp == NULL)
++ return;
++
++ /* Handle the recursive case. */
++ switch (exp->nargs)
++ {
++ case 3:
++ FREE_EXPRESSION (exp->val.args[2]);
++ /* FALLTHROUGH */
++ case 2:
++ FREE_EXPRESSION (exp->val.args[1]);
++ /* FALLTHROUGH */
++ case 1:
++ FREE_EXPRESSION (exp->val.args[0]);
++ /* FALLTHROUGH */
++ default:
++ break;
++ }
++
++ free (exp);
++}
++
++
++static int
++yylex (lval, pexp)
++ YYSTYPE *lval;
++ const char **pexp;
++{
++ const char *exp = *pexp;
++ int result;
++
++ while (1)
++ {
++ if (exp[0] == '\0')
++ {
++ *pexp = exp;
++ return YYEOF;
++ }
++
++ if (exp[0] != ' ' && exp[0] != '\t')
++ break;
++
++ ++exp;
++ }
++
++ result = *exp++;
++ switch (result)
++ {
++ case '0': case '1': case '2': case '3': case '4':
++ case '5': case '6': case '7': case '8': case '9':
++ {
++ unsigned long int n = result - '0';
++ while (exp[0] >= '0' && exp[0] <= '9')
++ {
++ n *= 10;
++ n += exp[0] - '0';
++ ++exp;
++ }
++ lval->num = n;
++ result = NUMBER;
++ }
++ break;
++
++ case '=':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = equal;
++ result = EQUOP2;
++ }
++ else
++ result = YYERRCODE;
++ break;
++
++ case '!':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = not_equal;
++ result = EQUOP2;
++ }
++ break;
++
++ case '&':
++ case '|':
++ if (exp[0] == result)
++ ++exp;
++ else
++ result = YYERRCODE;
++ break;
++
++ case '<':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = less_or_equal;
++ }
++ else
++ lval->op = less_than;
++ result = CMPOP2;
++ break;
++
++ case '>':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = greater_or_equal;
++ }
++ else
++ lval->op = greater_than;
++ result = CMPOP2;
++ break;
++
++ case '*':
++ lval->op = mult;
++ result = MULOP2;
++ break;
++
++ case '/':
++ lval->op = divide;
++ result = MULOP2;
++ break;
++
++ case '%':
++ lval->op = module;
++ result = MULOP2;
++ break;
++
++ case '+':
++ lval->op = plus;
++ result = ADDOP2;
++ break;
++
++ case '-':
++ lval->op = minus;
++ result = ADDOP2;
++ break;
++
++ case 'n':
++ case '?':
++ case ':':
++ case '(':
++ case ')':
++ /* Nothing, just return the character. */
++ break;
++
++ case ';':
++ case '\n':
++ case '\0':
++ /* Be safe and let the user call this function again. */
++ --exp;
++ result = YYEOF;
++ break;
++
++ default:
++ result = YYERRCODE;
++#if YYDEBUG != 0
++ --exp;
++#endif
++ break;
++ }
++
++ *pexp = exp;
++
++ return result;
++}
++
++
++static void
++yyerror (str)
++ const char *str;
++{
++ /* Do nothing. We don't print error messages here. */
++}
+diff -urN parted-1.4.17.orig/intl/plural.y parted-1.4.17/intl/plural.y
+--- parted-1.4.17.orig/intl/plural.y Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/plural.y Thu Aug 2 14:26:17 2001
+@@ -0,0 +1,412 @@
++%{
++/* Expression parsing for plural form selection.
++ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++/* The bison generated parser uses alloca. AIX 3 forces us to put this
++ declaration at the beginning of the file. The declaration in bison's
++ skeleton file comes too late. This must come before <config.h>
++ because <config.h> may include arbitrary system headers. */
++#if defined _AIX && !defined __GNUC__
++ #pragma alloca
++#endif
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <stdlib.h>
++#include "gettextP.h"
++
++/* Names for the libintl functions are a problem. They must not clash
++ with existing names and they should follow ANSI C. But this source
++ code is also used in GNU C Library where the names have a __
++ prefix. So we have to make a difference here. */
++#ifdef _LIBC
++# define FREE_EXPRESSION __gettext_free_exp
++#else
++# define FREE_EXPRESSION gettext_free_exp__
++# define __gettextparse gettextparse__
++#endif
++
++#define YYLEX_PARAM &((struct parse_args *) arg)->cp
++#define YYPARSE_PARAM arg
++%}
++%pure_parser
++%expect 10
++
++%union {
++ unsigned long int num;
++ enum operator op;
++ struct expression *exp;
++}
++
++%{
++/* Prototypes for local functions. */
++static struct expression *new_exp PARAMS ((int nargs, enum operator op,
++ struct expression * const *args));
++static inline struct expression *new_exp_0 PARAMS ((enum operator op));
++static inline struct expression *new_exp_1 PARAMS ((enum operator op,
++ struct expression *right));
++static struct expression *new_exp_2 PARAMS ((enum operator op,
++ struct expression *left,
++ struct expression *right));
++static inline struct expression *new_exp_3 PARAMS ((enum operator op,
++ struct expression *bexp,
++ struct expression *tbranch,
++ struct expression *fbranch));
++static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
++static void yyerror PARAMS ((const char *str));
++
++/* Allocation of expressions. */
++
++static struct expression *
++new_exp (nargs, op, args)
++ int nargs;
++ enum operator op;
++ struct expression * const *args;
++{
++ int i;
++ struct expression *newp;
++
++ /* If any of the argument could not be malloc'ed, just return NULL. */
++ for (i = nargs - 1; i >= 0; i--)
++ if (args[i] == NULL)
++ goto fail;
++
++ /* Allocate a new expression. */
++ newp = (struct expression *) malloc (sizeof (*newp));
++ if (newp != NULL)
++ {
++ newp->nargs = nargs;
++ newp->operation = op;
++ for (i = nargs - 1; i >= 0; i--)
++ newp->val.args[i] = args[i];
++ return newp;
++ }
++
++ fail:
++ for (i = nargs - 1; i >= 0; i--)
++ FREE_EXPRESSION (args[i]);
++
++ return NULL;
++}
++
++static inline struct expression *
++new_exp_0 (op)
++ enum operator op;
++{
++ return new_exp (0, op, NULL);
++}
++
++static inline struct expression *
++new_exp_1 (op, right)
++ enum operator op;
++ struct expression *right;
++{
++ struct expression *args[1];
++
++ args[0] = right;
++ return new_exp (1, op, args);
++}
++
++static struct expression *
++new_exp_2 (op, left, right)
++ enum operator op;
++ struct expression *left;
++ struct expression *right;
++{
++ struct expression *args[2];
++
++ args[0] = left;
++ args[1] = right;
++ return new_exp (2, op, args);
++}
++
++static inline struct expression *
++new_exp_3 (op, bexp, tbranch, fbranch)
++ enum operator op;
++ struct expression *bexp;
++ struct expression *tbranch;
++ struct expression *fbranch;
++{
++ struct expression *args[3];
++
++ args[0] = bexp;
++ args[1] = tbranch;
++ args[2] = fbranch;
++ return new_exp (3, op, args);
++}
++
++%}
++
++/* This declares that all operators have the same associativity and the
++ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
++ There is no unary minus and no bitwise operators.
++ Operators with the same syntactic behaviour have been merged into a single
++ token, to save space in the array generated by bison. */
++%right '?' /* ? */
++%left '|' /* || */
++%left '&' /* && */
++%left EQUOP2 /* == != */
++%left CMPOP2 /* < > <= >= */
++%left ADDOP2 /* + - */
++%left MULOP2 /* * / % */
++%right '!' /* ! */
++
++%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
++%token <num> NUMBER
++%type <exp> exp
++
++%%
++
++start: exp
++ {
++ if ($1 == NULL)
++ YYABORT;
++ ((struct parse_args *) arg)->res = $1;
++ }
++ ;
++
++exp: exp '?' exp ':' exp
++ {
++ $$ = new_exp_3 (qmop, $1, $3, $5);
++ }
++ | exp '|' exp
++ {
++ $$ = new_exp_2 (lor, $1, $3);
++ }
++ | exp '&' exp
++ {
++ $$ = new_exp_2 (land, $1, $3);
++ }
++ | exp EQUOP2 exp
++ {
++ $$ = new_exp_2 ($2, $1, $3);
++ }
++ | exp CMPOP2 exp
++ {
++ $$ = new_exp_2 ($2, $1, $3);
++ }
++ | exp ADDOP2 exp
++ {
++ $$ = new_exp_2 ($2, $1, $3);
++ }
++ | exp MULOP2 exp
++ {
++ $$ = new_exp_2 ($2, $1, $3);
++ }
++ | '!' exp
++ {
++ $$ = new_exp_1 (lnot, $2);
++ }
++ | 'n'
++ {
++ $$ = new_exp_0 (var);
++ }
++ | NUMBER
++ {
++ if (($$ = new_exp_0 (num)) != NULL)
++ $$->val.num = $1;
++ }
++ | '(' exp ')'
++ {
++ $$ = $2;
++ }
++ ;
++
++%%
++
++void
++internal_function
++FREE_EXPRESSION (exp)
++ struct expression *exp;
++{
++ if (exp == NULL)
++ return;
++
++ /* Handle the recursive case. */
++ switch (exp->nargs)
++ {
++ case 3:
++ FREE_EXPRESSION (exp->val.args[2]);
++ /* FALLTHROUGH */
++ case 2:
++ FREE_EXPRESSION (exp->val.args[1]);
++ /* FALLTHROUGH */
++ case 1:
++ FREE_EXPRESSION (exp->val.args[0]);
++ /* FALLTHROUGH */
++ default:
++ break;
++ }
++
++ free (exp);
++}
++
++
++static int
++yylex (lval, pexp)
++ YYSTYPE *lval;
++ const char **pexp;
++{
++ const char *exp = *pexp;
++ int result;
++
++ while (1)
++ {
++ if (exp[0] == '\0')
++ {
++ *pexp = exp;
++ return YYEOF;
++ }
++
++ if (exp[0] != ' ' && exp[0] != '\t')
++ break;
++
++ ++exp;
++ }
++
++ result = *exp++;
++ switch (result)
++ {
++ case '0': case '1': case '2': case '3': case '4':
++ case '5': case '6': case '7': case '8': case '9':
++ {
++ unsigned long int n = result - '0';
++ while (exp[0] >= '0' && exp[0] <= '9')
++ {
++ n *= 10;
++ n += exp[0] - '0';
++ ++exp;
++ }
++ lval->num = n;
++ result = NUMBER;
++ }
++ break;
++
++ case '=':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = equal;
++ result = EQUOP2;
++ }
++ else
++ result = YYERRCODE;
++ break;
++
++ case '!':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = not_equal;
++ result = EQUOP2;
++ }
++ break;
++
++ case '&':
++ case '|':
++ if (exp[0] == result)
++ ++exp;
++ else
++ result = YYERRCODE;
++ break;
++
++ case '<':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = less_or_equal;
++ }
++ else
++ lval->op = less_than;
++ result = CMPOP2;
++ break;
++
++ case '>':
++ if (exp[0] == '=')
++ {
++ ++exp;
++ lval->op = greater_or_equal;
++ }
++ else
++ lval->op = greater_than;
++ result = CMPOP2;
++ break;
++
++ case '*':
++ lval->op = mult;
++ result = MULOP2;
++ break;
++
++ case '/':
++ lval->op = divide;
++ result = MULOP2;
++ break;
++
++ case '%':
++ lval->op = module;
++ result = MULOP2;
++ break;
++
++ case '+':
++ lval->op = plus;
++ result = ADDOP2;
++ break;
++
++ case '-':
++ lval->op = minus;
++ result = ADDOP2;
++ break;
++
++ case 'n':
++ case '?':
++ case ':':
++ case '(':
++ case ')':
++ /* Nothing, just return the character. */
++ break;
++
++ case ';':
++ case '\n':
++ case '\0':
++ /* Be safe and let the user call this function again. */
++ --exp;
++ result = YYEOF;
++ break;
++
++ default:
++ result = YYERRCODE;
++#if YYDEBUG != 0
++ --exp;
++#endif
++ break;
++ }
++
++ *pexp = exp;
++
++ return result;
++}
++
++
++static void
++yyerror (str)
++ const char *str;
++{
++ /* Do nothing. We don't print error messages here. */
++}
+diff -urN parted-1.4.17.orig/intl/po2tbl.sed.in parted-1.4.17/intl/po2tbl.sed.in
+--- parted-1.4.17.orig/intl/po2tbl.sed.in Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/po2tbl.sed.in Wed Dec 31 19:00:00 1969
+@@ -1,102 +0,0 @@
+-# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+-# Copyright (C) 1995 Free Software Foundation, Inc.
+-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+-#
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-#
+-1 {
+- i\
+-/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
+-\
+-#if HAVE_CONFIG_H\
+-# include <config.h>\
+-#endif\
+-\
+-#include "libgettext.h"\
+-\
+-const struct _msg_ent _msg_tbl[] = {
+- h
+- s/.*/0/
+- x
+-}
+-#
+-# Write msgid entries in C array form.
+-#
+-/^msgid/ {
+- s/msgid[ ]*\(".*"\)/ {\1/
+- tb
+-# Append the next line
+- :b
+- N
+-# Look whether second part is continuation line.
+- s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+-# Yes, then branch.
+- ta
+-# Because we assume that the input file correctly formed the line
+-# just read cannot be again be a msgid line. So it's safe to ignore
+-# it.
+- s/\(.*\)\n.*/\1/
+- bc
+-# We found a continuation line. But before printing insert '\'.
+- :a
+- s/\(.*\)\(\n.*\)/\1\\\2/
+- P
+-# We cannot use D here.
+- s/.*\n\(.*\)/\1/
+-# Some buggy seds do not clear the `successful substitution since last ``t'''
+-# flag on `N', so we do a `t' here to clear it.
+- tb
+-# Not reached
+- :c
+- x
+-# The following nice solution is by
+-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+- td
+-# Increment a decimal number in pattern space.
+-# First hide trailing `9' digits.
+- :d
+- s/9\(_*\)$/_\1/
+- td
+-# Assure at least one digit is available.
+- s/^\(_*\)$/0\1/
+-# Increment the last digit.
+- s/8\(_*\)$/9\1/
+- s/7\(_*\)$/8\1/
+- s/6\(_*\)$/7\1/
+- s/5\(_*\)$/6\1/
+- s/4\(_*\)$/5\1/
+- s/3\(_*\)$/4\1/
+- s/2\(_*\)$/3\1/
+- s/1\(_*\)$/2\1/
+- s/0\(_*\)$/1\1/
+-# Convert the hidden `9' digits to `0's.
+- s/_/0/g
+- x
+- G
+- s/\(.*\)\n\([0-9]*\)/\1, \2},/
+- s/\(.*\)"$/\1/
+- p
+-}
+-#
+-# Last line.
+-#
+-$ {
+- i\
+-};\
+-
+- g
+- s/0*\(.*\)/int _msg_tbl_length = \1;/p
+-}
+-d
+diff -urN parted-1.4.17.orig/intl/ref-add.sin parted-1.4.17/intl/ref-add.sin
+--- parted-1.4.17.orig/intl/ref-add.sin Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/ref-add.sin Thu Aug 2 14:26:17 2001
+@@ -0,0 +1,31 @@
++# Add this package to a list of references stored in a text file.
++#
++# Copyright (C) 2000 Free Software Foundation, Inc.
++#
++# This program 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, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Library General Public License for more details.
++#
++# You should have received a copy of the GNU Library General Public
++# License along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++# USA.
++#
++# Written by Bruno Haible <haible@clisp.cons.org>.
++#
++/^# Packages using this file: / {
++ s/# Packages using this file://
++ ta
++ :a
++ s/ @PACKAGE@ / @PACKAGE@ /
++ tb
++ s/ $/ @PACKAGE@ /
++ :b
++ s/^/# Packages using this file:/
++}
+diff -urN parted-1.4.17.orig/intl/ref-del.sin parted-1.4.17/intl/ref-del.sin
+--- parted-1.4.17.orig/intl/ref-del.sin Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/intl/ref-del.sin Thu Aug 2 14:26:17 2001
+@@ -0,0 +1,26 @@
++# Remove this package from a list of references stored in a text file.
++#
++# Copyright (C) 2000 Free Software Foundation, Inc.
++#
++# This program 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, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Library General Public License for more details.
++#
++# You should have received a copy of the GNU Library General Public
++# License along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++# USA.
++#
++# Written by Bruno Haible <haible@clisp.cons.org>.
++#
++/^# Packages using this file: / {
++ s/# Packages using this file://
++ s/ @PACKAGE@ / /
++ s/^/# Packages using this file:/
++}
+diff -urN parted-1.4.17.orig/intl/textdomain.c parted-1.4.17/intl/textdomain.c
+--- parted-1.4.17.orig/intl/textdomain.c Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/textdomain.c Thu Aug 2 14:26:17 2001
+@@ -1,6 +1,5 @@
+ /* Implementation of the textdomain(3) function.
+- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
++ Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -20,23 +19,32 @@
+ # include <config.h>
+ #endif
+
+-#if defined STDC_HEADERS || defined _LIBC
+-# include <stdlib.h>
+-#endif
++#include <stdlib.h>
++#include <string.h>
+
+-#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
+-# include <string.h>
++#ifdef _LIBC
++# include <libintl.h>
+ #else
+-# include <strings.h>
+-# ifndef memcpy
+-# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+-# endif
++# include "libgnuintl.h"
+ #endif
++#include "gettextP.h"
+
+ #ifdef _LIBC
+-# include <libintl.h>
++/* We have to handle multi-threaded applications. */
++# include <bits/libc-lock.h>
+ #else
+-# include "libgettext.h"
++/* Provide dummy implementation if this is outside glibc. */
++# define __libc_rwlock_define(CLASS, NAME)
++# define __libc_rwlock_wrlock(NAME)
++# define __libc_rwlock_unlock(NAME)
++#endif
++
++/* The internal variables in the standalone libintl.a must have different
++ names than the internal variables in GNU libc, otherwise programs
++ using libintl.a cannot be linked statically. */
++#if !defined _LIBC
++# define _nl_default_default_domain _nl_default_default_domain__
++# define _nl_current_default_domain _nl_current_default_domain__
+ #endif
+
+ /* @@ end of prolog @@ */
+@@ -61,6 +69,9 @@
+ # define TEXTDOMAIN textdomain__
+ #endif
+
++/* Lock variable to protect the global data in the gettext implementation. */
++__libc_rwlock_define (extern, _nl_state_lock)
++
+ /* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+@@ -68,38 +79,60 @@
+ TEXTDOMAIN (domainname)
+ const char *domainname;
+ {
+- char *old;
++ char *new_domain;
++ char *old_domain;
+
+ /* A NULL pointer requests the current setting. */
+ if (domainname == NULL)
+ return (char *) _nl_current_default_domain;
+
+- old = (char *) _nl_current_default_domain;
++ __libc_rwlock_wrlock (_nl_state_lock);
++
++ old_domain = (char *) _nl_current_default_domain;
+
+ /* If domain name is the null string set to default domain "messages". */
+ if (domainname[0] == '\0'
+ || strcmp (domainname, _nl_default_default_domain) == 0)
+- _nl_current_default_domain = _nl_default_default_domain;
++ {
++ _nl_current_default_domain = _nl_default_default_domain;
++ new_domain = (char *) _nl_current_default_domain;
++ }
++ else if (strcmp (domainname, old_domain) == 0)
++ /* This can happen and people will use it to signal that some
++ environment variable changed. */
++ new_domain = old_domain;
+ else
+ {
+ /* If the following malloc fails `_nl_current_default_domain'
+ will be NULL. This value will be returned and so signals we
+ are out of core. */
+ #if defined _LIBC || defined HAVE_STRDUP
+- _nl_current_default_domain = strdup (domainname);
++ new_domain = strdup (domainname);
+ #else
+ size_t len = strlen (domainname) + 1;
+- char *cp = (char *) malloc (len);
+- if (cp != NULL)
+- memcpy (cp, domainname, len);
+- _nl_current_default_domain = cp;
++ new_domain = (char *) malloc (len);
++ if (new_domain != NULL)
++ memcpy (new_domain, domainname, len);
+ #endif
++
++ if (new_domain != NULL)
++ _nl_current_default_domain = new_domain;
++ }
++
++ /* We use this possibility to signal a change of the loaded catalogs
++ since this is most likely the case and there is no other easy we
++ to do it. Do it only when the call was successful. */
++ if (new_domain != NULL)
++ {
++ ++_nl_msg_cat_cntr;
++
++ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
++ free (old_domain);
+ }
+
+- if (old != _nl_default_default_domain)
+- free (old);
++ __libc_rwlock_unlock (_nl_state_lock);
+
+- return (char *) _nl_current_default_domain;
++ return new_domain;
+ }
+
+ #ifdef _LIBC
+diff -urN parted-1.4.17.orig/intl/xopen-msg.sed parted-1.4.17/intl/xopen-msg.sed
+--- parted-1.4.17.orig/intl/xopen-msg.sed Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/intl/xopen-msg.sed Wed Dec 31 19:00:00 1969
+@@ -1,104 +0,0 @@
+-# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
+-# Copyright (C) 1995 Free Software Foundation, Inc.
+-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+-#
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-#
+-#
+-# The first directive in the .msg should be the definition of the
+-# message set number. We use always set number 1.
+-#
+-1 {
+- i\
+-$set 1 # Automatically created by po2msg.sed
+- h
+- s/.*/0/
+- x
+-}
+-#
+-# We copy all comments into the .msg file. Perhaps they can help.
+-#
+-/^#/ s/^#[ ]*/$ /p
+-#
+-# We copy the original message as a comment into the .msg file.
+-#
+-/^msgid/ {
+-# Does not work now
+-# /"$/! {
+-# s/\\$//
+-# s/$/ ... (more lines following)"/
+-# }
+- s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
+- p
+-}
+-#
+-# The .msg file contains, other then the .po file, only the translations
+-# but each given a unique ID. Starting from 1 and incrementing by 1 for
+-# each message we assign them to the messages.
+-# It is important that the .po file used to generate the cat-id-tbl.c file
+-# (with po-to-tbl) is the same as the one used here. (At least the order
+-# of declarations must not be changed.)
+-#
+-/^msgstr/ {
+- s/msgstr[ ]*"\(.*\)"/\1/
+- x
+-# The following nice solution is by
+-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+- td
+-# Increment a decimal number in pattern space.
+-# First hide trailing `9' digits.
+- :d
+- s/9\(_*\)$/_\1/
+- td
+-# Assure at least one digit is available.
+- s/^\(_*\)$/0\1/
+-# Increment the last digit.
+- s/8\(_*\)$/9\1/
+- s/7\(_*\)$/8\1/
+- s/6\(_*\)$/7\1/
+- s/5\(_*\)$/6\1/
+- s/4\(_*\)$/5\1/
+- s/3\(_*\)$/4\1/
+- s/2\(_*\)$/3\1/
+- s/1\(_*\)$/2\1/
+- s/0\(_*\)$/1\1/
+-# Convert the hidden `9' digits to `0's.
+- s/_/0/g
+- x
+-# Bring the line in the format `<number> <message>'
+- G
+- s/^[^\n]*$/& /
+- s/\(.*\)\n\([0-9]*\)/\2 \1/
+-# Clear flag from last substitution.
+- tb
+-# Append the next line.
+- :b
+- N
+-# Look whether second part is a continuation line.
+- s/\(.*\n\)"\(.*\)"/\1\2/
+-# Yes, then branch.
+- ta
+- P
+- D
+-# Note that `D' includes a jump to the start!!
+-# We found a continuation line. But before printing insert '\'.
+- :a
+- s/\(.*\)\(\n.*\)/\1\\\2/
+- P
+-# We cannot use the sed command `D' here
+- s/.*\n\(.*\)/\1/
+- tb
+-}
+-d
+diff -urN parted-1.4.17.orig/libparted/Makefile.am parted-1.4.17/libparted/Makefile.am
+--- parted-1.4.17.orig/libparted/Makefile.am Sun Jul 22 03:24:27 2001
++++ parted-1.4.17/libparted/Makefile.am Thu Aug 2 18:32:37 2001
+@@ -18,7 +18,7 @@
+ partedincludedir = -I$(top_srcdir)/include
+ lib_LTLIBRARIES = libparted.la
+ libparted_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+- -release $(LT_RELEASE)
++ -release $(LT_RELEASE)
+
+ libparted_la_SOURCES = constraint.c \
+ device.c \
+@@ -52,4 +52,3 @@
+ EXTRA_DIST = mbr.s
+
+ INCLUDES = $(partedincludedir) @INTLINCS@
+-
+diff -urN parted-1.4.17.orig/po/ChangeLog parted-1.4.17/po/ChangeLog
+--- parted-1.4.17.orig/po/ChangeLog Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/po/ChangeLog Thu Aug 2 14:26:17 2001
+@@ -0,0 +1,6 @@
++2001-08-02 gettextize <bug-gnu-utils@gnu.org>
++
++ * Makefile.in.in: Upgrade to gettext-0.10.39.
++ * cat-id-tbl.c: Remove file.
++ * stamp-cat-id: Remove file.
++
+diff -urN parted-1.4.17.orig/po/Makefile.in.in parted-1.4.17/po/Makefile.in.in
+--- parted-1.4.17.orig/po/Makefile.in.in Sat Apr 7 18:04:37 2001
++++ parted-1.4.17/po/Makefile.in.in Thu Aug 2 14:26:17 2001
+@@ -1,17 +1,18 @@
+ # Makefile for program source directory in GNU NLS utilities package.
+-# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
++# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+ #
+ # This file file be copied and used freely without restrictions. It can
+ # be used in projects which are not available under the GNU Public License
+ # but which still want to provide support for the GNU gettext functionality.
+ # Please note that the actual code is *not* freely available.
+
+-# Hacked by Andrew Clausen <clausen@alphalink.com.au>, to prefix $(DESTDIR)
+-# before the install directory. This makes RPM work properly.
+-
+ PACKAGE = @PACKAGE@
+ VERSION = @VERSION@
+
++# These two variables depend on the location of this directory.
++subdir = po
++top_builddir = ..
++
+ SHELL = /bin/sh
+ @SET_MAKE@
+
+@@ -21,24 +22,20 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+-datadir = $(prefix)/@DATADIRNAME@
++datadir = @datadir@
+ localedir = $(datadir)/locale
+-gnulocaledir = $(prefix)/share/locale
+-gettextsrcdir = $(prefix)/share/gettext/po
+-subdir = po
+-
+-DESTDIR =
++gettextsrcdir = $(datadir)/gettext/po
+
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+-MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
++MKINSTALLDIRS = @MKINSTALLDIRS@
++mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+ CC = @CC@
+-GENCAT = @GENCAT@
+-GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
++GMSGFMT = @GMSGFMT@
+ MSGFMT = @MSGFMT@
+-XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+-MSGMERGE = PATH=../src:$$PATH msgmerge
++XGETTEXT = @XGETTEXT@
++MSGMERGE = msgmerge
+
+ DEFS = @DEFS@
+ CFLAGS = @CFLAGS@
+@@ -48,20 +45,17 @@
+
+ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+-SOURCES = cat-id-tbl.c
+ POFILES = @POFILES@
+ GMOFILES = @GMOFILES@
+ DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+-stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
++$(POFILES) $(GMOFILES)
+
+ POTFILES = \
+
+ CATALOGS = @CATALOGS@
+-CATOBJEXT = @CATOBJEXT@
+-INSTOBJEXT = @INSTOBJEXT@
+
+ .SUFFIXES:
+-.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
++.SUFFIXES: .c .o .po .pox .gmo .mo
+
+ .c.o:
+ $(COMPILE) $<
+@@ -75,19 +69,19 @@
+
+ .po.gmo:
+ file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+- && rm -f $$file && $(GMSGFMT) -o $$file $<
+-
+-.po.cat:
+- sed -f ../intl/po2msg.sed < $< > $*.msg \
+- && rm -f $@ && $(GENCAT) $@ $*.msg
++ && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
+
+
+ all: all-@USE_NLS@
+
+-all-yes: cat-id-tbl.c $(CATALOGS)
++all-yes: $(CATALOGS)
+ all-no:
+
+-$(srcdir)/$(PACKAGE).pot: $(POTFILES)
++# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
++# otherwise packages like GCC can not be built if only parts of the source
++# have been downloaded.
++
++$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
+ $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+ --add-comments --keyword=_ --keyword=N_ \
+ --files-from=$(srcdir)/POTFILES.in \
+@@ -95,78 +89,35 @@
+ || ( rm -f $(srcdir)/$(PACKAGE).pot \
+ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+
+-$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
+-$(srcdir)/stamp-cat-id: $(PACKAGE).pot
+- rm -f cat-id-tbl.tmp
+- sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+- | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+- if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+- rm cat-id-tbl.tmp; \
+- else \
+- echo cat-id-tbl.c changed; \
+- rm -f $(srcdir)/cat-id-tbl.c; \
+- mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+- fi
+- cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+-
+
+ install: install-exec install-data
+ install-exec:
+ install-data: install-data-@USE_NLS@
+-install-data-no: all
+-install-data-yes: all
+- if test -r "$(MKINSTALLDIRS)"; then \
+- $(MKINSTALLDIRS) $(datadir); \
++ if test "$(PACKAGE)" = "gettext"; then \
++ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
++ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
++ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+ else \
+- $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
++ : ; \
+ fi
++install-data-no: all
++install-data-yes: all
++ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+- case "$$cat" in \
+- *.gmo) destdir=$(gnulocaledir);; \
+- *) destdir=$(localedir);; \
+- esac; \
+- lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+- dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
+- if test -r "$(MKINSTALLDIRS)"; then \
+- $(MKINSTALLDIRS) $$dir; \
+- else \
+- $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+- fi; \
++ lang=`echo $$cat | sed 's/\.gmo$$//'`; \
++ dir=$(localedir)/$$lang/LC_MESSAGES; \
++ $(mkinstalldirs) $(DESTDIR)$$dir; \
+ if test -r $$cat; then \
+- $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+- echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++ echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
+ else \
+- $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
++ $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+ echo "installing $(srcdir)/$$cat as" \
+- "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+- fi; \
+- if test -r $$cat.m; then \
+- $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+- echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+- else \
+- if test -r $(srcdir)/$$cat.m ; then \
+- $(INSTALL_DATA) $(srcdir)/$$cat.m \
+- $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+- echo "installing $(srcdir)/$$cat as" \
+- "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+- else \
+- true; \
+- fi; \
++ "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
+ fi; \
+ done
+- if test "$(PACKAGE)" = "gettext"; then \
+- if test -r "$(MKINSTALLDIRS)"; then \
+- $(MKINSTALLDIRS) $(gettextsrcdir); \
+- else \
+- $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+- fi; \
+- $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+- $(gettextsrcdir)/Makefile.in.in; \
+- else \
+- : ; \
+- fi
+
+ # Define this as empty until I found a useful application.
+ installcheck:
+@@ -175,76 +126,68 @@
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+- lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+- rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+- rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+- rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+- rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
++ lang=`echo $$cat | sed 's/\.gmo$$//'`; \
++ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
+ done
+- rm -f $(gettextsrcdir)/po-Makefile.in.in
++ if test "$(PACKAGE)" = "gettext"; then \
++ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
++ else \
++ : ; \
++ fi
+
+ check: all
+
+-cat-id-tbl.o: ../intl/libgettext.h
+-
+ dvi info tags TAGS ID:
+
+ mostlyclean:
+- rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
++ rm -f core core.* *.pox $(PACKAGE).po *.new.po
+ rm -fr *.o
+
+ clean: mostlyclean
+
+ distclean: clean
+- rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
++ rm -f Makefile Makefile.in POTFILES *.mo
+
+ maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f $(GMOFILES)
+
+-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+-dist distdir: update-po $(DISTFILES)
++distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
++dist distdir:
++ $(MAKE) update-po
++ @$(MAKE) dist2
++# This is a separate target because 'update-po' must be executed before.
++dist2: $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ for file in $$dists; do \
+- ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+- || cp -p $(srcdir)/$$file $(distdir); \
++ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
++ cp -p $$dir/$$file $(distdir); \
+ done
+
+ update-po: Makefile
+ $(MAKE) $(PACKAGE).pot
+- PATH=`pwd`/../src:$$PATH; \
++ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
+ cd $(srcdir); \
+- catalogs='$(CATALOGS)'; \
++ catalogs='$(GMOFILES)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+- lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+- mv $$lang.po $$lang.old.po; \
++ lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+ echo "$$lang:"; \
+- if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+- rm -f $$lang.old.po; \
++ if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
++ mv -f $$lang.new.po $$lang.po; \
+ else \
+ echo "msgmerge for $$cat failed!"; \
+- rm -f $$lang.po; \
+- mv $$lang.old.po $$lang.po; \
++ rm -f $$lang.new.po; \
+ fi; \
+ done
++ $(MAKE) update-gmo
+
+-POTFILES: POTFILES.in
+- ( if test 'x$(srcdir)' != 'x.'; then \
+- posrcprefix='$(top_srcdir)/'; \
+- else \
+- posrcprefix="../"; \
+- fi; \
+- rm -f $@-t $@ \
+- && (sed -e '/^#/d' -e '/^[ ]*$$/d' \
+- -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+- | sed -e '$$s/\\$$//') > $@-t \
+- && chmod a-w $@-t \
+- && mv $@-t $@ )
++update-gmo: Makefile $(GMOFILES)
++ @:
+
+-Makefile: Makefile.in.in ../config.status POTFILES
+- cd .. \
++Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
++ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+ $(SHELL) ./config.status
+
+diff -urN parted-1.4.17.orig/po/cat-id-tbl.c parted-1.4.17/po/cat-id-tbl.c
+--- parted-1.4.17.orig/po/cat-id-tbl.c Mon Jul 9 20:08:03 2001
++++ parted-1.4.17/po/cat-id-tbl.c Wed Dec 31 19:00:00 1969
+@@ -1,415 +0,0 @@
+-/* Automatically generated by po2tbl.sed from parted.pot. */
+-
+-#if HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#include "libgettext.h"
+-
+-const struct _msg_ent _msg_tbl[] = {
+- {"", 1},
+- {"Could not stat device %s - %s.", 2},
+- {"\
+-The sector size on %s is %d bytes. Parted is known not to work properly \
+-with drives with sector sizes other than 512 bytes", 3},
+- {"Unable to determine the size of %s (%s)", 4},
+- {"Could not read geometry of %s - %s.", 5},
+- {"Device %s has dodgey geometry.", 6},
+- {"Could not get identity of device %s - %s", 7},
+- {"unknown", 8},
+- {"Unknown SCSI", 9},
+- {"Error initialising SCSI device %s - %s", 10},
+- {"\
+-Unable to determine geometry of file/device. You should not use Parted \
+-unless you REALLY know what you're doing!", 11},
+- {"DAC960 RAID controller", 12},
+- {"Compaq Smart Array", 13},
+- {"ATARAID Controller", 14},
+- {"Device %s is neither a SCSI nor IDE drive.", 15},
+- {"Unknown", 16},
+- {"ped_device_new() Unsupported device type", 17},
+- {"Error opening %s: %s", 18},
+- {"Unable to open %s read-write (%s). %s has been opened read-only.", 19},
+- {"\
+-The kernel was unable to re-read your partition table, so you need to reboot \
+-before mounting any modified partitions. You also need to reinstall your \
+-boot loader before you reboot (which may require mounting modified \
+-partitions). It is impossible do both things! So you'll need to boot off a \
+-rescue disk, and reinstall your boot loader from the rescue disk. Read \
+-section 4 of the Parted User documentation for more information.", 20},
+- {"\
+-The kernel was unable to re-read the partition table on %s (%s). This means \
+-Linux knows nothing about any modifications you made. You should reboot \
+-your computer before doing anything with %s.", 21},
+- {"\
+-You should reinstall your boot loader before rebooting. Read section 4 of \
+-the Parted User documentation for more information.", 22},
+- {"%s during seek for read on %s", 23},
+- {"%s during read on %s", 24},
+- {"%s during write on %s", 25},
+- {"Can't write to %s, because it is opened read-only.", 26},
+- {"%s during seek for write on %s", 27},
+- {"\
+-The partition table on %s is inconsistent. There are many reasons why this \
+-might be the case. However, the most likely reason is that Linux detected \
+-the BIOS geometry for %s incorrectly. GNU Parted suspects the real geometry \
+-should be %d/%d/%d (not %d/%d/%d). You should check with your BIOS first, \
+-as this may not be correct. You can inform Linux by adding the parameter %s=\
+-%d,%d,%d to the command line. See the LILO or GRUB documentation for more \
+-information. If you think Parted's suggested geometry is correct, you may \
+-select Ignore to continue (and fix Linux later). Otherwise, select Cancel \
+-(and fix Linux and/or the BIOS now).", 28},
+- {"\
+-The partition table on %s is inconsistent. There are many reasons why this \
+-might be the case. Often, the reason is that Linux detected the BIOS \
+-geometry incorrectly. However, this does not appear to be the case here. \
+-It is safe to ignore,but ignoring may cause (fixable) problems with some \
+-boot loaders.", 29},
+- {"Invalid partition table on %s - wrong signature %x", 30},
+- {"Invalid partition table - recursive partition on %s.", 31},
+- {"\
+-Unable to align partition properly. This probably means that another \
+-partitioning tool generated an incorrect partition table, because it didn't \
+-have the correct BIOS geometry. It is safe to ignore,but ignoring may cause \
+-(fixable) problems with some boot loaders.", 32},
+- {"Unable to align partition.", 33},
+- {"Invalid signature %x for Mac disk labels.", 34},
+- {"%s is too small for a Mac disk label!", 35},
+- {"Partition map has no partition map entry!", 36},
+- {"Partition %d has an invalid signature %x.", 37},
+- {"Partition %d has an invalid length of 0 bytes!", 38},
+- {"The data region doesn't start at the start of the partition", 39},
+- {"The boot region doesn't start at the start of the partition", 40},
+- {"The partition's boot region doesn't occupy the entire partition.", 41},
+- {"The partition's data region doesn't occupy the entire partition.", 42},
+- {"\
+-Weird block size on device descriptor: %d bytes is not divisible by 512.", 43},
+- {"\
+-The driver descriptor says the physical block size is %d bytes, but Linux \
+-says it is %d bytes.", 44},
+- {"No valid partition map found.", 45},
+- {"\
+-Conflicting partition map entry sizes! Entry 1 says it's %d, but entry %d \
+-says its %d!", 46},
+- {"Weird - 2 partitions map entries!", 47},
+- {"Can't set non-Linux partitions as a root device.", 48},
+- {"Can't set non-Linux partitions as a swap device.", 49},
+- {"\
+-Changing the name of a root or swap partition will prevent Linux from \
+-recognising it as such.", 50},
+- {"Can't add another partition - partition map is too small!", 51},
+- {"Invalid partition table on %s", 52},
+- {"\
+-Partition %d isn't aligned to cylinder boundaries. Need to add support for \
+-this.", 53},
+- {"Can't add another partition.", 54},
+- {"Could not detect file system.", 55},
+- {"Support for opening %s file systems is not implemented yet.", 56},
+- {"Support for creating %s file systems is not implemented yet.", 57},
+- {"Support for checking %s file systems is not implemented yet.", 58},
+- {"Can't copy onto an overlapping partition.", 59},
+- {"\
+-Direct support for copying file systems is not yet implemented for %s. \
+-However, support for resizing implemented. Therefore, the file system can \
+-be copied if the new partition is at least as big as the old one. So, \
+-either shrink the partition you are trying to copy, or copy to a bigger \
+-partition.", 60},
+- {"Support for copying %s file systems is not implemented yet.", 61},
+- {"Support for resizing %s file systems is not implemented yet.", 62},
+- {"No get_resize_constraint for %s!", 63},
+- {"The %s file system code doesn't support %s disk labels.", 64},
+- {"Unable to open %s - unrecognised disk label.", 65},
+- {"Creating new %s disklabels is not implemented yet.", 66},
+- {"The code to write the partition table hasn't been written for %s yet", 67},
+- {"%s disk labels do not support extended partitions.", 68},
+- {"Error reading %s (%s) to determine if partition is mounted.", 69},
+- {"Unable to determine if partition is mounted.", 70},
+- {"Can't create a partition outside of the device.", 71},
+- {"\
+-Can't add a logical partition to %s, because there is no extended partition.", 72},
+- {"Can't have more than one extended partition on %s", 73},
+- {"Can't add a logical partition outside of the extended partition on %s.", 74},
+- {"The new partition overlaps with another partition.", 75},
+- {"Can't add a primary partition inside an extended partition.", 76},
+- {"%s disk labels don't support logical or extended partitions.", 77},
+- {"\
+-Can't resize an extended partition so as to exclude a logical partition.", 78},
+- {"Can't grow a logical partition outside the extended partition.", 79},
+- {"Can't grow a partition onto used space.", 80},
+- {"metadata", 81},
+- {"free", 82},
+- {"extended", 83},
+- {"logical", 84},
+- {"primary", 85},
+- {"boot", 86},
+- {"root", 87},
+- {"swap", 88},
+- {"hidden", 89},
+- {"raid", 90},
+- {"lvm", 91},
+- {"lba", 92},
+- {"Unknown flag partition flag, %d.", 93},
+- {"Information", 94},
+- {"Warning", 95},
+- {"Error", 96},
+- {"Fatal", 97},
+- {"Bug", 98},
+- {"No Implementation", 99},
+- {"Fix", 100},
+- {"Yes", 101},
+- {"No", 102},
+- {"OK", 103},
+- {"Retry", 104},
+- {"Ignore", 105},
+- {"Cancel", 106},
+- {"\
+-A bug has been detected in GNU parted. Please email a bug report to bug-\
+-parted@gnu.org containing the version (%s) and the following message:", 107},
+- {"Can't have the end before the start!", 108},
+- {"Can't have a partition outside the disk!", 109},
+- {"Attempt to read sectors %ld-%ld outside of partition on %s", 110},
+- {"Attempt to write sectors %ld-%ld outside of partition on %s", 111},
+- {"Out of memory.", 112},
+- {"Inconsistent group descriptors!", 113},
+- {"Filesystem full!", 114},
+- {"\
+-This ext2 filesystem has a rather strange layout! Please use dumpe2fs on \
+-this filesystem and send it to <buytenh@gnu.org>. I won't resize it, sorry.", 115},
+- {"Invalid superblock. Are you sure this is an ext2 filesystem?", 116},
+- {"Filesystem has errors! You should run e2fsck.", 117},
+- {"Filesystem was not cleanly unmounted! You should e2fsck.", 118},
+- {"Filesystem has incompatible feature enabled", 119},
+- {"Error allocating buffer cache.", 120},
+- {"\
+-Found an inode with a incorrect link count. Better go run e2fsck first.", 121},
+- {"Not enough free inodes!", 122},
+- {"Filesystem is too occupied to remove a group!", 123},
+- {"Filesystem has too many allocated inodes to remove a group!", 124},
+- {"Your filesystem is too occupied to resize it to %i blocks. Sorry.", 125},
+- {"\
+-Your filesystem has too much occupied inodes to resize it to %i blocks. \
+-Sorry.", 126},
+- {"Cross-linked blocks found! better go run e2fsck first!", 127},
+- {"Block %i has no reference? Weird", 128},
+- {"Block %i shouldn't have been marked!", 129},
+- {"\
+-The ext2 filesystem passed a basic check. For a more comprehensive check, \
+-use the e2fsck program.", 130},
+- {"Sorry, can't move the start of ext2 partitions yet!", 131},
+- {"Ext2 partitions can't be hidden on msdos disk labels.", 132},
+- {"Couldn't flush buffer cache!", 133},
+- {"\
+-You need %dM of free space to shrink this partition to this size (you \
+-currently have only %dM free)", 134},
+- {"Insane! %d clusters!", 135},
+- {"\
+-Cluster start delta = %d, which is not a multiple of the cluster size %d.", 136},
+- {"\
+-GNU parted was miscompiled: the FAT boot sector should be 512 bytes. FAT \
+-support will be disabled.", 137},
+- {"\
+-The FATs don't match. If you don't know what this means, then select \
+-cancel, run scandisk on the file system, and then come back.", 138},
+- {"Partition too small for a FAT file system", 139},
+- {"\
+-The filesystem is going to be too big for FAT16, so FAT32 will be used. \
+-This is not compatible with MS-DOS, early versions of MS-Windows 95 and \
+-Windows NT. If you use these operating systems, then select cancel, and \
+-create a smaller partition. If you only use Linux, BSD, MS Windows 98 and/\
+-or MS Windows 95 B, then select OK.", 140},
+- {"Weird: fat_calc_sizes() failed for FAT32!", 141},
+- {"\
+-Would you like to use FAT32 for this filesystem? It is much more efficient \
+-with your disk space, but is not compatible with early versions of Windows \
+-95 and Windows NT. Only select yes if you only use Linux, BSD, MS Windows \
+-98 and/or MS Windows 95 B.", 142},
+- {"There are no possible configurations for this FAT type.", 143},
+- {"\
+-File system doesn't have expected sizes for Windows to like it. Cluster \
+-size is %dk (%dk expected); number of clusters is %d (%d expected); size of \
+-FATs is %d sectors (%d expected).", 144},
+- {"\
+-File system doesn't have expected sizes for Windows to like it. Number of \
+-clusters is %d (%d expected); size of FATs is %d sectors (%d expected).", 145},
+- {"\
+-File system is reporting the free space as %d clusters, not %d clusters.", 146},
+- {"\
+-There's not enough room in the root directory, for all of the files. Either \
+-cancel, or ignore to lose the files.", 147},
+- {"Error writing to the root directory.", 148},
+- {"If leave your file system as FAT16, then you will have no problems.", 149},
+- {"\
+-If you convert to FAT16, and MS Windows is installed on this partition, then \
+-you must re-install the MS Windows boot loader. If you want to do this, you \
+-should consult the Parted manual (or your distribution's manual).", 150},
+- {"\
+-If you leave your file system as FAT32, then you will not introduce any new \
+-problems.", 151},
+- {"\
+-If you convert to FAT32, and MS Windows is installed on this partition, then \
+-you must re-install the MS Windows boot loader. If you want to do this, you \
+-should consult the Parted manual (or your distribution's manual). Also, \
+-converting to FAT32 will make the file system unreadable by MS DOS, MS \
+-Windows 95a, and MS Windows NT.", 152},
+- {"%s %s %s", 153},
+- {"Would you like to use FAT32?", 154},
+- {"%s %s", 155},
+- {"\
+-The file system can only be resized to this size by converting to FAT16.", 156},
+- {"\
+-The file system can only be resized to this size by converting to FAT32.", 157},
+- {"\
+-GNU Parted can not resize this partition to this size. We're working on it!", 158},
+- {"File system has an invalid signature for a FAT file systems.", 159},
+- {"File system has an invalid signature for a FAT file system.", 160},
+- {"File system has an invalid sector size for a FAT file system.", 161},
+- {"\
+-File system has an invalid number of reserved sectors for a FAT filesystem.", 162},
+- {"File system has an invalid number of FATS.", 163},
+- {"\
+-This file system has a logical sector size of %d. GNU Parted is known not \
+-to work properly with sector sizes other than 512 bytes.", 164},
+- {"\
+-Partition size (%ld sectors) and filesystem size (%ld sectors) do not match.", 165},
+- {"FAT boot sector says logical sector size is 0. This is weird. ", 166},
+- {"FAT boot sector says there are no FAT tables. This is weird. ", 167},
+- {"FAT boot sector says clusters are 0 sectors. This is weird. ", 168},
+- {"Filesystem is FAT12, which is unsupported.", 169},
+- {"\
+-The FATs aren't big enough to describe all clusters! Each FAT is %d \
+-sectors. There are %d clusters, which would require each FAT to be %d \
+-sectors. This is REALLY weird. You might want to write us an email: bug-\
+-parted@gnu.org", 170},
+- {"\
+-The information sector has the wrong signature (%x). Select cancel for now, \
+-and send in a bug report. If you're desperate, it's probably safe to ignore.", 171},
+- {"Bad directory entry for %s: first cluster is the end of file marker.", 172},
+- {"\
+-Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk.", 173},
+- {"\
+-Bad FAT: cluster %d outside filesystem in chain for %s. You should run \
+-dosfsck or scandisk.", 174},
+- {"\
+-Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or \
+-scandisk.", 175},
+- {"%s is %dk, but it has is %d clusters (%dk).", 176},
+- {"\
+-FAT %d media %x doesn't match the boot sector's media %x. You should \
+-probably run scandisk.", 177},
+- {"fat_table_set: cluster %ld outside filesystem", 178},
+- {"fat_table_get: cluster %ld outside filesystem", 179},
+- {"fat_table_alloc_cluster: no free clusters", 180},
+- {"Unrecognised linux swap signature '%10s'.", 181},
+- {"Too many bad pages.", 182},
+- {"\
+-This swap partition is not compatible with Linux version 2.1.117 or \
+-earlier. Use a smaller partition (maximum size 128mb) if you want to use \
+-old versions of Linux.", 183},
+- {"Linux-swap partitions can not be hidden on msdos disk labels.", 184},
+- {"Linux-swap partitions can not be bootable on pc98 disk labels.", 185},
+- {"HFS partitions can't be hidden on msdos disk labels.", 186},
+- {"displays this help message", 187},
+- {"where necessary, prompts for user intervention", 188},
+- {"never prompts for user intervention", 189},
+- {"displays the version", 190},
+- {"\
+-MINOR is the partition number used by Linux. On msdos disk labels, the \
+-primary partitions number from 1-4, and logical partitions are 5 onwards.\n", 191},
+- {"LABEL-TYPE is one of: ", 192},
+- {"FLAG is one of: ", 193},
+- {"PART-TYPE is one of: primary, logical, extended\n", 194},
+- {"FS-TYPE is one of: ", 195},
+- {"START and END are in megabytes\n", 196},
+- {"STATE is one of: on, off\n", 197},
+- {"DEVICE is usually /dev/hda or /dev/sda\n", 198},
+- {"NAME is any word you want\n", 199},
+- {"Partition doesn't exist.", 200},
+- {"Source partition doesn't exist.", 201},
+- {"Can't copy extended partitions.", 202},
+- {"Destination partition doesn't exist.", 203},
+- {"Destination partition is being used.", 204},
+- {"Partition(s) on %s are being used.", 205},
+- {"Partition is being used.", 206},
+- {"Unknown filesystem type.", 207},
+- {"Unknown file system type.", 208},
+- {"Can't move extended partitions.", 209},
+- {"Can't move a partition onto itself. Try using resize, perhaps?", 210},
+- {"Disk geometry for %s: 0.000-%.3f megabytes\n", 211},
+- {"Disk label type: %s\n", 212},
+- {"Minor Start End ", 213},
+- {"Type ", 214},
+- {"Filesystem ", 215},
+- {"Name ", 216},
+- {"Flags", 217},
+- {"check", 218},
+- {"check MINOR do a simple check on the filesystem", 219},
+- {"cp", 220},
+- {"\
+-cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another \
+-partition", 221},
+- {"help", 222},
+- {"help [COMMAND] prints general help, or help on COMMAND", 223},
+- {"mklabel", 224},
+- {"mklabel LABEL-TYPE create a new disklabel (partition table)", 225},
+- {"mkfs", 226},
+- {"\
+-mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon MINOR", 227},
+- {"mkpart", 228},
+- {"mkpart PART-TYPE [FS-TYPE] START END make a partition", 229},
+- {"\
+-mkpart makes a partition without creating a new file system on the \
+-partition. FS-TYPE must be specified for data partitions (as opposed to \
+-extended partitions). This command is useful if you accidently deleted a \
+-partition.\n", 230},
+- {"mkpartfs", 231},
+- {"\
+-mkpartfs PART-TYPE FS-TYPE START END make a partition with a filesystem", 232},
+- {"move", 233},
+- {"move MINOR START [END] move partition MINOR", 234},
+- {"name", 235},
+- {"name MINOR NAME name partition MINOR NAME", 236},
+- {"print", 237},
+- {"print display the partition table", 238},
+- {"quit", 239},
+- {"quit exit program", 240},
+- {"resize", 241},
+- {"resize MINOR START END resize filesystem on partition MINOR", 242},
+- {"rm", 243},
+- {"rm MINOR delete partition MINOR", 244},
+- {"select", 245},
+- {"select DEVICE choose the device to edit", 246},
+- {"set", 247},
+- {"set MINOR FLAG STATE change a flag on partition MINOR", 248},
+- {"No device found", 249},
+- {"\
+-Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.\n\
+-This program is free software, covered by the GNU General Public License.\n\
+-\n\
+-This program is distributed in the hope that it will be useful, but WITHOUT \
+-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \
+-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \
+-more details.\n", 250},
+- {"\
+-Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n\
+-Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, runs \
+-in\n\
+-interactive mode.\n", 251},
+- {"\
+-You found a bug in GNU Parted. Please email a bug report to bug-parted@gnu.\
+-org containing the version (%s), and the following message:\n", 252},
+- {"on", 253},
+- {"OPTIONs:", 254},
+- {"COMMANDs:", 255},
+- {"\
+-\n\
+-Using %s\n", 256},
+- {"\
+-The operating system thinks the geometry on %s is %d/%d/%d. Therefore, \
+-cylinder 1024 ends at %.3fM. You should check that this matches the BIOS \
+-geometry before using this program.", 257},
+- {"\
+-The operating system thinks the geometry on %s is %d/%d/%d. You should \
+-check that this matches the BIOS geometry before using this program.", 258},
+-};
+-
+-int _msg_tbl_length = 258;
+diff -urN parted-1.4.17.orig/po/stamp-cat-id parted-1.4.17/po/stamp-cat-id
+--- parted-1.4.17.orig/po/stamp-cat-id Tue Jul 10 04:27:20 2001
++++ parted-1.4.17/po/stamp-cat-id Wed Dec 31 19:00:00 1969
+@@ -1 +0,0 @@
+-timestamp
+diff -urN parted-1.4.17.orig/python/Makefile.am parted-1.4.17/python/Makefile.am
+--- parted-1.4.17.orig/python/Makefile.am Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/Makefile.am Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,29 @@
++AUTOMAKE_OPTIONS = 1.4 foreign
++
++partedincludedir = -I$(top_srcdir)/include
++INCLUDES = $(partedincludedir) @PYTHON_INCLUDES@ @INTLINCS@
++
++noinst_LTLIBRARIES = libpartedmodule.la
++libpartedmodule_la_SOURCES = partedmodule.c \
++ pydevice.c \
++ pydisk.c \
++ pygeometry.c \
++ pyexception.c \
++ pyfilesystem.c \
++ pyconstraint.c \
++ partedmodule.h \
++ pyconstraint.h \
++ pydevice.h \
++ pydisk.h \
++ pyexception.h \
++ pyfilesystem.h \
++ pygeometry.h
++
++pythondir = $(pydynmoduledir)
++python_PROGRAMS = partedmodule.so
++partedmodule_so_SOURCES =
++partedmodule_so_LDFLAGS = $(top_builddir)/libparted/libparted.la \
++ -shared -Wl,-soname,partedmodule.so
++
++partedmodule.so: $(libpartedmodule_la_OBJECTS)
++ $(LINK) -g -o $@ $^ $(partedmodule_so_LDFLAGS);
+diff -urN parted-1.4.17.orig/python/partedmodule.c parted-1.4.17/python/partedmodule.c
+--- parted-1.4.17.orig/python/partedmodule.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/partedmodule.c Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,334 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include <Python.h>
++
++#include "parted/parted.h"
++
++#include "partedmodule.h"
++#include "pydevice.h"
++#include "pydisk.h"
++#include "pyexception.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++
++/* global error object */
++PyObject *PyPartedError;
++
++/* static global variables */
++static PyObject *PyExceptionHandler;
++static char *py_exception_string = NULL;
++
++/* common functions */
++int
++py_ped_exception_string_check (void)
++{
++ return (py_exception_string != NULL);
++}
++
++
++void
++py_ped_exception_string_clear (void)
++{
++ if (py_exception_string != NULL) {
++ free (py_exception_string);
++ py_exception_string = NULL;
++ }
++}
++
++void
++py_ped_set_error_from_ped_exception (void)
++{
++ if (py_exception_string != NULL) {
++ PyErr_SetString(PyPartedError, py_exception_string);
++ py_ped_exception_string_clear ();
++ return;
++ }
++ PyErr_SetString(PyPartedError, "unknown error occured");
++}
++
++/* toplevel implementation */
++
++static PedExceptionOption
++py_exception_handler (PedException* ex)
++{
++ PyObject * result, * args = NULL;
++ long rc;
++ char * type;
++ char * buf;
++ int len;
++
++ if (py_exception_string != NULL)
++ free (py_exception_string);
++
++ type = ped_exception_get_type_string (ex->type);
++ len = strlen (type) + strlen (ex->message) + 3;
++ buf = malloc (len);
++ snprintf (buf, len, "%s: %s", type, ex->message);
++ py_exception_string = buf;
++
++ if (PyExceptionHandler == NULL) {
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ args = Py_BuildValue("(N)", (PyObject *) py_ped_exception_obj_new (ex));
++
++ result = PyEval_CallObject(PyExceptionHandler, args);
++ Py_XDECREF(args);
++
++ if (result == NULL) {
++ PyErr_Print();
++ PyErr_Clear();
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ if (!PyInt_Check (result)) {
++ fprintf (stderr,
++ "ERROR: python exception handler did not "
++ "return expected int value\n");
++ return PED_EXCEPTION_UNHANDLED;
++ }
++
++ rc = PyInt_AsLong (result);
++ Py_DECREF (result);
++ return (PedExceptionOption) rc;
++}
++
++static PyObject *
++py_ped_exception_set_handler (PyObject * self, PyObject * args)
++{
++ PyObject *cb;
++
++ /* if we already have a callback, releae it */
++ if (PyExceptionHandler != NULL) {
++ Py_DECREF (PyExceptionHandler);
++ PyExceptionHandler = NULL;
++ }
++
++ if (!PyArg_ParseTuple(args, "O", &cb))
++ return NULL;
++
++ if (!PyCallable_Check (cb)) {
++ PyErr_SetString(PyExc_TypeError, "parameter must be callable");
++ return NULL;
++ }
++ Py_INCREF (cb);
++ PyExceptionHandler = cb;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_get (PyObject * self, PyObject * args)
++{
++ PyPedDevice *d;
++ PedDevice *dev;
++ char *path;
++
++ if (!PyArg_ParseTuple(args, "s", &path))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if ((dev = ped_device_get (path)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ d = (PyPedDevice *) PyObject_NEW(PyObject, &PyPedDeviceType);
++ d->dev = dev;
++ return (PyObject *) d;
++}
++
++static PyObject *
++py_ped_file_system_type_get (PyObject * self, PyObject * args)
++{
++ char *type;
++ PedFileSystemType *fst;
++
++ if (!PyArg_ParseTuple(args, "s", &type)) {
++ return NULL;
++ }
++
++ if ((fst = ped_file_system_type_get (type)) == NULL) {
++ PyErr_SetString(PyPartedError, "unknown file system type");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++}
++
++static PyObject *
++py_ped_file_system_type_get_next (PyObject * self, PyObject * args)
++{
++ PyPedFileSystemTypeObj *pyfst = NULL;
++ PedFileSystemType *fst;
++
++ if (!PyArg_ParseTuple(args, "|O!", &PyPedFileSystemTypeType, &pyfst)) {
++ PyErr_SetString(PyExc_TypeError,
++ "optional parameter must be a "
++ "PedFileSystemType");
++ return NULL;
++ }
++
++ fst = ped_file_system_type_get_next (pyfst ? pyfst->fs_type : NULL);
++ if (fst)
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_flag_next (PyObject *obj, PyObject * args)
++{
++ int flag, next;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ next = ped_partition_flag_next (flag);
++
++ return PyInt_FromLong (next);
++}
++
++static PyObject *
++py_ped_partition_flag_get_by_name (PyObject *obj, PyObject * args)
++{
++ char *name;
++ int flag;
++
++ if (!PyArg_ParseTuple(args, "s", &name))
++ return NULL;
++
++ flag = ped_partition_flag_get_by_name (name);
++
++ return PyInt_FromLong (flag);
++}
++
++static PyObject *
++py_ped_partition_flag_get_name (PyObject *obj, PyObject * args)
++{
++ int flag;
++ const char *name;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ name = ped_partition_flag_get_name (flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyString_FromString (name);
++}
++
++static struct PyMethodDef PyPedModuleMethods[] = {
++ { "device_get",
++ (PyCFunction) py_ped_device_get, METH_VARARGS, NULL },
++ { "exception_set_handler",
++ (PyCFunction) py_ped_exception_set_handler,
++ METH_VARARGS, NULL },
++ { "file_system_type_get",
++ (PyCFunction) py_ped_file_system_type_get,
++ METH_VARARGS, NULL },
++ { "file_system_type_get_next",
++ (PyCFunction) py_ped_file_system_type_get_next,
++ METH_VARARGS, NULL },
++ { "partition_flag_next",
++ (PyCFunction) py_ped_partition_flag_next,
++ METH_VARARGS, NULL },
++ { "partition_flag_get_by_name",
++ (PyCFunction) py_ped_partition_flag_get_by_name,
++ METH_VARARGS, NULL },
++ { "partition_flag_get_name",
++ (PyCFunction) py_ped_partition_flag_get_name,
++ METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++void initparted(void) {
++ PyObject *m, *d, *o;
++
++ if (!ped_init ())
++ Py_FatalError("couldn't initialized parted");
++
++ m = Py_InitModule("parted", PyPedModuleMethods);
++ d = PyModule_GetDict(m);
++
++ /* enum registration */
++#define REGISTER_ENUM(val) \
++ PyDict_SetItemString(d, #val, o=PyInt_FromLong(PED_ ## val)); \
++ Py_DECREF(o);
++
++ REGISTER_ENUM(DEVICE_UNKNOWN);
++ REGISTER_ENUM(DEVICE_SCSI);
++ REGISTER_ENUM(DEVICE_IDE);
++ REGISTER_ENUM(DEVICE_DAC960);
++ REGISTER_ENUM(DEVICE_CPQARRAY);
++
++ REGISTER_ENUM(PARTITION_PRIMARY);
++ REGISTER_ENUM(PARTITION_LOGICAL);
++ REGISTER_ENUM(PARTITION_EXTENDED);
++ REGISTER_ENUM(PARTITION_FREESPACE);
++ REGISTER_ENUM(PARTITION_METADATA);
++
++ REGISTER_ENUM(PARTITION_BOOT);
++ REGISTER_ENUM(PARTITION_ROOT);
++ REGISTER_ENUM(PARTITION_SWAP);
++ REGISTER_ENUM(PARTITION_HIDDEN);
++ REGISTER_ENUM(PARTITION_RAID);
++ REGISTER_ENUM(PARTITION_LVM);
++ REGISTER_ENUM(PARTITION_LBA);
++
++ REGISTER_ENUM(PARTITION_FIRST_FLAG);
++ REGISTER_ENUM(PARTITION_LAST_FLAG);
++
++ REGISTER_ENUM(DISK_TYPE_EXTENDED);
++ REGISTER_ENUM(DISK_TYPE_PARTITION_NAME);
++
++ REGISTER_ENUM(EXCEPTION_INFORMATION);
++ REGISTER_ENUM(EXCEPTION_WARNING);
++ REGISTER_ENUM(EXCEPTION_ERROR);
++ REGISTER_ENUM(EXCEPTION_FATAL);
++ REGISTER_ENUM(EXCEPTION_BUG);
++ REGISTER_ENUM(EXCEPTION_NO_FEATURE);
++
++ REGISTER_ENUM(EXCEPTION_UNHANDLED);
++ REGISTER_ENUM(EXCEPTION_YES);
++ REGISTER_ENUM(EXCEPTION_NO);
++ REGISTER_ENUM(EXCEPTION_OK);
++ REGISTER_ENUM(EXCEPTION_RETRY);
++ REGISTER_ENUM(EXCEPTION_IGNORE);
++ REGISTER_ENUM(EXCEPTION_CANCEL);
++
++ REGISTER_ENUM(EXCEPTION_OK_CANCEL);
++ REGISTER_ENUM(EXCEPTION_YES_NO);
++ REGISTER_ENUM(EXCEPTION_YES_NO_CANCEL);
++ REGISTER_ENUM(EXCEPTION_IGNORE_CANCEL);
++ REGISTER_ENUM(EXCEPTION_RETRY_CANCEL);
++ REGISTER_ENUM(EXCEPTION_RETRY_IGNORE_CANCEL);
++ /* end enum registration */
++
++ /* register the exception handler marhaller function */
++ ped_exception_set_handler (py_exception_handler);
++
++ /* set up our exception class */
++ PyPartedError = PyErr_NewException("parted.error", NULL, NULL);
++ PyDict_SetItemString(d, "error", PyPartedError);
++ Py_DECREF(PyPartedError);
++}
+diff -urN parted-1.4.17.orig/python/partedmodule.h parted-1.4.17/python/partedmodule.h
+--- parted-1.4.17.orig/python/partedmodule.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/partedmodule.h Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,25 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PARTEDMODULE_H_INCLUDED
++#define PARTEDMODULE_H_INCLUDED
++
++#include <Python.h>
++
++extern PyObject *PyPartedError;
++int py_ped_exception_string_check (void);
++void py_ped_exception_string_clear (void);
++extern void py_ped_set_error_from_ped_exception (void);
++
++#endif /* PARTEDMODULE_H_INCLUDED */
+diff -urN parted-1.4.17.orig/python/pyconstraint.c parted-1.4.17/python/pyconstraint.c
+--- parted-1.4.17.orig/python/pyconstraint.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyconstraint.c Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,109 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++*/
++
++#include "partedmodule.h"
++#include "pygeometry.h"
++#include "pyconstraint.h"
++
++static void py_ped_constraint_dealloc (PyPedConstraint * c);
++static PyObject * py_ped_constraint_getattr (PyPedConstraint * c, char * name);
++
++static char PyPedConstraintType__doc__[] = "This is the PartEd constraint "
++ "object";
++PyTypeObject PyPedConstraintType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedConstraint", /* tp_name */
++ sizeof(PyPedConstraint), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_constraint_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_constraint_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedConstraintType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_constraint_duplicate (PyPedConstraint * c,
++ PyObject * args);
++
++static struct PyMethodDef PyPedConstraintMethods[] = {
++ { "duplicate",
++ (PyCFunction) py_ped_constraint_duplicate,
++ METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++static void
++py_ped_constraint_dealloc (PyPedConstraint * c)
++{
++ if (!c->borrowed)
++ ped_constraint_destroy (c->constraint);
++ Py_XDECREF (c->disk);
++ PyMem_DEL(c);
++}
++
++static PyObject *
++py_ped_constraint_duplicate (PyPedConstraint * c, PyObject * args)
++{
++ PedConstraint *cst;
++
++ cst = ped_constraint_duplicate (c->constraint);
++ return (PyObject *) py_ped_constraint_obj_new (cst, c->disk, 0);
++}
++
++static PyObject *
++py_ped_constraint_getattr (PyPedConstraint * c, char * name)
++{
++ if (!strcmp (name, "start_range"))
++ return (PyObject *)
++ py_ped_geometry_obj_new (c->constraint->start_range,
++ c->disk, 1);
++ if (!strcmp (name, "end_range"))
++ return (PyObject *)
++ py_ped_geometry_obj_new (c->constraint->end_range,
++ c->disk, 1);
++ if (!strcmp (name, "min_size"))
++ return (PyObject *)
++ PyLong_FromLongLong (c->constraint->min_size);
++
++ return Py_FindMethod (PyPedConstraintMethods, (PyObject *) c, name);
++}
++
++PyPedConstraint *
++py_ped_constraint_obj_new (PedConstraint *c, PyPedDisk *disk, int borrowed)
++{
++ PyPedConstraint *con;
++
++ con = (PyPedConstraint *) PyObject_NEW(PyObject, &PyPedConstraintType);
++ con->constraint = c;
++ con->borrowed = borrowed;
++ con->disk = disk;
++ Py_INCREF (disk);
++
++ return con;
++}
+diff -urN parted-1.4.17.orig/python/pyconstraint.h parted-1.4.17/python/pyconstraint.h
+--- parted-1.4.17.orig/python/pyconstraint.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyconstraint.h Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,38 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++*/
++
++#ifndef PYCONSTRAINT_H_INCLUDED
++#define PYCONSTRAINT_H_INCLUDED
++
++#include <Python.h>
++#include "parted/constraint.h"
++#include "pydisk.h"
++
++typedef struct _PyPedConstraint PyPedConstraint;
++
++struct _PyPedConstraint {
++ PyObject_HEAD;
++ PedConstraint *constraint;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedConstraintType;
++
++extern PyPedConstraint * py_ped_constraint_obj_new (PedConstraint *c,
++ PyPedDisk *part,
++ int borrowed);
++
++#endif /* PYCONSTRAINT_H_INCLUDED */
+diff -urN parted-1.4.17.orig/python/pydevice.c parted-1.4.17/python/pydevice.c
+--- parted-1.4.17.orig/python/pydevice.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pydevice.c Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,152 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++#include "partedmodule.h"
++#include "pydevice.h"
++#include "pydisk.h"
++
++static void py_ped_device_dealloc (PyPedDevice * s);
++static PyObject * py_ped_device_getattr (PyPedDevice * s, char * name);
++
++static char PyPedDeviceType__doc__[] = "This is the PartEd device object";
++PyTypeObject PyPedDeviceType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedDevice", /* tp_name */
++ sizeof(PyPedDevice), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_device_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_device_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedDeviceType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_device_open (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_device_close (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_device_sync (PyPedDevice * s, PyObject * args);
++static PyObject * py_ped_disk_open (PyPedDevice * s, PyObject * args);
++
++static struct PyMethodDef PyPedDeviceMethods[] = {
++ { "open", (PyCFunction) py_ped_device_open, METH_VARARGS, NULL },
++ { "close", (PyCFunction) py_ped_device_close, METH_VARARGS, NULL },
++ { "sync", (PyCFunction) py_ped_device_sync, METH_VARARGS, NULL },
++ { "disk_open", (PyCFunction) py_ped_disk_open, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* device implementation */
++
++PyPedDevice * py_ped_device_new (PedDevice *dev)
++{
++ PyPedDevice *d;
++
++ d = (PyPedDevice *) PyObject_NEW(PyObject, &PyPedDeviceType);
++ d->dev = dev;
++ return d;
++}
++
++static void
++py_ped_device_dealloc (PyPedDevice * s)
++{
++ /* s->dev will be destroyed if ped_device_free_all() is called */
++ /* ped_device_destroy (s->dev); */
++ PyMem_DEL(s);
++}
++
++static PyObject *
++py_ped_device_getattr (PyPedDevice * d, char * name)
++{
++ if (!strcmp (name, "length"))
++ return PyLong_FromLongLong (d->dev->length);
++ else if (!strcmp (name, "model"))
++ return PyString_FromString (d->dev->model);
++ else if (!strcmp (name, "path"))
++ return PyString_FromString (d->dev->path);
++ else if (!strcmp (name, "sector_size"))
++ return PyInt_FromLong (d->dev->sector_size);
++ else if (!strcmp (name, "type"))
++ return PyInt_FromLong (d->dev->type);
++ return Py_FindMethod (PyPedDeviceMethods, (PyObject *) d, name);
++}
++
++static PyObject *
++py_ped_device_open (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_open (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_close (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_close (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_device_sync (PyPedDevice * s, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_device_sync (s->dev)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_open (PyPedDevice * self, PyObject * args)
++{
++ PyPedDevice *dev;
++ PyPedDisk *d;
++ PedDisk *disk;
++
++ py_ped_exception_string_clear ();
++ if ((disk = ped_disk_open (self->dev)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ d = (PyPedDisk *) PyObject_NEW(PyObject, &PyPedDiskType);
++ d->disk = disk;
++ return (PyObject *) d;
++}
++
+diff -urN parted-1.4.17.orig/python/pydevice.h parted-1.4.17/python/pydevice.h
+--- parted-1.4.17.orig/python/pydevice.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pydevice.h Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,33 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYDEVICE_H_INCLUDED
++#define PYDEVICE_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/device.h"
++
++extern PyTypeObject PyPedDeviceType;
++typedef struct _PyPedDevice PyPedDevice;
++
++struct _PyPedDevice {
++ PyObject_HEAD;
++ PedDevice *dev;
++};
++
++PyPedDevice * py_ped_device_new (PedDevice *dev);
++
++#endif /* PYDEVICE_H_INCLUDED */
++
+diff -urN parted-1.4.17.orig/python/pydisk.c parted-1.4.17/python/pydisk.c
+--- parted-1.4.17.orig/python/pydisk.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pydisk.c Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,631 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++#include "pydisk.h"
++#include "pydevice.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++
++/* disk python object */
++static void py_ped_disk_dealloc (PyPedDisk * d);
++static PyObject * py_ped_disk_getattr (PyPedDisk * d, char * name);
++
++static char PyPedDiskType__doc__[] = "This is the PartEd disk object";
++PyTypeObject PyPedDiskType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedDisk", /* tp_name */
++ sizeof(PyPedDisk), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_disk_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_disk_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedDiskType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_disk_next_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_write (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_read (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_delete_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_delete_all (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_add_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_disk_get_partition (PyPedDisk * d, PyObject * args);
++static PyObject * py_ped_constraint_any (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_geometry_new (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_partition_new (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_minimize_extended_partition (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_maximize_partition (PyPedDisk * self, PyObject * args);
++static PyObject * py_ped_disk_is_busy (PyPedDisk * d, PyObject * args);
++
++static struct PyMethodDef PyPedDiskMethods[] = {
++ { "next_partition", (PyCFunction) py_ped_disk_next_partition, METH_VARARGS, NULL },
++ { "read", (PyCFunction) py_ped_disk_read, METH_VARARGS, NULL },
++ { "write", (PyCFunction) py_ped_disk_write, METH_VARARGS, NULL },
++ { "delete_partition", (PyCFunction) py_ped_disk_delete_partition, METH_VARARGS, NULL },
++ { "delete_all", (PyCFunction) py_ped_disk_delete_all, METH_VARARGS, NULL },
++ { "add_partition", (PyCFunction) py_ped_disk_add_partition, METH_VARARGS, NULL },
++ { "get_partition", (PyCFunction) py_ped_disk_get_partition, METH_VARARGS, NULL },
++ { "constraint_any", (PyCFunction) py_ped_constraint_any, METH_VARARGS, NULL },
++ { "geometry_new", (PyCFunction) py_ped_geometry_new, METH_VARARGS, NULL },
++ { "partition_new", (PyCFunction) py_ped_partition_new, METH_VARARGS, NULL },
++ { "minimize_extended_partition", (PyCFunction) py_ped_disk_minimize_extended_partition, METH_VARARGS, NULL },
++ { "maximize_partition", (PyCFunction) py_ped_disk_maximize_partition, METH_VARARGS, NULL },
++ { "is_busy", (PyCFunction) py_ped_disk_is_busy, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* partition python object */
++
++static void py_ped_partition_dealloc (PyPedPartition * p);
++static PyObject * py_ped_partition_getattr (PyPedPartition * p, char * name);
++
++static char PyPedPartitionType__doc__[] = "This is the PartEd partition object";
++PyTypeObject PyPedPartitionType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedPartition", /* tp_name */
++ sizeof(PyPedPartition), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_partition_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_partition_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedPartitionType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_partition_is_flag_available (PyPedPartition *p, PyObject * args);
++static PyObject * py_ped_partition_set_flag (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_get_flag (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_is_active (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_set_system (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_set_name (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_get_name (PyPedPartition * self, PyObject * args);
++static PyObject * py_ped_partition_is_busy (PyPedPartition * self, PyObject * args);
++
++static struct PyMethodDef PyPedPartitionMethods[] = {
++ { "is_flag_available", (PyCFunction) py_ped_partition_is_flag_available, METH_VARARGS, NULL },
++ { "get_flag", (PyCFunction) py_ped_partition_get_flag, METH_VARARGS, NULL },
++ { "set_flag", (PyCFunction) py_ped_partition_set_flag, METH_VARARGS, NULL },
++ { "is_active", (PyCFunction) py_ped_partition_is_active, METH_VARARGS, NULL },
++ { "set_system", (PyCFunction) py_ped_partition_set_system, METH_VARARGS, NULL },
++ { "set_name", (PyCFunction) py_ped_partition_set_name, METH_VARARGS, NULL },
++ { "get_name", (PyCFunction) py_ped_partition_get_name, METH_VARARGS, NULL },
++ { "is_busy", (PyCFunction) py_ped_partition_is_busy, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++/* disk implementation */
++
++static void
++py_ped_disk_dealloc (PyPedDisk * d)
++{
++ ped_disk_close (d->disk);
++ PyMem_DEL(d);
++}
++
++static PyObject *
++py_ped_disk_getattr (PyPedDisk * d, char * name)
++{
++ if (!strcmp (name, "dev"))
++ return (PyObject *) py_ped_device_new (d->disk->dev);
++ if (!strcmp (name, "max_primary_partition_count")) {
++ int num;
++
++ py_ped_exception_string_clear ();
++ num = ped_disk_get_max_primary_partition_count (d->disk);
++ if (num == 0) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ return PyInt_FromLong (num);
++ }
++ if (!strcmp (name, "extended_partition")) {
++ PedPartition *ppart;
++
++ py_ped_exception_string_clear ();
++ ppart = ped_disk_extended_partition (d->disk);
++ if (ppart != NULL)
++ return (PyObject *) py_ped_partition_obj_new (ppart, d, 1);
++
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++
++ return Py_FindMethod (PyPedDiskMethods, (PyObject *) d, name);
++}
++
++static PyObject *
++py_ped_disk_next_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part = NULL;
++ PedPartition *ppart;
++
++ if (!PyArg_ParseTuple(args, "|O!", &PyPedPartitionType, &part)) {
++ PyErr_SetString(PyExc_TypeError,
++ "optional parameter must be a PedPartition");
++ return NULL;
++ }
++
++ ppart = ped_disk_next_partition (d->disk, part ? part->part : NULL);
++ if (ppart != NULL)
++ return (PyObject *) py_ped_partition_obj_new (ppart, d, 1);
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_read (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_write (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_write (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_write (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_delete_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedPartitionType, &part)) {
++ PyErr_SetString(PyExc_TypeError, "PedPartition expected");
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_delete_partition (d->disk, part->part)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ /* the partition structure is freed as part of the
++ delete_partition call. Protect from the double free
++ by marking it borrowed */
++ part->borrowed = 1;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_disk_delete_all (PyPedDisk * d, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_delete_all (d->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_add_partition (PyPedDisk * d, PyObject * args)
++{
++ PyPedPartition *part;
++ PyPedConstraint *constraint;
++
++ if (!PyArg_ParseTuple(args, "O!O!", &PyPedPartitionType, &part,
++ &PyPedConstraintType, &constraint)) {
++ PyErr_SetString(PyExc_TypeError, "bad argument");
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_add_partition (d->disk, part->part,
++ constraint->constraint)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ /* the disk takes ownership of the data in this partition
++ when added, protect from double free */
++ part->borrowed = 1;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_get_partition_by_sector (PyPedDisk * d, PyObject * args)
++{
++ PedPartition *part;
++ PedSector sect;
++
++ if (!PyArg_ParseTuple(args, "L", &sect))
++ return NULL;
++
++ if ((part = ped_disk_get_partition_by_sector (d->disk, sect)) == NULL) {
++ PyErr_SetString(PyPartedError, "partition not found");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_partition_obj_new (part, d, 1);
++}
++
++static PyObject *
++py_ped_disk_get_partition (PyPedDisk * d, PyObject * args)
++{
++ PedPartition *part;
++ int num;
++
++ if (!PyArg_ParseTuple(args, "i", &num))
++ return NULL;
++
++ if ((part = ped_disk_get_partition (d->disk, num)) == NULL) {
++ PyErr_SetString(PyPartedError, "partition not found");
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_partition_obj_new (part, d, 1);
++}
++
++static PyObject *
++py_ped_partition_new (PyPedDisk * self, PyObject * args)
++{
++ PyPedFileSystemTypeObj *fs_type;
++ PedSector start, end;
++ PedPartition *part;
++ PedPartitionType type;
++ PyPedPartition *pypart;
++
++ if (!PyArg_ParseTuple(args, "iO!LL",
++ &type,
++ &PyPedFileSystemTypeType, &fs_type,
++ &start, &end)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ part = ped_partition_new (self->disk, type, fs_type->fs_type,
++ start, end);
++ if (part == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pypart = py_ped_partition_obj_new (part, self, 0);
++
++ return (PyObject *) pypart;
++}
++
++static PyObject *
++py_ped_constraint_any (PyPedDisk * self, PyObject * args)
++{
++ PyPedDisk *disk;
++ PedConstraint *constraint;
++ PyPedConstraint *pyconstraint;
++
++ py_ped_exception_string_clear ();
++ constraint = ped_constraint_any (self->disk);
++ if (constraint == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyconstraint = py_ped_constraint_obj_new (constraint, self, 0);
++
++ return (PyObject *) pyconstraint;
++}
++
++static PyObject *
++py_ped_geometry_new (PyPedDisk * self, PyObject * args)
++{
++ PedSector start, length;
++ PedGeometry *geom;
++ PyPedGeometry *pygeom;
++
++ if (!PyArg_ParseTuple(args, "LL", &start, &length)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ geom = ped_geometry_new (self->disk, start, length);
++ if (geom == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pygeom = py_ped_geometry_obj_new (geom, self, 0);
++ pygeom->disk = self;
++ Py_INCREF (self);
++
++ return (PyObject *) pygeom;
++}
++
++static PyObject *
++py_ped_disk_minimize_extended_partition (PyPedDisk * self, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_disk_minimize_extended_partition (self->disk)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++
++}
++
++static PyObject *
++py_ped_disk_maximize_partition (PyPedDisk * self, PyObject * args)
++{
++ PyPedPartition *part;
++ PyPedConstraint *constraint;
++
++ if (!PyArg_ParseTuple(args, "O!O!", &PyPedPartitionType, &part,
++ &PyPedConstraintType, &constraint)) {
++ return NULL;
++ }
++
++ py_ped_exception_string_clear ();
++ if (!ped_disk_maximize_partition (self->disk, part->part,
++ constraint->constraint)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_disk_is_busy (PyPedDisk *d, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_disk_is_busy (d->disk);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++/* partition implementation */
++
++PyPedPartition *
++py_ped_partition_obj_new (PedPartition *part, PyPedDisk *disk, int borrowed)
++{
++ PyPedPartition *p;
++
++ p = (PyPedPartition *) PyObject_NEW(PyObject, &PyPedPartitionType);
++ p->part = part;
++ p->borrowed = borrowed;
++ p->disk = disk;
++ Py_INCREF (disk);
++
++ return p;
++}
++
++static void
++py_ped_partition_dealloc (PyPedPartition * p)
++{
++ if (!p->borrowed)
++ ped_partition_destroy (p->part);
++ Py_XDECREF (p->disk);
++ PyMem_DEL(p);
++}
++
++static PyObject *
++py_ped_partition_getattr (PyPedPartition * p, char * name)
++{
++ if (!strcmp (name, "num"))
++ return PyInt_FromLong (p->part->num);
++ if (!strcmp (name, "type"))
++ return PyInt_FromLong (p->part->type);
++ if (!strcmp (name, "type_name"))
++ return PyString_FromString (
++ ped_partition_type_get_name (p->part->type));
++ if (!strcmp (name, "geom"))
++ return (PyObject *) py_ped_geometry_obj_new (&p->part->geom, p->disk, 1);
++ if (!strcmp (name, "fs_type")) {
++ if (p->part->fs_type)
++ return (PyObject *)
++ py_ped_file_system_type_obj_new (p->part->fs_type);
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++ return Py_FindMethod (PyPedPartitionMethods, (PyObject *) p, name);
++}
++
++static PyObject *
++py_ped_partition_is_flag_available (PyPedPartition *p, PyObject * args)
++{
++ int av, flag;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ av = ped_partition_is_flag_available (p->part, flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (av);
++}
++
++static PyObject *
++py_ped_partition_set_flag (PyPedPartition *p, PyObject * args)
++{
++ int flag, state;
++
++ if (!PyArg_ParseTuple(args, "ii", &flag, &state))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_flag (p->part, flag, state)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_get_flag (PyPedPartition *p, PyObject * args)
++{
++ int flag, state;
++
++ if (!PyArg_ParseTuple(args, "i", &flag))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_get_flag (p->part, flag);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++
++static PyObject *
++py_ped_partition_is_active (PyPedPartition *p, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_is_active (p->part);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
++
++static PyObject *
++py_ped_partition_set_system (PyPedPartition *p, PyObject * args)
++{
++ PyPedFileSystemTypeObj *fs_type;
++
++ if (!PyArg_ParseTuple(args, "O!",
++ &PyPedFileSystemTypeType, &fs_type))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_system (p->part, fs_type->fs_type)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_partition_set_name (PyPedPartition *p, PyObject * args)
++{
++ char *name;
++
++ if (!PyArg_ParseTuple(args, "s", &name))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_partition_set_name (p->part, name)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_partition_get_name (PyPedPartition *p, PyObject * args)
++{
++ const char *name;
++
++ py_ped_exception_string_clear ();
++ if ((name = ped_partition_get_name (p->part)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyString_FromString (name);
++}
++
++
++static PyObject *
++py_ped_partition_is_busy (PyPedPartition *p, PyObject * args)
++{
++ int state;
++
++ py_ped_exception_string_clear ();
++ state = ped_partition_is_busy (p->part);
++ if (py_ped_exception_string_check ()) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return PyInt_FromLong (state);
++}
+diff -urN parted-1.4.17.orig/python/pydisk.h parted-1.4.17/python/pydisk.h
+--- parted-1.4.17.orig/python/pydisk.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pydisk.h Wed Aug 1 20:24:45 2001
+@@ -0,0 +1,45 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYDISK_H_INCLUDED
++#define PYDISK_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/disk.h"
++
++typedef struct _PyPedDisk PyPedDisk;
++
++struct _PyPedDisk {
++ PyObject_HEAD;
++ PedDisk *disk;
++};
++
++extern PyTypeObject PyPedDiskType;
++
++typedef struct _PyPedPartition PyPedPartition;
++
++struct _PyPedPartition {
++ PyObject_HEAD;
++ PedPartition *part;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedPartitionType;
++
++extern PyPedPartition * py_ped_partition_obj_new (PedPartition *part, PyPedDisk *disk,
++ int borrowed);
++
++#endif /* PYDISK_H_INCLUDED */
+diff -urN parted-1.4.17.orig/python/pyexception.c parted-1.4.17/python/pyexception.c
+--- parted-1.4.17.orig/python/pyexception.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyexception.c Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,78 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "pyexception.h"
++
++static void py_ped_exception_dealloc (PyPedException * s);
++static PyObject * py_ped_exception_getattr (PyPedException * s, char * name);
++
++static char PyPedExceptionType__doc__[] = "This is the PartEd exception object";
++PyTypeObject PyPedExceptionType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedException", /* tp_name */
++ sizeof(PyPedException), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_exception_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_exception_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /*tp_hash*/
++ 0, /*tp_call*/
++ 0, /*tp_str*/
++ 0, /*tp_getattro*/
++ 0, /*tp_setattro*/
++ 0, /*tp_as_buffer*/
++ 0L, /*tp_flags*/
++ PyPedExceptionType__doc__,
++ 0L,0L,0L,0L
++};
++
++
++/* exception implementation */
++
++static void
++py_ped_exception_dealloc (PyPedException * s)
++{
++ PyMem_DEL(s);
++}
++
++static PyObject *
++py_ped_exception_getattr (PyPedException * e, char * name)
++{
++ if (!strcmp (name, "message"))
++ return PyString_FromString (e->ex->message);
++ else if (!strcmp (name, "type"))
++ return PyInt_FromLong (e->ex->type);
++ else if (!strcmp (name, "type_string"))
++ return PyString_FromString (ped_exception_get_type_string (e->ex->type));
++ else if (!strcmp (name, "options"))
++ return PyInt_FromLong (e->ex->options);
++ return NULL;
++}
++
++PyPedException *
++py_ped_exception_obj_new (PedException *ex)
++{
++ PyPedException *e;
++
++ e = (PyPedException *) PyObject_NEW(PyObject, &PyPedExceptionType);
++ e->ex = ex;
++ return e;
++}
+diff -urN parted-1.4.17.orig/python/pyexception.h parted-1.4.17/python/pyexception.h
+--- parted-1.4.17.orig/python/pyexception.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyexception.h Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,35 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYEXCEPTION_H_INCLUDED
++#define PYEXCEPTION_H_INCLUDED
++
++#include <Python.h>
++
++#include "parted/exception.h"
++
++extern PyTypeObject PyPedExceptionType;
++
++typedef struct _PyPedException PyPedException;
++
++struct _PyPedException {
++ PyObject_HEAD;
++ PedException *ex;
++};
++
++PyPedException *
++py_ped_exception_obj_new (PedException *ex);
++
++#endif /* PYEXCEPTION_H_INCLUDED */
++
+diff -urN parted-1.4.17.orig/python/pyfilesystem.c parted-1.4.17/python/pyfilesystem.c
+--- parted-1.4.17.orig/python/pyfilesystem.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyfilesystem.c Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,228 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++
++#include "pyfilesystem.h"
++#include "pyconstraint.h"
++#include "pygeometry.h"
++
++/* filesystem python object */
++
++static void py_ped_file_system_dealloc (PyPedFileSystem* fs);
++static PyObject * py_ped_file_system_getattr (PyPedFileSystem * fs, char * name);
++
++static char PyPedFileSystemType__doc__[] = "This is the PartEd filesystem object";
++PyTypeObject PyPedFileSystemType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedFileSystem", /* tp_name */
++ sizeof(PyPedFileSystem), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_file_system_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_file_system_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedFileSystemType__doc__,
++ 0L,0L,0L,0L
++};
++
++static PyObject * py_ped_file_system_check (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_copy (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_resize (PyPedFileSystem * fs, PyObject * args);
++static PyObject * py_ped_file_system_get_resize_constraint (PyPedFileSystem * fs, PyObject * args);
++
++static struct PyMethodDef PyPedFileSystemMethods[] = {
++ { "check", (PyCFunction) py_ped_file_system_check, METH_VARARGS, NULL },
++ { "copy", (PyCFunction) py_ped_file_system_copy, METH_VARARGS, NULL },
++ { "resize", (PyCFunction) py_ped_file_system_resize, METH_VARARGS, NULL },
++ { "get_resize_constraint", (PyCFunction) py_ped_file_system_get_resize_constraint, METH_VARARGS, NULL },
++ { NULL, NULL, 0, NULL }
++};
++
++
++/* file system type python object */
++
++static void py_ped_file_system_type_dealloc (PyPedFileSystemTypeObj* fst);
++static PyObject * py_ped_file_system_type_getattr (PyPedFileSystemTypeObj* fst, char * name);
++
++static char PyPedFileSystemTypeType__doc__[] = "This is the PartEd filesystem object";
++PyTypeObject PyPedFileSystemTypeType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedFileSystemType", /* tp_name */
++ sizeof(PyPedFileSystemType), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_file_system_type_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_file_system_type_getattr, /* tp_getattr */
++ 0, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedFileSystemTypeType__doc__,
++ 0L,0L,0L,0L
++};
++
++static struct PyMethodDef PyPedFileSystemTypeMethods[] = {
++ { NULL, NULL, 0, NULL }
++};
++
++/*
++ * filesystem implementation
++ */
++
++PyPedFileSystem *
++py_ped_file_system_obj_new (PedFileSystem *filesys,
++ PyPedGeometry *geom)
++{
++ PyPedFileSystem *fs;
++
++ fs = (PyPedFileSystem *) PyObject_NEW(PyObject, &PyPedFileSystemType);
++ fs->fs = filesys;
++ fs->geom = geom;
++ Py_INCREF (geom);
++ return fs;
++}
++
++static void
++py_ped_file_system_dealloc (PyPedFileSystem * fs)
++{
++ ped_file_system_close (fs->fs);
++ Py_XDECREF (fs->geom);
++ PyMem_DEL(fs);
++}
++
++static PyObject *
++py_ped_file_system_getattr (PyPedFileSystem * fs, char * name)
++{
++ if (!strcmp (name, "type"))
++ return PyString_FromString (fs->fs->type->name);
++ if (!strcmp (name, "geom"))
++ return (PyObject *) py_ped_geometry_obj_new (fs->fs->geom, fs->geom->disk, 1);
++ return Py_FindMethod (PyPedFileSystemMethods, (PyObject *) fs, name);
++}
++
++static PyObject *
++py_ped_file_system_check (PyPedFileSystem * fs, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_check (fs->fs)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_copy (PyPedFileSystem * fs, PyObject * args)
++{
++ PyPedGeometry *geom;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedGeometryType, &geom))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_copy (fs->fs, geom->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_resize (PyPedFileSystem * fs, PyObject * args)
++{
++ PyPedGeometry *geom;
++
++ if (!PyArg_ParseTuple(args, "O!", &PyPedGeometryType, &geom))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_resize (fs->fs, geom->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_file_system_get_resize_constraint (PyPedFileSystem * fs, PyObject * args)
++{
++ PedConstraint *constraint;
++
++ py_ped_exception_string_clear ();
++ if ((constraint = ped_file_system_get_resize_constraint (fs->fs)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_constraint_obj_new (constraint, fs->geom->disk, 0);
++}
++
++/*
++ * file system type implementation
++ */
++
++
++PyPedFileSystemTypeObj *
++py_ped_file_system_type_obj_new (const PedFileSystemType *fs_type)
++{
++ PyPedFileSystemTypeObj *fst;
++
++ fst = (PyPedFileSystemTypeObj *) PyObject_NEW(PyObject, &PyPedFileSystemTypeType);
++ fst->fs_type = fs_type;
++ return fst;
++}
++
++static void
++py_ped_file_system_type_dealloc (PyPedFileSystemTypeObj* fst)
++{
++ PyMem_DEL(fst);
++}
++
++static PyObject *
++py_ped_file_system_type_getattr (PyPedFileSystemTypeObj * fst, char * name)
++{
++ if (!strcmp (name, "name"))
++ return PyString_FromString (fst->fs_type->name);
++ return NULL;
++}
+diff -urN parted-1.4.17.orig/python/pyfilesystem.h parted-1.4.17/python/pyfilesystem.h
+--- parted-1.4.17.orig/python/pyfilesystem.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pyfilesystem.h Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,49 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYFILESYSTEM_H_INCLUDED
++#define PYFILESYSTEM_H_INCLUDED
++
++#include <Python.h>
++#include "parted/disk.h"
++#include "pygeometry.h"
++
++typedef struct _PyPedFileSystem PyPedFileSystem;
++
++struct _PyPedFileSystem {
++ PyObject_HEAD;
++ PedFileSystem* fs;
++ PyPedGeometry *geom;
++};
++
++extern PyTypeObject PyPedFileSystemType;
++
++PyPedFileSystem *
++py_ped_file_system_obj_new (PedFileSystem* fs,
++ PyPedGeometry *geom);
++
++typedef struct _PyPedFileSystemTypeObj PyPedFileSystemTypeObj;
++
++struct _PyPedFileSystemTypeObj {
++ PyObject_HEAD;
++ const PedFileSystemType* fs_type;
++};
++
++extern PyTypeObject PyPedFileSystemTypeType;
++
++PyPedFileSystemTypeObj*
++py_ped_file_system_type_obj_new (const PedFileSystemType* fs_type);
++
++#endif /* PYFILESYSTEM_H_INCLUDED */
++
+diff -urN parted-1.4.17.orig/python/pygeometry.c parted-1.4.17/python/pygeometry.c
+--- parted-1.4.17.orig/python/pygeometry.c Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pygeometry.c Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,245 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#include "partedmodule.h"
++#include "pygeometry.h"
++#include "pyfilesystem.h"
++
++static void py_ped_geometry_dealloc (PyPedGeometry * g);
++static PyObject * py_ped_geometry_getattr (PyPedGeometry * g, char * name);
++static int py_ped_geometry_setattr (PyPedGeometry * g, char * name, PyObject *value);
++
++static char PyPedGeometryType__doc__[] = "This is the PartEd geometry object";
++PyTypeObject PyPedGeometryType = {
++ PyObject_HEAD_INIT(&PyType_Type)
++ 0, /* ob_size */
++ "PedGeometry", /* tp_name */
++ sizeof(PyPedGeometry), /* tp_size */
++ 0, /* tp_itemsize */
++ (destructor) py_ped_geometry_dealloc, /* tp_dealloc */
++ 0, /* tp_print */
++ (getattrfunc) py_ped_geometry_getattr, /* tp_getattr */
++ (setattrfunc) py_ped_geometry_setattr, /* tp_setattr */
++ 0, /* tp_compare */
++ 0, /* tp_repr */
++ 0, /* tp_as_number */
++ 0, /* tp_as_sequence */
++ 0, /* tp_as_mapping */
++ 0, /* tp_hash */
++ 0, /* tp_call */
++ 0, /* tp_str */
++ 0, /* tp_getattro */
++ 0, /* tp_setattro */
++ 0, /* tp_as_buffer */
++ 0L, /* tp_flags */
++ PyPedGeometryType__doc__,
++ 0L,0L,0L,0L
++};
++
++/* geometry implementation */
++
++PyPedGeometry *
++py_ped_geometry_obj_new (PedGeometry* geom, PyPedDisk *disk, int borrowed)
++{
++ PyPedGeometry *g;
++
++ g = (PyPedGeometry *) PyObject_NEW (PyObject, &PyPedGeometryType);
++ g->geom = geom;
++ g->borrowed = borrowed;
++ g->disk = disk;
++ Py_INCREF (disk);
++ return g;
++}
++
++static void
++py_ped_geometry_dealloc (PyPedGeometry * g)
++{
++ if (!g->borrowed)
++ ped_geometry_destroy (g->geom);
++ Py_XDECREF (g->disk);
++ PyMem_DEL(g);
++}
++
++static PyObject *
++py_ped_file_system_open (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystem *fs;
++ PyPedFileSystem *pyfs;
++
++ py_ped_exception_string_clear ();
++ if ((fs = ped_file_system_open (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyfs = py_ped_file_system_obj_new (fs, self);
++ return (PyObject *) pyfs;
++}
++
++static PyObject *
++py_ped_file_system_probe (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystemType *fst;
++
++ py_ped_exception_string_clear ();
++ if ((fst = ped_file_system_probe (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_file_system_type_obj_new (fst);
++}
++
++static PyObject *
++py_ped_file_system_create (PyPedGeometry * self, PyObject * args)
++{
++ PedFileSystem *fs;
++ PyPedFileSystemTypeObj *fs_type;
++ PyPedFileSystem *pyfs;
++
++ if (!PyArg_ParseTuple(args, "O!",
++ &PyPedFileSystemTypeType, &fs_type))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if ((fs = ped_file_system_create (self->geom, fs_type->fs_type)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ pyfs = py_ped_file_system_obj_new (fs, self);
++ return (PyObject *) pyfs;
++}
++
++
++static PyObject *
++py_ped_file_system_clobber (PyPedGeometry * self, PyObject * args)
++{
++ py_ped_exception_string_clear ();
++ if (!ped_file_system_clobber (self->geom)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_geometry_set_end (PyPedGeometry * self, PyObject * args)
++{
++ PedSector end;
++
++ if (!PyArg_ParseTuple(args, "L", &end))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_geometry_set_end (self->geom, end)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++
++static PyObject *
++py_ped_geometry_set_start (PyPedGeometry * self, PyObject * args)
++{
++ PedSector start;
++
++ if (!PyArg_ParseTuple(args, "L", &start))
++ return NULL;
++
++ py_ped_exception_string_clear ();
++ if (!ped_geometry_set_start (self->geom, start)) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ Py_INCREF(Py_None);
++ return Py_None;
++}
++
++static PyObject *
++py_ped_geometry_duplicate (PyPedGeometry * self, PyObject * args)
++{
++ PedGeometry *geom;
++
++ py_ped_exception_string_clear ();
++ if ((geom = ped_geometry_duplicate (self->geom)) == NULL) {
++ py_ped_set_error_from_ped_exception ();
++ return NULL;
++ }
++
++ return (PyObject *) py_ped_geometry_obj_new (geom, self->disk, 0);
++}
++
++static struct PyMethodDef PyPedGeometryMethods[] = {
++ { "file_system_open",
++ (PyCFunction) py_ped_file_system_open, METH_VARARGS, NULL },
++ { "file_system_probe",
++ (PyCFunction) py_ped_file_system_probe, METH_VARARGS, NULL },
++ { "file_system_create",
++ (PyCFunction) py_ped_file_system_create, METH_VARARGS, NULL },
++ { "file_system_clobber",
++ (PyCFunction) py_ped_file_system_clobber, METH_VARARGS, NULL },
++ { "set_start",
++ (PyCFunction) py_ped_geometry_set_start, METH_VARARGS, NULL },
++ { "set_end",
++ (PyCFunction) py_ped_geometry_set_end, METH_VARARGS, NULL },
++ { "duplicate",
++ (PyCFunction) py_ped_geometry_duplicate, METH_VARARGS, NULL },
++
++ { NULL, NULL, 0, NULL }
++};
++
++static PyObject *
++py_ped_geometry_getattr (PyPedGeometry * g, char * name)
++{
++
++#define RETURN_GEOM_VALUE(var) \
++ if (!strcmp (name, #var)) \
++ return PyLong_FromLongLong (g->geom->var)
++
++ RETURN_GEOM_VALUE(start);
++ RETURN_GEOM_VALUE(end);
++ RETURN_GEOM_VALUE(length);
++
++ return Py_FindMethod (PyPedGeometryMethods, (PyObject *) g, name);
++}
++
++static int
++py_ped_geometry_setattr (PyPedGeometry * g, char * name, PyObject *value)
++{
++#define SET_GEOM_VALUE(var) \
++ if (!strcmp (name, #var)) { \
++ if (!PyLong_Check (value)) { \
++ PyErr_SetString(PyExc_TypeError, \
++ "expected long long"); \
++ return -1; \
++ } \
++ g->geom->var = PyLong_AsLongLong (value); \
++ return 0; \
++ }
++ SET_GEOM_VALUE(start);
++ SET_GEOM_VALUE(end);
++ SET_GEOM_VALUE(length);
++
++ PyErr_SetString( PyExc_AttributeError, "unknown attribute" );
++ return -1;
++}
++
++
+diff -urN parted-1.4.17.orig/python/pygeometry.h parted-1.4.17/python/pygeometry.h
+--- parted-1.4.17.orig/python/pygeometry.h Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/pygeometry.h Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,37 @@
++/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ * Matt Wilson <msw@redhat.com>
++ *
++ * Copyright 2000 Red Hat, Inc.
++ *
++ * This software may be freely redistributed under the terms of the GNU
++ * library public license.
++ *
++ * You should have received a copy of the GNU Library Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++#ifndef PYGEOMETRY_H_INCLUDED
++#define PYGEOMETRY_H_INCLUDED
++
++#include <Python.h>
++
++#include "pydisk.h"
++
++typedef struct _PyPedGeometry PyPedGeometry;
++
++struct _PyPedGeometry {
++ PyObject_HEAD;
++ PedGeometry* geom;
++ PyPedDisk *disk;
++ int borrowed;
++};
++
++extern PyTypeObject PyPedGeometryType;
++
++PyPedGeometry *
++py_ped_geometry_obj_new (PedGeometry* geom, PyPedDisk *disk, int borrowed);
++
++#endif /* PYGEOMETRY_H_INCLUDED */
++
+diff -urN parted-1.4.17.orig/python/test.py parted-1.4.17/python/test.py
+--- parted-1.4.17.orig/python/test.py Wed Dec 31 19:00:00 1969
++++ parted-1.4.17/python/test.py Wed Aug 1 20:24:46 2001
+@@ -0,0 +1,128 @@
++#!/usr/bin/env python
++
++import sys
++for dir in ('.', ''):
++ try:
++ sys.path.remove(dir)
++ except ValueError:
++ pass
++sys.path = [ ".libs" ] + sys.path
++
++import parted
++
++def get_flags (part):
++ string=""
++ if not part.is_active ():
++ return string
++ first=1
++ flag = parted.partition_flag_next (0)
++ while flag:
++ if part.get_flag (flag):
++ string = string + parted.partition_flag_get_name (flag)
++ if first:
++ first = 0
++ else:
++ string = string + ", "
++ flag = parted.partition_flag_next (flag)
++ return string
++
++def do_print (disk):
++ goodparts = { parted.PARTITION_PRIMARY : None,
++ parted.PARTITION_EXTENDED : None,
++ parted.PARTITION_LOGICAL : None,
++ parted.PARTITION_FREESPACE : None }
++
++ print ("%s: %s length %ld, maximum "
++ "primary partitions: %d" % (disk.dev.path, disk.dev.model,
++ disk.dev.length, disk.max_primary_partition_count))
++
++ part = disk.next_partition()
++ if part:
++ print "Device Type Filesystem Start End Length Flags"
++ print "------ ---- ---------- ----- --- ------ -----"
++ while part:
++ if goodparts.has_key(part.type):
++ device = ""
++ fs_type_name = ""
++ if part.num > 0:
++ device = "%s%d" % (disk.dev.path,
++ part.num)
++ if part.fs_type:
++ fs_type_name = part.fs_type.name
++ flags = get_flags (part)
++ print ("%-9s %-12s %-12s %-10ld %-10ld %-10ld %7s"
++ % (device, part.type_name, fs_type_name,
++ part.geom.start, part.geom.end, part.geom.length,
++ flags))
++ part = disk.next_partition(part)
++ print
++
++def exception_handler(exception):
++ print "%s: %s" % (exception.type_string, exception.message)
++ return parted.EXCEPTION_UNHANDLED
++
++parted.exception_set_handler (exception_handler)
++dev = parted.device_get ('/tmp/fstest')
++disk = dev.disk_open ()
++
++do_print (disk)
++part = disk.get_partition (0)
++fst = part.geom.file_system_probe ()
++print "%s filesystem probed on device %s%d" % (fst.name,
++ disk.dev.path,
++ part.num)
++
++fs = part.geom.file_system_open ()
++fs.check()
++const = fs.get_resize_constraint()
++print "minimum size for this filesystem is %d sectors" % const.min_size
++print "start range from %d to %d" % (const.start_range.start, const.start_range.end)
++print "end range from %d to %d" % (const.end_range.start, const.end_range.end)
++
++new_end = fs.geom.duplicate()
++#new_end.set_end (const.min_size + 512)
++new_end.set_end (const.end_range.end)
++fs.resize (new_end)
++
++def foo():
++ disk.delete_all ()
++ do_print (disk)
++
++ fs_type = parted.file_system_type_get ("ext2")
++
++ sections = disk.dev.length / 4
++
++ # add a partition
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 0L, sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # add another...
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, sections, 2 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # another
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 2 * sections, 3 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ # another...
++ newp = disk.partition_new (parted.PARTITION_PRIMARY,
++ fs_type, 3 * sections, 4 * sections - 1)
++ newp.set_flag (parted.PARTITION_RAID, 1)
++ constraint = disk.constraint_any ()
++ disk.add_partition (newp, constraint)
++ do_print (disk)
++
++ disk.write()
++
diff --git a/sys-apps/parted/parted-1.4.14-r2.ebuild b/sys-apps/parted/parted-1.4.14-r2.ebuild
new file mode 100644
index 000000000000..59e7edc5dc45
--- /dev/null
+++ b/sys-apps/parted/parted-1.4.14-r2.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Peter Gavin <pete@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/parted/parted-1.4.14-r2.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+#P=
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="an advanced partition modification system"
+SRC_URI="ftp://ftp.gnu.org/gnu/${PN}/${A}"
+HOMEPAGE="http://www.gnu.org/software/${PN}"
+
+RDEPEND="virtual/glibc
+ >=sys-apps/e2fsprogs-1.19-r2
+ readline? ( >=sys-libs/readline-4.1-r2 )
+ nls? ( sys-devel/gettext-0.10.38 )
+ python? ( >=dev-lang/python-2.0 )"
+
+DEPEND="${RDEPEND}
+ sys-devel/autoconf
+ sys-devel/automake
+ sys-devel/libtool"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ try patch -p1 < ${FILESDIR}/${PF}-gentoo.diff
+ echo ">>> Running autoheader..."
+ try autoheader
+ echo ">>> Running libtoolize..."
+ try libtoolize -c --force
+ echo ">>> Running aclocal..."
+ try aclocal
+ echo ">>> Running autoconf..."
+ try autoconf
+ echo ">>> Running automake..."
+ try automake
+}
+
+src_compile() {
+ if [ "`use readline`" ]
+ then
+ myconf="${myconf} --with-readline"
+ fi
+ if [ "`use python`" ]
+ then
+ myconf="${myconf} --with-python"
+ fi
+ try PYTHON=/usr/bin/python ./configure --prefix=/usr --target=${CHOST} ${myconf}
+ try make
+}
+
+src_install () {
+ try make DESTDIR=${D} install
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc ABOUT-NLS AUTHORS BUGS COPYING ChangeLog NEWS README THANKS TODO
+ cd doc ; docinto doc
+ dodoc API COPYING.DOC FAT USER USER.jp
+ else
+ rm -rf ${D}/usr/share/aclocal ${D}/usr/include
+ fi
+}
diff --git a/sys-apps/parted/parted-1.4.17.ebuild b/sys-apps/parted/parted-1.4.17.ebuild
new file mode 100644
index 000000000000..375d9c83044a
--- /dev/null
+++ b/sys-apps/parted/parted-1.4.17.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Peter Gavin <pete@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/parted/parted-1.4.17.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+#P=
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="an advanced partition modification system"
+SRC_URI="ftp://ftp.gnu.org/gnu/${PN}/${A}"
+HOMEPAGE="http://www.gnu.org/software/${PN}"
+
+RDEPEND="virtual/glibc
+ >=sys-apps/e2fsprogs-1.19-r2
+ readline? ( >=sys-libs/readline-4.1-r2 )
+ nls? ( sys-devel/gettext-0.10.38 )
+ python? ( >=dev-lang/python-2.0 )"
+
+DEPEND="${RDEPEND}
+ >=sys-devel/autoconf-2.50
+ >=sys-devel/automake-1.4_p5"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+
+ # gettext was totally hosed in this package, so I had to redo it.
+ # I also added the python module
+ try patch -p1 < ${FILESDIR}/${PF}-gentoo.diff
+ echo ">>> Running aclocal..."
+ try aclocal
+ echo ">>> Running autoconf..."
+ try autoconf
+ echo ">>> Running automake..."
+ try automake
+ echo ">>> Running autoheader..."
+ try autoheader
+}
+
+src_compile() {
+ if [ "`use readline`" ]
+ then
+ myconf="${myconf} --with-readline"
+ fi
+ if [ "`use python`" ]
+ then
+ myconf="${myconf} --with-python"
+ fi
+ if [ -z "`use nls`" ]
+ then
+ myconf="${myconf} --disable-nls"
+ else
+ myconf="${myconf}"
+ fi
+ try PYTHON=/usr/bin/python ./configure --prefix=/usr --target=${CHOST} ${myconf}
+ cd ${S}
+ try make
+}
+
+src_install () {
+ try make DESTDIR=${D} install
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc ABOUT-NLS AUTHORS BUGS COPYING ChangeLog NEWS README THANKS TODO
+ cd doc ; docinto doc
+ dodoc API COPYING.DOC FAT USER USER.jp
+ else
+ rm -rf ${D}/usr/share ${D}/usr/include ${D}/usr/lib/lib*.{a,la}
+ fi
+}
diff --git a/sys-apps/procps/files/digest-procps-2.0.6-r2 b/sys-apps/procps/files/digest-procps-2.0.6-r2
new file mode 100644
index 000000000000..765fe621dd40
--- /dev/null
+++ b/sys-apps/procps/files/digest-procps-2.0.6-r2
@@ -0,0 +1 @@
+MD5 2e6e156f0791b0e209d05aaf7204a219 procps-2.0.6.tar.gz
diff --git a/sys-apps/procps/files/digest-procps-2.0.7-r4 b/sys-apps/procps/files/digest-procps-2.0.7-r4
new file mode 100644
index 000000000000..47a95728f6a2
--- /dev/null
+++ b/sys-apps/procps/files/digest-procps-2.0.7-r4
@@ -0,0 +1 @@
+MD5 bd8d68a9fd0c3f37365f924e75009c8a procps-2.0.7.tar.gz
diff --git a/sys-apps/procps/procps-2.0.6-r2.ebuild b/sys-apps/procps/procps-2.0.6-r2.ebuild
new file mode 100644
index 000000000000..b98fb28dc19c
--- /dev/null
+++ b/sys-apps/procps/procps-2.0.6-r2.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Achim Gottinger <achim@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/procps/procps-2.0.6-r2.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="Standard informational utilities and process-handling tools"
+SRC_URI="ftp://people.redhat.com/johnsonm/procps/${A}"
+DEPEND="virtual/glibc >=sys-libs/ncurses-5.2-r2"
+
+src_unpack() {
+
+ unpack ${A}
+
+ cd ${S}
+ patch -p0 < ${FILESDIR}/${PF}.diff
+
+ mv Makefile Makefile.orig
+ sed -e "s/-O3/${CFLAGS}/" -e 's/all: config/all: /' \
+ -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+ cd ${S}/ps
+ mv Makefile Makefile.orig
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+ cd ${S}/proc
+ mv Makefile Makefile.orig
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+}
+
+src_compile() {
+ try make ${MAKEOPTS}
+}
+
+src_install() {
+
+ dodir /usr/bin
+ dodir /sbin
+ dodir /usr/X11R6/bin
+ dodir /usr/share/man/man{1,5,8}
+ dodir /lib
+ dodir /bin
+ try make DESTDIR=${D} install
+
+ preplib /
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc BUGS COPYING COPYING.LIB NEWS TODO
+ docinto proc
+ dodoc proc/COPYING
+ docinto ps
+ dodoc ps/COPYING ps/HACKING
+ else
+ rm -rf ${D}/usr/X11R6
+ rm -rf ${D}/usr/share
+ fi
+}
diff --git a/sys-apps/procps/procps-2.0.7-r3.ebuild b/sys-apps/procps/procps-2.0.7-r3.ebuild
index 5ed1687af6e2..1e399b6ecf10 100644
--- a/sys-apps/procps/procps-2.0.7-r3.ebuild
+++ b/sys-apps/procps/procps-2.0.7-r3.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/procps/procps-2.0.7-r3.ebuild,v 1.2 2001/06/09 14:11:57 achim Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/procps/procps-2.0.7-r3.ebuild,v 1.3 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -20,15 +20,15 @@ src_unpack() {
mv Makefile Makefile.orig
sed -e "s/-O3/${CFLAGS}/" -e 's/all: config/all: /' \
- -e "s:--strip::" Makefile.orig > Makefile
+ -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
cd ${S}/ps
mv Makefile Makefile.orig
- sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" Makefile.orig > Makefile
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
cd ${S}/proc
mv Makefile Makefile.orig
- sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" Makefile.orig > Makefile
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
}
diff --git a/sys-apps/procps/procps-2.0.7-r4.ebuild b/sys-apps/procps/procps-2.0.7-r4.ebuild
new file mode 100644
index 000000000000..a32a6efe0eb7
--- /dev/null
+++ b/sys-apps/procps/procps-2.0.7-r4.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Achim Gottinger <achim@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/procps/procps-2.0.7-r4.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="Standard informational utilities and process-handling tools"
+SRC_URI="ftp://people.redhat.com/johnsonm/procps/${A}"
+RDEPEND=">=sys-libs/ncurses-5.2-r2"
+DEPEND="${RDEPEND}
+ >=sys-devel/gettext-0.10.35"
+
+src_unpack() {
+
+ unpack ${A}
+
+ cd ${S}
+ patch -p1 < ${FILESDIR}/${P}.diff
+
+ mv Makefile Makefile.orig
+ sed -e "s/-O3/${CFLAGS}/" -e 's/all: config/all: /' \
+ -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+ cd ${S}/ps
+ mv Makefile Makefile.orig
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+ cd ${S}/proc
+ mv Makefile Makefile.orig
+ sed -e "s/-O2/${CFLAGS}/" -e "s:--strip::" -e 's:/usr/man:/usr/share/man:' Makefile.orig > Makefile
+
+}
+
+src_compile() {
+ try make ${MAKEOPTS}
+}
+
+src_install() {
+
+ dodir /usr/bin
+ dodir /sbin
+ dodir /usr/X11R6/bin
+ dodir /usr/share/man/man{1,5,8}
+ dodir /lib
+ dodir /bin
+ try make DESTDIR=${D} MANDIR=/usr/share/man install
+
+ preplib /
+
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc BUGS COPYING COPYING.LIB NEWS TODO
+ docinto proc
+ dodoc proc/COPYING
+ docinto ps
+ dodoc ps/COPYING ps/HACKING
+ else
+ rm -rf ${D}/usr/X11R6 ${D}/usr/share
+ fi
+}
+
+
+
diff --git a/sys-apps/psmisc/files/digest-psmisc-19-r3 b/sys-apps/psmisc/files/digest-psmisc-19-r3
new file mode 100644
index 000000000000..f5049b5a2da9
--- /dev/null
+++ b/sys-apps/psmisc/files/digest-psmisc-19-r3
@@ -0,0 +1 @@
+MD5 1d56ac6c32b657fdf8f780084b095932 psmisc-19.tar.gz
diff --git a/sys-apps/psmisc/psmisc-19-r3.ebuild b/sys-apps/psmisc/psmisc-19-r3.ebuild
new file mode 100644
index 000000000000..bb467207b9c0
--- /dev/null
+++ b/sys-apps/psmisc/psmisc-19-r3.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/psmisc/psmisc-19-r3.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+#from Debian ;)
+
+A=${P}.tar.gz
+S=${WORKDIR}/psmisc
+DESCRIPTION="Handy process-related utilities from Debian"
+SRC_URI="ftp://lrcftp.epfl.ch/pub/linux/local/psmisc/"${A}
+DEPEND="virtual/glibc >=sys-libs/ncurses-5.2-r2"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ cp Makefile Makefile.orig
+ sed -e "s/-ltermcap/-lncurses/g" -e "s/-O/${CFLAGS}/" -e "s:-Wpointer-arith::" Makefile.orig > Makefile
+}
+
+src_compile() {
+ try pmake
+}
+
+src_install() {
+ if [ "`use bootcd`" ]
+ then
+ into /
+ fi
+ dobin killall pstree
+ dosym killall /usr/bin/pidof
+
+ into /
+ dobin fuser
+
+ if [ -z "`use bootcd`" ]
+ then
+ doman *.1
+ dodoc CHANGES COPYING README VERSION psmisc-19.lsm
+ fi
+}
diff --git a/sys-apps/reiserfs-utils/files/digest-reiserfs-utils-3.6.25-r7 b/sys-apps/reiserfs-utils/files/digest-reiserfs-utils-3.6.25-r7
new file mode 100644
index 000000000000..76ec362bf324
--- /dev/null
+++ b/sys-apps/reiserfs-utils/files/digest-reiserfs-utils-3.6.25-r7
@@ -0,0 +1 @@
+MD5 48e4c6c7ea0b7a4199e9c3310bbf19ce reiserfsprogs-3.x.0j.tar.gz
diff --git a/sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild b/sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild
new file mode 100644
index 000000000000..fa0e6aa6ac6c
--- /dev/null
+++ b/sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Your Name <your email>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/reiserfs-utils/reiserfs-utils-3.6.25-r7.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/reiserfsprogs-3.x.0j
+DESCRIPTION="Reiserfs Utilities"
+SRC_URI="ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.x.0j.tar.gz"
+HOMEPAGE="http://www.namesys.com"
+
+DEPEND="virtual/glibc"
+
+src_compile() {
+ cd ${S}
+ try ./configure --host=${CHOST}
+ try make
+}
+
+src_install () {
+ try make DESTDIR=${D} install
+ dodir /usr/share
+ cd ${D}
+ mv man usr/share
+ cd ${D}/sbin
+ ln -s fsck.reiserfs reiserfsck
+ if [ "`use bootcd`" ]
+ then
+ rm -rf ${D}/usr
+ fi
+}
+
diff --git a/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild b/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild
index c2853ea08510..95a8e41c688d 100644
--- a/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild
+++ b/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild
@@ -2,7 +2,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/sh-utils/sh-utils-2.0j-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -29,10 +29,10 @@ src_compile() {
myconf="--disable-nls"
fi
- try CFLAGS=\"${CFLAGS}\" ./configure --host=${CHOST} --build=${CHOST} \
+ CFLAGS="${CFLAGS}" try ./configure --host=${CHOST} --build=${CHOST} \
--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info \
--without-included-regex ${myconf}
-
+
if [ -z "`use static`" ]
then
try make ${MAKEOPTS}
@@ -42,7 +42,6 @@ src_compile() {
}
src_install() {
-
try make prefix=${D}/usr mandir=${D}/usr/share/man infodir=${D}/usr/share/info install
rm -rf ${D}/usr/lib
dodir /bin
@@ -52,14 +51,13 @@ src_install() {
if [ -z "`use build`" ] && [ -z "`use bootcd`" ]
then
# We must use hostname from net-base
- rm hostname
- cd ${S}
- dodoc AUTHORS COPYING ChangeLog ChangeLog.0 \
- NEWS README THANKS TODO
- else
- rm -rf ${D}/usr/lib ${D}/usr/share
- fi
-
+ rm ${D}/usr/bin/hostname
+ cd ${S}
+ dodoc AUTHORS COPYING ChangeLog ChangeLog.0 \
+ NEWS README THANKS TODO
+ else
+ rm -rf ${D}/usr/share
+ fi
}
diff --git a/sys-apps/shadow/shadow-20001016-r4.ebuild b/sys-apps/shadow/shadow-20001016-r4.ebuild
index 89ebb72f6aa6..558b4a392c1c 100644
--- a/sys-apps/shadow/shadow-20001016-r4.ebuild
+++ b/sys-apps/shadow/shadow-20001016-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/shadow/shadow-20001016-r4.ebuild,v 1.3 2001/08/04 16:53:56 drobbins Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/shadow/shadow-20001016-r4.ebuild,v 1.4 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -61,19 +61,23 @@ src_install() {
#Now using a new securetty with devfs device names added
#(compat names kept for non-devfs compatibility)
doins ${FILESDIR}/securetty
-
- cd pam.d
- insinto /etc/pam.d
- insopts -m0644
- doins ${FILESDIR}/shadow
- newins ${FILESDIR}/shadow groupadd
- newins ${FILESDIR}/shadow useradd
-
- cd ${S}/doc
- dodoc ANNOUNCE INSTALL LICENSE README WISHLIST
- docinto txt
- dodoc HOWTO LSM README.* *.txt
-
+
+ cd pam.d
+ insinto /etc/pam.d
+ insopts -m0644
+ doins ${FILESDIR}/shadow
+ newins ${FILESDIR}/shadow groupadd
+ newins ${FILESDIR}/shadow useradd
+
+ if [ -z "`use bootcd`" ]
+ then
+ cd ${S}/doc
+ dodoc ANNOUNCE INSTALL LICENSE README WISHLIST
+ docinto txt
+ dodoc HOWTO LSM README.* *.txt
+ else
+ rm -rf ${D}/usr/share ${D}/usr/lib/lib*.{a,la}
+ fi
}
diff --git a/sys-apps/sysvinit/files/digest-sysvinit-2.78-r4 b/sys-apps/sysvinit/files/digest-sysvinit-2.78-r4
new file mode 100644
index 000000000000..762e3231d98c
--- /dev/null
+++ b/sys-apps/sysvinit/files/digest-sysvinit-2.78-r4
@@ -0,0 +1 @@
+MD5 cf40920a0423b05479504d79c0bd70ea sysvinit-2.78.tar.gz
diff --git a/sys-apps/sysvinit/sysvinit-2.78-r4.ebuild b/sys-apps/sysvinit/sysvinit-2.78-r4.ebuild
new file mode 100644
index 000000000000..99fa516dcd7e
--- /dev/null
+++ b/sys-apps/sysvinit/sysvinit-2.78-r4.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel robbins <achim@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/sysvinit/sysvinit-2.78-r4.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}/src
+DESCRIPTION="System initialization stuff"
+SRC_URI="ftp://metalab.unc.edu/pub/Linux/system/daemons/init/${A}"
+DEPEND="virtual/glibc"
+
+src_unpack() {
+
+ unpack ${A}
+ cd ${S}
+ mv Makefile Makefile.orig
+ sed -e "s/-O2/${CFLAGS}/" Makefile.orig > Makefile
+}
+
+src_compile() {
+
+ try pmake LDFLAGS=""
+ cd ../contrib
+ try gcc ${CFLAGS} start-stop-daemon.c -o start-stop-daemon
+}
+
+
+src_install() {
+
+ into /
+ dosbin halt init killall5 runlevel shutdown sulogin
+ dosym init /sbin/telinit
+ dobin last mesg utmpdump wall
+ dosym killall5 /sbin/pidof
+ dosym halt /sbin/reboot
+ cd ../contrib
+ dosbin start-stop-daemon
+ if [ -z "`use bootcd`" ]
+ then
+ into /usr
+ cd ../man
+ doman *.[1-9]
+ cd ..
+ dodoc README doc/* contrib/start-stop-daemon.README
+ else
+ rm -rf ${D}/usr/share
+ fi
+
+}
diff --git a/sys-apps/tar/files/tar-1.13.19-r1-gentoo.diff b/sys-apps/tar/files/tar-1.13.19-r1-gentoo.diff
new file mode 100644
index 000000000000..26c0d63bedc1
--- /dev/null
+++ b/sys-apps/tar/files/tar-1.13.19-r1-gentoo.diff
@@ -0,0 +1,40 @@
+*** misc.c.orig Sat Jan 13 08:59:29 2001
+--- misc.c Mon Jul 9 15:45:09 2001
+***************
+*** 201,217 ****
+ {
+ char const *p = name + FILESYSTEM_PREFIX_LEN (name);
+
+ for (;;)
+ {
+! if (p[0] == '.' && p[1] == '.' && (ISSLASH (p[2]) || !p[2]))
+ return 1;
+
+ do
+ {
+! if (! *p++)
+ return 0;
+ }
+! while (! ISSLASH (*p));
+ }
+ }
+
+--- 201,218 ----
+ {
+ char const *p = name + FILESYSTEM_PREFIX_LEN (name);
+
++ if(ISSLASH (*p) ) return 1;
+ for (;;)
+ {
+! if (p[0] == '.' && p[1] == '.' && (!p[2] || ISSLASH (p[2])))
+ return 1;
+
+ do
+ {
+! if (! *p)
+ return 0;
+ }
+! while (! ISSLASH (*p++));
+ }
+ }
+
diff --git a/sys-apps/tar/tar-1.13.19-r1.ebuild b/sys-apps/tar/tar-1.13.19-r1.ebuild
index aed64224a93d..d6b60dda0660 100644
--- a/sys-apps/tar/tar-1.13.19-r1.ebuild
+++ b/sys-apps/tar/tar-1.13.19-r1.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/tar/tar-1.13.19-r1.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/tar/tar-1.13.19-r1.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A=${P}.tar.gz
S=${WORKDIR}/${P}
@@ -18,7 +18,7 @@ RDEPEND="virtual/glibc"
src_unpack() {
unpack ${A}
cd ${S}/src
- patch -p0 < ${FILESDIR}/tar-1.13.19.patch
+ patch -p0 < ${FILESDIR}/${PF}-gentoo.diff
}
src_compile() {
@@ -57,5 +57,3 @@ src_install() {
fi
}
-
-
diff --git a/sys-apps/util-linux/files/digest-util-linux-2.11g-r1 b/sys-apps/util-linux/files/digest-util-linux-2.11g-r1
new file mode 100644
index 000000000000..b0cb31eb9a9d
--- /dev/null
+++ b/sys-apps/util-linux/files/digest-util-linux-2.11g-r1
@@ -0,0 +1 @@
+MD5 d3f23c93f96b94cf339b233fe3cbc7ae util-linux-2.11g.tar.gz
diff --git a/sys-apps/util-linux/util-linux-2.11g-r1.ebuild b/sys-apps/util-linux/util-linux-2.11g-r1.ebuild
new file mode 100644
index 000000000000..153c98f7f606
--- /dev/null
+++ b/sys-apps/util-linux/util-linux-2.11g-r1.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/util-linux/util-linux-2.11g-r1.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/${P}
+DESCRIPTION="Various useful Linux utilities"
+SRC_URI="ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/${P}.tar.gz"
+
+DEPEND="virtual/glibc >=sys-libs/ncurses-5.2-r2"
+
+RDEPEND="$DEPEND
+ sys-devel/perl"
+
+src_unpack() {
+
+ unpack ${P}.tar.gz
+ cd ${S}
+ cp MCONFIG MCONFIG.orig
+ sed -e "s:-pipe -O2 \$(CPUOPT) -fomit-frame-pointer:${CFLAGS}:" \
+ -e "s:CPU=.*:CPU=${CHOST%%-*}:" \
+ -e "s:HAVE_PAM=no:HAVE_PAM=yes:" \
+ -e "s:HAVE_SLN=no:HAVE_SLN=yes:" \
+ -e "s:HAVE_TSORT=no:HAVE_TSORT=yes:" \
+ -e "s:usr/man:usr/share/man:" \
+ -e "s:usr/info:usr/share/info:" \
+ MCONFIG.orig > MCONFIG.orig2
+ if [ "`use simpleinit`" ]
+ then
+ sed -e "s:HAVE_SYSVINIT=yes:HAVE_SYSVINIT=no:" \
+ -e "s:HAVE_SYSVINIT_UTILS=yes:HAVE_SYSVINIT_UTILS=no:" \
+ MCONFIG.orig2 > MCONFIG
+ else
+ mv MCONFIG.orig2 MCONFIG
+ fi
+
+}
+
+src_compile() {
+
+ try ./configure
+ try make ${MAKEOPTS} LDFLAGS=""
+}
+
+
+src_install() {
+
+ try make DESTDIR=${D} install
+
+ if [ -z "`use bootcd`" ]
+ then
+ dodoc HISTORY MAINTAINER README VERSION
+ docinto licenses
+ dodoc licenses/* HISTORY
+ docinto examples
+ dodoc example.files/*
+ else
+ rm -rf ${D}/usr/games
+ rm -rf ${D}/usr/share/{doc,man,info,misc/getopt,locale}
+ fi
+}
+
+
diff --git a/sys-devel/gettext/files/digest-gettext-0.10.39 b/sys-devel/gettext/files/digest-gettext-0.10.39
new file mode 100644
index 000000000000..d8e7c8d32b03
--- /dev/null
+++ b/sys-devel/gettext/files/digest-gettext-0.10.39
@@ -0,0 +1 @@
+MD5 dbf95acae3cd03c85c86efed85969d30 gettext-0.10.39.tar.gz
diff --git a/sys-devel/gettext/gettext-0.10.39.ebuild b/sys-devel/gettext/gettext-0.10.39.ebuild
new file mode 100644
index 000000000000..fb6251ee819e
--- /dev/null
+++ b/sys-devel/gettext/gettext-0.10.39.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gettext/gettext-0.10.39.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+A=${P}.tar.gz
+S=${WORKDIR}/${P}
+DESCRIPTION="GNU locale utilities"
+SRC_URI="ftp://gatekeeper.dec.com/pub/GNU/gettext/${A}
+ ftp://prep.ai.mit.edu/gnu/gettext/${A}"
+HOMEPAGE="http://www.gnu.org/software/gettext/gettext.html"
+
+if [ -z "`use build`" ] ; then
+DEPEND="virtual/glibc"
+fi
+
+src_compile() {
+ local myconf
+ if [ -z "`use nls`" ]
+ then
+ myconf="--disable-nls"
+ fi
+ try ./configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man \
+ --with-included-gettext --disable-shared --host=${CHOST} ${myconf}
+ try make ${MAKEOPTS}
+}
+
+src_install() {
+
+ try make prefix=${D}/usr infodir=${D}/usr/share/info \
+ mandir=${D}/usr/share/man \
+ lispdir=${D}/usr/share/emacs/site-lisp install
+
+ dodoc AUTHORS BUGS COPYING ChangeLog DISCLAIM NEWS README* THANKS TODO
+ if [ -d ${D}/usr/doc/gettext ] ; then
+ mv ${D}/usr/doc/gettext ${D}/usr/share/doc/${PF}/html
+ rm -rf ${D}/usr/doc
+ fi
+ exeopts -m0755
+ exeinto /usr/bin
+ doexe misc/gettextize
+}
+
+
diff --git a/sys-devel/spython/files/spython-2.0-r7-gentoo.diff b/sys-devel/spython/files/spython-2.0-r7-gentoo.diff
new file mode 100644
index 000000000000..0aba7fdd0980
--- /dev/null
+++ b/sys-devel/spython/files/spython-2.0-r7-gentoo.diff
@@ -0,0 +1,477 @@
+diff -urP Python-2.0.orig/Makefile.in Python-2.0/Makefile.in
+--- Python-2.0.orig/Makefile.in Mon Oct 16 17:50:06 2000
++++ Python-2.0/Makefile.in Wed Jul 11 20:03:34 2001
+@@ -73,11 +73,11 @@
+ SCRIPTDIR= $(prefix)/lib
+
+ # Detailed destination directories
+-BINLIBDEST= $(LIBDIR)/python$(VERSION)
+-LIBDEST= $(SCRIPTDIR)/python$(VERSION)
+-INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
+-CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION)
+-LIBP= $(LIBDIR)/python$(VERSION)
++BINLIBDEST= $(LIBDIR)/spython$(VERSION)
++LIBDEST= $(SCRIPTDIR)/spython$(VERSION)
++INCLUDEPY= $(INCLUDEDIR)/spython$(VERSION)
++CONFINCLUDEPY= $(CONFINCLUDEDIR)/spython$(VERSION)
++LIBP= $(LIBDIR)/spython$(VERSION)
+
+ # Symbols used for using shared libraries
+ SO= @SO@
+@@ -129,14 +129,14 @@
+ # Compilation flags for getbuildinfo.c only
+ CFLAGS= $(OPT) -I. $(DEFS)
+
+-LIBRARY= libpython$(VERSION).a
++LIBRARY= libspython$(VERSION).a
+ LDLIBRARY= @LDLIBRARY@
+
+ # Default target
+-all: $(LIBRARY) python$(EXE) sharedmods
++all: $(LIBRARY) spython$(EXE) sharedmods
+
+ # Build the interpreter
+-python$(EXE): $(LIBRARY) buildno Modules/python.o
++spython$(EXE): $(LIBRARY) buildno Modules/python.o
+ expr `cat buildno` + 1 >buildno1
+ mv -f buildno1 buildno
+ $(CC) -c $(CFLAGS) -DBUILD=`cat buildno` \
+@@ -155,7 +155,7 @@
+ echo 0 >buildno
+
+ # Build the shared modules
+-sharedmods: python$(EXE)
++sharedmods: spython$(EXE)
+ cd Modules; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
+ prefix="$(prefix)" exec_prefix="$(exec_prefix)" \
+ sharedmods
+@@ -169,7 +169,7 @@
+ (cd $$i; $(MAKE) VERSION="$(VERSION)" add2lib); done
+
+ # This rule is only here for DG/UX and BeOS!!!
+-libpython$(VERSION).so: $(LIBRARY)
++libspython$(VERSION).so: $(LIBRARY)
+ case `uname -s | tr -d '/ ' | tr '[A-Z]' '[a-z]'` in \
+ *dgux*) \
+ test -d dgux || mkdir dgux; \
+@@ -182,7 +182,7 @@
+ esac
+
+ # This rule is here for OPENSTEP/Rhapsody/MacOSX
+-libpython$(VERSION).dylib: $(LIBRARY)
++libspython$(VERSION).dylib: $(LIBRARY)
+ libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) -framework System @LIBTOOL_CRUFT@
+
+ $(SUBDIRS): Makefiles
+@@ -210,7 +210,7 @@
+ # Test the interpreter (twice, once without .pyc files, once with)
+ TESTOPTS= -l
+ TESTPROG= $(srcdir)/Lib/test/regrtest.py
+-TESTPYTHON= ./python$(EXE) -tt
++TESTPYTHON= ./spython$(EXE) -tt
+ test: all
+ -rm -f $(srcdir)/Lib/test/*.py[co]
+ -PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
+@@ -224,15 +224,15 @@
+
+ # Install the interpreter (by creating a hard link to python$(VERSION))
+ bininstall: altbininstall
+- -if test -f $(BINDIR)/python$(EXE); \
+- then rm -f $(BINDIR)/python$(EXE); \
++ -if test -f $(BINDIR)/spython$(EXE); \
++ then rm -f $(BINDIR)/spython$(EXE); \
+ else true; \
+ fi
+- (cd $(BINDIR); $(LN) python$(VERSION)$(EXE) python$(EXE))
++ (cd $(BINDIR); $(LN) spython$(VERSION)$(EXE) spython$(EXE))
+
+ # Install the interpreter with $(VERSION) affixed
+ # This goes into $(exec_prefix)
+-altbininstall: python$(EXE)
++altbininstall: spython$(EXE)
+ @for i in $(BINDIR); \
+ do \
+ if test ! -d $$i; then \
+@@ -242,9 +242,9 @@
+ else true; \
+ fi; \
+ done
+- $(INSTALL_PROGRAM) python$(EXE) $(BINDIR)/python$(VERSION)$(EXE)
+- if test -f libpython$(VERSION).so; then \
+- $(INSTALL_DATA) libpython$(VERSION).so $(LIBDIR); \
++ $(INSTALL_PROGRAM) spython$(EXE) $(BINDIR)/spython$(VERSION)$(EXE)
++ if test -f libspython$(VERSION).so; then \
++ $(INSTALL_DATA) libspython$(VERSION).so $(LIBDIR)/libspython$(VERSION).so; \
+ else true; \
+ fi
+
+@@ -260,7 +260,7 @@
+ fi; \
+ done
+ $(INSTALL_DATA) $(srcdir)/Misc/python.man \
+- $(MANDIR)/man1/python.1
++ $(MANDIR)/man1/spython.1
+
+ # Install the library
+ PLATDIR= plat-$(MACHDEP)
+@@ -268,7 +268,7 @@
+ XMLLIBSUBDIRS= xml xml/dom xml/parsers xml/sax
+ LIBSUBDIRS= lib-old lib-tk site-packages test test/output encodings \
+ distutils distutils/command $(XMLLIBSUBDIRS) curses $(MACHDEPS)
+-libinstall: python $(srcdir)/Lib/$(PLATDIR)
++libinstall: spython $(srcdir)/Lib/$(PLATDIR)
+ @for i in $(SCRIPTDIR) $(LIBDEST); \
+ do \
+ if test ! -d $$i; then \
+@@ -326,9 +326,9 @@
+ done
+ $(INSTALL_DATA) $(srcdir)/LICENSE $(LIBDEST)/LICENSE.txt
+ PYTHONPATH=$(LIBDEST) \
+- ./python$(EXE) -tt $(LIBDEST)/compileall.py $(LIBDEST)
++ ./spython$(EXE) -tt $(LIBDEST)/compileall.py $(LIBDEST)
+ PYTHONPATH=$(LIBDEST) \
+- ./python$(EXE) -O $(LIBDEST)/compileall.py $(LIBDEST)
++ ./spython$(EXE) -O $(LIBDEST)/compileall.py $(LIBDEST)
+
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+@@ -457,7 +457,7 @@
+ else $(SHELL) $(srcdir)/configure $(WITH); \
+ fi
+
+-.PRECIOUS: config.status python$(EXE)
++.PRECIOUS: config.status spython$(EXE)
+
+ # Rerun configure with the same options as it was run last time,
+ # provided the config.status script exists
+@@ -509,7 +509,7 @@
+ done
+
+ localclobber: localclean
+- -rm -f tags TAGS python$(EXE) $(LIBRARY) $(LDLIBRARY) *.o
++ -rm -f tags TAGS spython$(EXE) $(LIBRARY) $(LDLIBRARY) *.o
+ -rm -f config.log config.cache config.h
+
+ clobber: localclobber
+diff -urP Python-2.0.orig/Misc/python.man Python-2.0/Misc/python.man
+--- Python-2.0.orig/Misc/python.man Mon Oct 16 17:49:35 2000
++++ Python-2.0/Misc/python.man Wed Jul 11 20:26:32 2001
+@@ -1,8 +1,8 @@
+-.TH PYTHON "1" "5 September, 2000"
++.TH SPYTHON "1" "5 September, 2000"
+ .SH NAME
+-python \- an interpreted, interactive, object-oriented programming language
++spython \- an interpreted, interactive, object-oriented programming language (statically linked)
+ .SH SYNOPSIS
+-.B python
++.B spython
+ [
+ .B \-d
+ ]
+@@ -179,20 +179,20 @@
+ conventions; ${prefix} and ${exec_prefix} are installation-dependent
+ and should be interpreted as for GNU software; they may be the same.
+ The default for both is \fI/usr/local\fP.
+-.IP \fI${exec_prefix}/bin/python\fP
++.IP \fI${exec_prefix}/bin/spython\fP
+ Recommended location of the interpreter.
+ .PP
+-.I ${prefix}/lib/python<version>
++.I ${prefix}/lib/spython<version>
+ .br
+-.I ${exec_prefix}/lib/python<version>
++.I ${exec_prefix}/lib/spython<version>
+ .RS
+ Recommended locations of the directories containing the standard
+ modules.
+ .RE
+ .PP
+-.I ${prefix}/include/python<version>
++.I ${prefix}/include/spython<version>
+ .br
+-.I ${exec_prefix}/include/python<version>
++.I ${exec_prefix}/include/spython<version>
+ .RS
+ Recommended locations of the directories containing the include files
+ needed for developing Python extensions and embedding the
+@@ -204,8 +204,8 @@
+ .SH ENVIRONMENT VARIABLES
+ .IP PYTHONHOME
+ Change the location of the standard Python libraries. By default, the
+-libraries are searched in ${prefix}/lib/python<version> and
+-${exec_prefix}/lib/python<version>, where ${prefix} and ${exec_prefix}
++libraries are searched in ${prefix}/lib/spython<version> and
++${exec_prefix}/lib/spython<version>, where ${prefix} and ${exec_prefix}
+ are installation-dependent directories, both defaulting to
+ \fI/usr/local\fP. When $PYTHONHOME is set to a single directory, its value
+ replaces both ${prefix} and ${exec_prefix}. To specify different values
+@@ -216,7 +216,7 @@
+ pathnames separated by colons.
+ Non-existant directories are silently ignored.
+ The default search path is installation dependent, but generally
+-begins with ${prefix}/lib/python<version> (see PYTHONHOME above).
++begins with ${prefix}/lib/spython<version> (see PYTHONHOME above).
+ The default search path is always appended to $PYTHONPATH.
+ If a script argument is given, the directory containing the script is
+ inserted in the path in front of $PYTHONPATH.
+diff -urP Python-2.0.orig/Modules/Makefile.pre.in Python-2.0/Modules/Makefile.pre.in
+--- Python-2.0.orig/Modules/Makefile.pre.in Mon Oct 16 17:49:33 2000
++++ Python-2.0/Modules/Makefile.pre.in Wed Jul 11 19:43:14 2001
+@@ -52,10 +52,10 @@
+ SCRIPTDIR= $(prefix)/lib
+
+ # Detailed destination directories
+-BINLIBDEST= $(LIBDIR)/python$(VERSION)
+-LIBDEST= $(SCRIPTDIR)/python$(VERSION)
+-INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
+-LIBP= $(LIBDIR)/python$(VERSION)
++BINLIBDEST= $(LIBDIR)/spython$(VERSION)
++LIBDEST= $(SCRIPTDIR)/spython$(VERSION)
++INCLUDEPY= $(INCLUDEDIR)/spython$(VERSION)
++LIBP= $(LIBDIR)/spython$(VERSION)
+
+ # Symbols used for using shared libraries
+ SO= @SO@
+@@ -103,7 +103,7 @@
+
+ SYSLIBS= $(LIBM) $(LIBC)
+
+-LIBRARY= ../libpython$(VERSION).a
++LIBRARY= ../libspython$(VERSION).a
+ LDLIBRARY= ../@LDLIBRARY@
+
+ # === Rules ===
+@@ -124,11 +124,11 @@
+ # This target is used by the master Makefile to link the final binary.
+ link: $(MAINOBJ)
+ $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) $(MAINOBJ) \
+- $(LDLIBRARY) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python$(EXE) $(LDLAST)
+- mv python$(EXE) ../python$(EXE)
++ $(LDLIBRARY) $(MODLIBS) $(LIBS) $(SYSLIBS) -o spython$(EXE) $(LDLAST)
++ mv spython$(EXE) ../spython$(EXE)
+
+ clean:
+- -rm -f *.o python$(EXE) core *~ [@,#]* *.old *.orig *.rej
++ -rm -f *.o spython$(EXE) core *~ [@,#]* *.old *.orig *.rej
+ -rm -f add2lib hassignal
+
+ clobber: clean
+@@ -183,10 +183,10 @@
+ $(MKDEP) $(CFLAGS) `echo $(OBJS) | tr ' ' '\012' | \
+ sed 's|\(.*\)\.o|$(srcdir)/\1.c|'`
+
+-.PRECIOUS: ../python$(EXE)
++.PRECIOUS: ../spython$(EXE)
+
+ glmodule.c: $(srcdir)/cgen.py $(srcdir)/cstubs
+- python $(srcdir)/cgen.py <$(srcdir)/cstubs >glmodule.c
++ spython $(srcdir)/cgen.py <$(srcdir)/cstubs >glmodule.c
+
+ almodule.o: almodule.c
+ arraymodule.o: arraymodule.c
+diff -urP Python-2.0.orig/Modules/getpath.c Python-2.0/Modules/getpath.c
+--- Python-2.0.orig/Modules/getpath.c Mon Oct 16 17:49:33 2000
++++ Python-2.0/Modules/getpath.c Wed Jul 11 19:41:18 2001
+@@ -115,8 +115,8 @@
+
+ #ifndef PYTHONPATH
+ /* I know this isn't K&R C, but the Makefile specifies it anyway */
+-#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
+- EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
++#define PYTHONPATH PREFIX "/lib/spython" VERSION ":" \
++ EXEC_PREFIX "/lib/spython" VERSION "/lib-dynload"
+ #endif
+
+ #ifndef LANDMARK
+@@ -127,7 +127,7 @@
+ static char exec_prefix[MAXPATHLEN+1];
+ static char progpath[MAXPATHLEN+1];
+ static char *module_search_path = NULL;
+-static char lib_python[] = "lib/python" VERSION;
++static char lib_python[] = "lib/spython" VERSION;
+
+ static void
+ reduce(char *dir)
+diff -urP Python-2.0.orig/Objects/Makefile.in Python-2.0/Objects/Makefile.in
+--- Python-2.0.orig/Objects/Makefile.in Mon Oct 16 17:49:24 2000
++++ Python-2.0/Objects/Makefile.in Wed Jul 11 19:37:39 2001
+@@ -48,7 +48,7 @@
+ tupleobject.c typeobject.c \
+ unicodeobject.c unicodectype.c
+
+-LIBRARY= ../libpython$(VERSION).a
++LIBRARY= ../libspython$(VERSION).a
+
+ # === Rules ===
+
+diff -urP Python-2.0.orig/Parser/Makefile.in Python-2.0/Parser/Makefile.in
+--- Python-2.0.orig/Parser/Makefile.in Mon Oct 16 17:49:29 2000
++++ Python-2.0/Parser/Makefile.in Wed Jul 11 19:29:23 2001
+@@ -48,7 +48,7 @@
+
+ PGEN= pgen
+
+-LIBRARY= ../libpython$(VERSION).a
++LIBRARY= ../libspython$(VERSION).a
+
+ # === Rules ===
+
+diff -urP Python-2.0.orig/Parser/intrcheck.c Python-2.0/Parser/intrcheck.c
+--- Python-2.0.orig/Parser/intrcheck.c Mon Oct 16 17:49:30 2000
++++ Python-2.0/Parser/intrcheck.c Wed Jul 11 19:31:05 2001
+@@ -132,7 +132,7 @@
+ {
+ extern void Py_Exit(int);
+ static char message[] =
+-"python: to interrupt a truly hanging Python program, interrupt once more.\n";
++"spython: to interrupt a truly hanging Python program, interrupt once more.\n";
+ switch (interrupted++) {
+ case 0:
+ break;
+diff -urP Python-2.0.orig/Python/Makefile.in Python-2.0/Python/Makefile.in
+--- Python-2.0.orig/Python/Makefile.in Mon Oct 16 17:49:29 2000
++++ Python-2.0/Python/Makefile.in Wed Jul 11 19:29:55 2001
+@@ -51,7 +51,7 @@
+ $(LIBOBJS)
+ OBJS= $(AROBJS) sigcheck.o
+
+-LIBRARY= ../libpython$(VERSION).a
++LIBRARY= ../libspython$(VERSION).a
+
+
+ # === Rules ===
+diff -urP Python-2.0.orig/Python/dynload_aix.c Python-2.0/Python/dynload_aix.c
+--- Python-2.0.orig/Python/dynload_aix.c Mon Oct 16 17:49:29 2000
++++ Python-2.0/Python/dynload_aix.c Wed Jul 11 19:32:35 2001
+@@ -69,7 +69,7 @@
+ prevmodptr = NULL;
+ do {
+ if (strstr(progname, ldiptr->ldinfo_filename) == NULL &&
+- strstr(ldiptr->ldinfo_filename, "python") == NULL) {
++ strstr(ldiptr->ldinfo_filename, "spython") == NULL) {
+ /*
+ -- Extract only the modules belonging to the main
+ -- executable + those containing "python" as a
+diff -urP Python-2.0.orig/Python/dynload_win.c Python-2.0/Python/dynload_win.c
+--- Python-2.0.orig/Python/dynload_win.c Mon Oct 16 17:49:29 2000
++++ Python-2.0/Python/dynload_win.c Wed Jul 11 19:33:00 2001
+@@ -124,7 +124,7 @@
+ while (DWORD_AT(import_data)) {
+ import_name = dllbase + DWORD_AT(import_data+12);
+ if (strlen(import_name) >= 6 &&
+- !strncmp(import_name,"python",6)) {
++ !strncmp(import_name,"spython",6)) {
+ char *pch;
+
+ /* Ensure python prefix is followed only
+@@ -228,7 +228,7 @@
+ } else {
+ char buffer[256];
+
+- sprintf(buffer,"python%d%d.dll",
++ sprintf(buffer,"spython%d%d.dll",
+ PY_MAJOR_VERSION,PY_MINOR_VERSION);
+ import_python = GetPythonImport(hDLL);
+
+diff -urP Python-2.0.orig/Python/pythonrun.c Python-2.0/Python/pythonrun.c
+--- Python-2.0.orig/Python/pythonrun.c Mon Oct 16 17:49:29 2000
++++ Python-2.0/Python/pythonrun.c Wed Jul 11 19:49:19 2001
+@@ -360,7 +360,7 @@
+ PyInterpreterState_Delete(interp);
+ }
+
+-static char *progname = "python";
++static char *progname = "spython";
+
+ void
+ Py_SetProgramName(char *pn)
+@@ -375,7 +375,7 @@
+ return progname;
+ }
+
+-static char *default_home = NULL;
++static char *default_home = "/usr";
+
+ void
+ Py_SetPythonHome(char *home)
+@@ -568,7 +568,7 @@
+ if (closeit)
+ fclose(fp);
+ if( (fp = fopen(filename, "rb")) == NULL ) {
+- fprintf(stderr, "python: Can't reopen .pyc file\n");
++ fprintf(stderr, "spython: Can't reopen .pyc file\n");
+ return -1;
+ }
+ /* Turn on optimization if a .pyo file is given */
+diff -urP Python-2.0.orig/Python/thread_beos.h Python-2.0/Python/thread_beos.h
+--- Python-2.0.orig/Python/thread_beos.h Mon Oct 16 17:49:29 2000
++++ Python-2.0/Python/thread_beos.h Wed Jul 11 19:31:39 2001
+@@ -123,7 +123,7 @@
+
+ /* We are so very thread-safe... */
+ this_thread = atomic_add( &thread_count, 1 );
+- sprintf( name, "python thread (%d)", this_thread );
++ sprintf( name, "spython thread (%d)", this_thread );
+
+ tid = spawn_thread( (thread_func)func, name,
+ B_NORMAL_PRIORITY, arg );
+@@ -222,7 +222,7 @@
+ }
+
+ this_lock = atomic_add( &lock_count, 1 );
+- sprintf( name, "python lock (%d)", this_lock );
++ sprintf( name, "spython lock (%d)", this_lock );
+
+ retval = benaphore_create( name, lock );
+ if( retval != EOK ) {
+@@ -298,7 +298,7 @@
+
+ dprintf(("PyThread_allocate_sema called\n"));
+
+- sema = create_sem( value, "python semaphore" );
++ sema = create_sem( value, "spython semaphore" );
+ if( sema < B_NO_ERROR ) {
+ /* TODO: that's bad, raise an exception */
+ return 0;
+diff -urP Python-2.0.orig/configure.in Python-2.0/configure.in
+--- Python-2.0.orig/configure.in Mon Oct 16 17:50:06 2000
++++ Python-2.0/configure.in Wed Jul 11 19:26:15 2001
+@@ -251,17 +251,17 @@
+ # a bundle using libtool.
+ if test "$with_next_framework"
+ then
+- LDLIBRARY='libpython$(VERSION).dylib'
++ LDLIBRARY='libspython$(VERSION).dylib'
+ fi
+
+ # DG/UX requires some fancy ld contortions to produce a .so from an .a
+ case $MACHDEP in
+ dguxR4)
+- LDLIBRARY='libpython$(VERSION).so'
++ LDLIBRARY='libspython$(VERSION).so'
+ OPT="$OPT -pic"
+ ;;
+ beos*)
+- LDLIBRARY='libpython$(VERSION).so'
++ LDLIBRARY='libspython$(VERSION).so'
+ ;;
+ esac
+ AC_MSG_RESULT($LDLIBRARY)
+@@ -269,7 +269,7 @@
+ # If LDLIBRARY is different from LIBRARY, emit a rule to build it.
+ if test -z "$LDLIBRARY"
+ then
+- LDLIBRARY='libpython$(VERSION).a'
++ LDLIBRARY='libspython$(VERSION).a'
+ MAKE_LDLIBRARY="true"
+ else
+ MAKE_LDLIBRARY='$(MAKE) $(LDLIBRARY)'
+@@ -558,7 +558,7 @@
+ then
+ case $ac_sys_system/$ac_sys_release in
+ AIX*) LDSHARED="\$(srcdir)/ld_so_aix \$(CC)";;
+- BeOS*) LDSHARED="\$(srcdir)/../BeOS/linkmodule -L.. -lpython\$(VERSION)";;
++ BeOS*) LDSHARED="\$(srcdir)/../BeOS/linkmodule -L.. -lspython\$(VERSION)";;
+ IRIX/5*) LDSHARED="ld -shared";;
+ IRIX*/6*) LDSHARED="ld ${SGI_ABI} -shared -all";;
+ SunOS/4*) LDSHARED="ld";;
diff --git a/sys-devel/spython/spython-2.0-r6.ebuild b/sys-devel/spython/spython-2.0-r6.ebuild
new file mode 100644
index 000000000000..6656acefcd27
--- /dev/null
+++ b/sys-devel/spython/spython-2.0-r6.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/spython/spython-2.0-r6.ebuild,v 1.1 2001/08/04 18:22:45 pete Exp $
+
+S=${WORKDIR}/Python-2.0
+S2=${WORKDIR}/python-fchksum-1.1
+DESCRIPTION="A really great language -- minimalist python environment"
+SRC_URI="http://www.python.org/ftp/python/src/BeOpen-Python-2.0.tar.bz2
+ http://www.azstarnet.com/~donut/programs/fchksum/python-fchksum-1.1.tar.gz"
+
+HOMEPAGE="http://www.python.org http://www.azstarnet.com/~donut/programs/fchksum/"
+
+DEPEND=">=sys-libs/zlib-1.1.3 readline? ( >=sys-libs/readline-4.1 >=sys-libs/ncurses-5.2 )"
+
+RDEPEND="virtual/glibc"
+PROVIDE="virtual/python"
+
+src_unpack() {
+
+ unpack BeOpen-Python-2.0.tar.bz2
+
+ cd ${S}/Modules
+
+ cp ${FILESDIR}/pfconfig.h .
+ unpack python-fchksum-1.1.tar.gz
+
+ echo '*static*' >> Setup.local
+
+ echo "zlib zlibmodule.c -lz" >> Setup.local
+ if [ "`use readline`" ]
+ then
+ echo "readline readline.c -lreadline -lncurses" >> Setup.local
+ fi
+
+ echo "fchksum fchksum.c md5_2.c" >> Setup.local
+
+ cd python-fchksum-1.1
+ mv md5.h ../md5_2.h
+ sed -e 's:"md5.h":"md5_2.h":' md5.c > ../md5_2.c
+ sed -e 's:"md5.h":"md5_2.h":' fchksum.c > ../fchksum.c
+
+ #for some reason, python 2.0 can't find /usr/lib/python2.0 without this fix to the source code.
+ cd ${S}/Python
+ cp pythonrun.c pythonrun.c.orig
+ sed -e 's:static char \*default_home = NULL:static char \*default_home = "/usr":' pythonrun.c.orig > pythonrun.c
+
+}
+
+src_compile() {
+
+ export LDFLAGS=-static
+
+ try ./configure --prefix=/usr --without-libdb
+
+ #libdb3 support is available from http://pybsddb.sourceforge.net/; the one
+ #included with python is for db 1.85 only.
+
+ cp Makefile Makefile.orig
+ sed -e "s/-g -O2/${CFLAGS}/" Makefile.orig > Makefile
+ cd ${S}/Modules
+ cp Makefile.pre Makefile.orig
+ sed -e "s:MODOBJS=:MODOBJS=fchksum.o md5_2.o:" \
+ Makefile.orig > Makefile.pre
+
+ # Parallel make does not work
+ cd ${S}
+ try make
+
+}
+
+src_install() {
+
+ dodir /usr/share/man
+ try make install prefix=${D}/usr MANDIR=${D}/usr/share/man
+ rm ${D}/usr/bin/python
+ mv ${D}/usr/bin/python2.0 ${D}/usr/bin/spython
+
+ if [ "`use build`" ] || [ "`use bootcd`" ]
+ then
+ rm -rf ${D}/usr/share/man
+ rm -rf ${D}/usr/lib/python${PV}/{test,config}
+ rm -rf ${D}/usr/include
+ fi
+}
+
+pkg_postinst() {
+
+ if [ ! -e "${ROOT}/usr/bin/python" ]
+ then
+ ln -s spython ${ROOT}/usr/bin/python
+ fi
+}
diff --git a/sys-kernel/linux/linux-2.4.6-r2.ebuild b/sys-kernel/linux/linux-2.4.6-r2.ebuild
new file mode 100644
index 000000000000..15f0bb79b4b1
--- /dev/null
+++ b/sys-kernel/linux/linux-2.4.6-r2.ebuild
@@ -0,0 +1,451 @@
+# Copyright 1999-2000 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author Daniel Robbins <drobbins@gentoo.org>
+# /home/cvsroot/gentoo-x86/sys-kernel/linux/linux-2.4.4.3.ebuild,v 1.1 2001/05/02 14:31:06 achim Exp
+
+#OKV=original kernel version, KV=patched kernel version
+
+OKV=2.4.6
+KV=2.4.6
+S=${WORKDIR}/linux-${KV}
+S2=${WORKDIR}/linux-${KV}-extras
+if [ $PN = "linux-extras" ] || [ $PN = "linux-headers" ]
+then
+ KS=/usr/src/linux-${KV}
+ KS2=/usr/src/linux-${KV}-extras
+else
+ KS=${S}
+ KS2=${S2}
+fi
+
+# Kernel Features Enabled USE Variable Status
+#
+# Reiserfs Y - Production-ready
+# JFS N jfs Testing-only (commented out for now)
+# LVM Y lvm almost production-ready (still has race conditions during pvmove)
+# ext3 Y ext3 Production-ready
+# MOSIX Y mosix Testing only
+# XFS N xfs Will add soon
+# PCMCIA-CS N pcmcia Need to move this to its own ebuild
+# lm-sensors N lm_sensors Need to move this to its own ebuild
+
+[ "`use bootcd`" ] && USE="bootcd lvm ext2"
+
+LVMV=0.9.1_beta7
+EXT3V=2.4-0.9.2-246
+MOSV=1.1.0
+CLOOPV=0.6
+CLOOPAV=0.60-1
+# AV=0.5.11
+#JFSV=1.0.0
+#KNV="6.g"
+#PIV="1.d"
+#PCV="3.1.27"
+
+[ "${PN}" = "linux" ] && DESCRIPTION="Linux kernel version ${KV}, including modules, binary tools, libraries and includes"
+[ "${PN}" = "linux-sources" ] && DESCRIPTION="Linux kernel version ${KV} - full sources"
+[ "${PN}" = "linux-extras" ] && DESCRIPTION="Linux kernel support tools and libraries"
+
+# We use build in /usr/src/linux in case of linux-extras
+# so we need no sources
+if [ ! "${PN}" = "linux-extras" ] ; then
+SRC_URI="http://www.kernel.org/pub/linux/kernel/v2.4/linux-${OKV}.tar.bz2
+ http://www.zip.com.au/~akpm/ext3-${EXT3V}.gz
+ http://oss.software.ibm.com/developerworks/opensource/jfs/project/pub/jfs-1.0.0-patch.tar.gz
+ ftp://ftp.cs.huji.ac.il/users/mosix/MOSIX-${MOSV}.tar.gz
+ ftp://ftp.sistina.com/pub/LVM/0.9.1_beta/lvm_${LVMV}.tar.gz
+ http://www.knopper.net/download/knoppix/cloop_${CLOOPAV}.tar.gz"
+fi
+# http://www.netroedge.com/~lm78/archive/lm_sensors-${SENV}.tar.gz
+# http://www.netroedge.com/~lm78/archive/i2c-${SENV}.tar.gz
+# http://prdownloads.sourceforge.net/pcmcia-cs/pcmcia-cs-${PCV}.tar.gz
+
+if [ "$PN" != "linux-extras" ]
+then
+ PROVIDE="virtual/kernel"
+fi
+
+HOMEPAGE="http://www.kernel.org/
+ http://www.netroedge.com/~lm78/
+ http://www.namesys.com
+ http://www.sistina.com/lvm/"
+
+DEPEND=">=sys-apps/modutils-2.4.2 sys-devel/perl"
+#these deps are messed up; fix 'em and add ncurses (required my mosix compile, menuconfig)
+if [ $PN = "linux" ]
+then
+ RDEPEND="mosix? ( ~sys-apps/mosix-user-${MOSV} ) >=sys-apps/e2fsprogs-1.22 >=sys-apps/util-linux-2.11f >=sys-apps/reiserfs-utils-3.6.25-r1"
+elif [ $PN = "linux-sources" ]
+then
+ if [ "`use build`" ]
+ then
+ DEPEND=""
+ RDEPEND=""
+ else
+ #ncurses is required for "make menuconfig"
+ RDEPEND=">=sys-libs/ncurses-5.2"
+ fi
+elif [ $PN = "linux-extras" ] || [ $PN = "linux-headers" ]
+then
+ #linux-extras/headers requires a rev of the current kernel sources to be installed
+ DEPEND="~sys-kernel/linux-sources-${PV}"
+fi
+
+# this is not pretty...
+LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -I${S}/include"
+
+src_unpack() {
+ if [ "$PN" = "linux-extras" ] || [ "$PN" = "linux-headers" ]
+ then
+ return
+ fi
+
+ mkdir ${S2}
+
+ #unpack kernel and apply reiserfs-related patches
+ cd ${WORKDIR}
+ unpack linux-${OKV}.tar.bz2
+ try mv linux linux-${KV}
+ cd ${S}
+ if [ "$KV" != "$OKV" ]
+ then
+ echo "Applying ${KV} patch..."
+ try bzip2 -dc ${DISTDIR}/patch-${KV}.bz2 | patch -p1
+ fi
+# This patch is just *too* unweildy and creates tons of rejects all over the place (boo!)
+# echo "Applying XFS patch..."
+# local x
+# for x in easy only tricky acl-extattr misc
+# do
+# cat ${DISTDIR}/patch-2.4.6-xfs-${x}.bz2 | bzip2 -d | patch -p1
+# done
+
+ dodir /usr/src/linux-${KV}-extras
+
+ if [ "`use mosix`" ]
+ then
+ echo "Applying MOSIX patch..."
+ cd ${S2}
+ mkdir MOSIX-${MOSV}
+ cd MOSIX-${MOSV}
+ tar xzf MOSIX-${MOSV}.tar.gz patches.${OKV} kernel.new.${OKV}.tar
+ cd ${S}
+ try cat ${S2}/MOSIX-${MOSV}/patches.2.4.6 | patch -p0
+ tar -x --no-same-owner -vf ${S2}/MOSIX-${MOSV}/kernel.new.2.4.6.tar
+ fi
+
+ cd ${S}
+ echo "Applying reiserfs-NFS fix..."
+ try cat ${FILESDIR}/2.4.6/linux-2.4.6-reiserfs-NFS.patch | patch -N -p1
+
+ if [ "`use lvm`" ]
+ then
+ #create and apply LVM patch. The tools get built later.
+ cd ${S2}
+ echo "Unpacking and applying LVM patch..."
+ unpack lvm_${LVMV}.tar.gz
+ try cd LVM/${LVMV}
+
+ # I had to hack this in so that LVM will look in the current linux
+ # source directory instead of /usr/src/linux for stuff - pete
+ try CFLAGS=\""${CFLAGS} -I${S}/include"\" ./configure --prefix=/ --mandir=/usr/share/man --with-kernel_dir="${S}"
+ cd PATCHES
+ try make KERNEL_VERSION=${KV} KERNEL_DIR=${S}
+ cd ${S}
+ # the -l option allows this patch to apply cleanly (ignore whitespace changes)
+ try patch -l -p1 < ${S2}/LVM/${LVMV}/PATCHES/lvm-${LVMV}-${KV}.patch
+ cd ${S}/drivers/md
+ try patch -p0 < ${FILESDIR}/${KV}/lvm.c.diff
+ fi
+
+# if [ "`use lm_sensors`" ]
+# then
+# #unpack and apply the lm_sensors patch
+# echo "Unpacking and applying lm_sensors patch..."
+# cd ${S}/extras
+# unpack lm_sensors-${SENV}.tar.gz
+# unpack i2c-${SENV}.tar.gz
+# try cd i2c-${SENV}
+# try rmdir src
+# try ln -s ../.. src
+# try mkpatch/mkpatch.pl . /usr/src/linux | patch -p1 -E -d /usr/src/linux
+# cp Makefile Makefile.orig
+# try sed -e \"s:^LINUX=.*:LINUX=src:\" \
+# -e \"s/^COMPILE_KERNEL.*/COMPILE_KERNEL := 2/\" \
+# -e \"s:^I2C_HEADERS.*:I2C_HEADERS=.i2c-src/kernel:\" \
+# -e \"s#^DESTDIR.*#DESTDIR := ${D}#\" \
+# -e \"s#^PREFIX.*#PREFIX := /usr#\" \
+# -e \"s#^MANDIR.*#MANDIR := /usr/share/man#\" \
+# Makefile.orig > Makefile
+# try cd ${S}/extras/lm_sensors-${SENV}
+# try rmdir src
+# try ln -s ../.. src
+# try ln -s ../i2c-${SENV} i2c-src
+# try mkpatch/mkpatch.pl . /usr/src/linux | patch -p1 -E -d /usr/src/linux
+# try sed -e \"s:^LINUX=.*:LINUX=src:\" \
+# -e \"s/^COMPILE_KERNEL.*/COMPILE_KERNEL := 2/\" \
+# -e \"s:^I2C_HEADERS.*:I2C_HEADERS=.i2c-src/kernel:\" \
+# -e \"s#^DESTDIR.*#DESTDIR := ${D}#\" \
+# -e \"s#^PREFIX.*#PREFIX := /usr#\" \
+# -e \"s#^MANDIR.*#MANDIR := /usr/share/man#\" \
+# Makefile.orig > Makefile
+# fi
+# if [ "`use pcmcia-cs`" ]
+# then
+# echo "Unpacking pcmcia-cs tools..."
+# cd ${S2}
+# unpack pcmcia-cs-${PCV}.tar.gz
+ # patch -p0 < ${FILESDIR}/${KV}/pcmcia-cs-${PCV}-gentoo.diff
+# fi
+
+ #JFS patch works; commented out because it's not ready for production use
+ #if [ "`use jfs`" ]
+ #then
+ # echo "Applying JFS patch..."
+ # cd ${WORKDIR}
+ # unpack jfs-${JFSV}-patch.tar.gz
+ # cd ${S}
+ # patch -p1 < ${WORKDIR}/jfs-common-v1.0.0-patch
+ # patch -p1 < ${WORKDIR}/jfs-2.4.5-v1.0.0-patch
+ #fi
+
+ if [ "`use ext3`" ]
+ then
+ echo "Applying ext3 patch..."
+ if [ "`use mosix`" ]
+ then
+ echo
+ echo "There will be one reject; we will fix it. (no worries)"
+ echo
+ fi
+ cd ${S}
+ gzip -dc ${DISTDIR}/ext3-${EXT3V}.gz | patch -l -p1
+ if [ "`use mosix`" ]
+ then
+ echo
+ echo "Fixing reject in include/linux/sched.h..."
+ echo
+ cp ${FILESDIR}/${KV}/sched.h include/linux
+ fi
+ fi
+
+ cd ${S2}
+ unpack cloop_${CLOOPAV}.tar.gz
+
+ #get sources ready for compilation or for sitting at /usr/src/linux
+ echo "Preparing for compilation..."
+ cd ${S}
+ #sometimes we have icky kernel symbols; this seems to get rid of them
+ try make mrproper
+
+ #linux-sources needs to be fully configured, too. Not just linux
+ #this is the configuration for the default kernel
+ try cp ${FILESDIR}/${KV}/config.bootcd .config
+ try yes \"\" \| make oldconfig
+ echo "Ignore any errors from the yes command above."
+
+ #fix silly permissions in tarball
+ cd ${WORKDIR}
+ chown -R 0.0 *
+ chmod -R a+r-w+X,u+w *
+}
+
+src_compile() {
+ if [ "${PN}" = "linux-sources" ] || [ "${PN}" = "linux-headers" ]
+ then
+ cd ${KS}
+ try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" dep
+ else
+ if [ $PN = "linux" ]
+ then
+ cd ${KS}
+ try make symlinks
+ fi
+ if [ "`use lvm`" ]
+ then
+ #LVM tools are included in the linux and linux-extras pakcages
+ cd ${KS2}/LVM/${LVMV}
+
+ # This is needed for linux-extras
+ if [ -f "Makefile" ]
+ then
+ try make clean
+ fi
+ # I had to hack this in so that LVM will look in the current linux
+ # source directory instead of /usr/src/linux for stuff - pete
+ try CFLAGS=\""${CFLAGS} -I${KS}/include"\" ./configure --prefix=/ --mandir=/usr/share/man --with-kernel_dir="${KS}"
+ try make
+ fi
+
+# if [ "`use lm_sensors`" ]
+# then
+# cd ${KS}/extras/lm_sensors-${SENV}
+# try make
+# fi
+
+# Works, just commented out because JFS isn't ready to be used by non-developers
+# if [ "`use jfs`" ]
+# then
+# cd ${S}/fs/jfs/utils
+# try make
+# cd output
+# into /
+# dosbin *
+# doman `find -iname *.8`
+# fi
+
+ if [ "$PN" == "linux" ]
+ then
+ try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" dep
+ try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" bzImage
+ #LEX=\""flex -l"\" bzImage
+ try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" modules
+ #LEX=\""flex -l"\" modules
+ fi
+
+# if [ "`use pcmcia-cs`" ]
+# then
+# cd ${KS2}/pcmcia-cs-${PCV}
+# # This is needed for linux-extras
+# if [ -f "Makefile" ]
+# then
+# try make clean
+# fi
+# try ./Configure -n --kernel=${KS} --moddir=/lib/modules/${KV} \
+# --notrust --cardbus --nopnp --noapm --srctree --sysv --rcdir=/etc/rc.d/
+# try make all
+# fi
+
+ cd ${KS2}/cloop-${CLOOPV}
+ make KERNEL_DIR=${KS}
+ fi
+}
+
+src_install() {
+ if [ "${PN}" = "linux" ] || [ "${PN}" = "linux-extras" ]
+ then
+ dodir /usr/lib
+
+ if [ "`use lvm`" ]
+ then
+ cd ${KS2}/LVM/${LVMV}/tools
+
+ try CFLAGS=\""${CFLAGS} -I${KS}/include"\" make install -e prefix=${D} mandir=${D}/usr/share/man \
+ sbindir=${D}/sbin libdir=${D}/lib
+ #no need for a static library in /lib
+ mv ${D}/lib/*.a ${D}/usr/lib
+ fi
+
+# if [ "`use lm_sensors`" ]
+# then
+# echo "Install sensor tools..."
+# #install sensors tools
+# cd ${KS}/extras/lm_sensors-${SENV}
+# make install
+# fi
+
+ if [ "${PN}" = "linux" ]
+ then
+ dodir /usr/src/linux-${KV}
+ cd ${D}/usr/src
+ #grab includes and documentation only
+ echo ">>> Copying includes and documentation..."
+ cp -ax ${S}/include ${D}/usr/src/linux-${KV}
+ cp -ax ${S}/Documentation ${D}/usr/src/linux-${KV}
+
+ #grab compiled kernel
+ dodir /boot/boot
+ insinto /boot/boot
+ cd ${S}
+ doins arch/i386/boot/bzImage
+
+ #grab modules
+ # Do we have a bug in modutils ?
+ # Meanwhile we use this quick fix (achim)
+
+ install -d ${D}/lib/modules/`uname -r`
+ try make INSTALL_MOD_PATH=${D} modules_install
+
+ cd ${S}
+ depmod -b ${D} -F ${S}/System.map ${KV}
+ #rm -rf ${D}/lib/modules/`uname -r`
+ #fix symlink
+ cd ${D}/lib/modules/${KV}
+ rm build
+ ln -sf /usr/src/linux-${KV} build
+ fi
+
+# if [ "`use pcmcia-cs`" ]
+# then
+# #install PCMCIA modules and utilities
+# cd ${KS2}/pcmcia-cs-${PCV}
+# try make PREFIX=${D} MANDIR=${D}/usr/share/man install
+# rm -rf ${D}/etc/rc.d
+# exeinto /etc/rc.d/init.d
+# doexe ${FILESDIR}/${KV}/pcmcia
+# fi
+
+ cd ${KS2}/cloop-${CLOOPV}
+ insinto /lib/modules/${KV}/kernel/drivers/block
+ doins cloop.o
+ into /usr
+ dobin create_compressed_fs extract_compressed_fs
+
+ elif [ "$PN" = "linux-sources" ]
+ then
+ dodir /usr/src
+ cd ${S}
+
+ if [ "`use build`" ] ; then
+ dodir /usr/src/linux-${KV}
+ #grab includes and documentation only
+ echo ">>> Copying includes..."
+ cp -ax ${S}/include ${D}/usr/src/linux-${KV}
+ else
+ echo ">>> Copying sources..."
+ cp -ax ${WORKDIR}/* ${D}/usr/src
+ fi
+ elif [ "$PN" = "linux-headers" ]
+ then
+ #the linux-headers package basically takes a "snapshot" of your current linux headers
+ dodir /usr/include/linux
+ cp -ax ${KS}/include/linux/* ${D}/usr/include/linux
+ dodir /usr/include/asm
+ cp -ax ${KS}/include/asm-i386/* ${D}/usr/include/asm
+ fi
+ if [ -d ${D}/usr/src/linux-${KV} ]
+ then
+ #don't overwrite existing .config if present
+ cd ${D}/usr/src/linux-${KV}
+ if [ -e .config ]
+ then
+ cp -a .config .config.eg
+ fi
+ fi
+}
+
+pkg_preinst() {
+ if [ "$PN" = "linux-headers" ]
+ then
+ if [ -L ${ROOT}usr/include/linux ]
+ then
+ rm ${ROOT}usr/include/linux
+ fi
+ if [ -L ${ROOT}usr/include/asm ]
+ then
+ rm ${ROOT}usr/include/asm
+ fi
+ fi
+}
+
+pkg_postinst() {
+ rm -f ${ROOT}/usr/src/linux
+ ln -sf linux-${KV} ${ROOT}/usr/src/linux
+
+ #copy over our .config if one isn't already present
+ cd ${ROOT}/usr/src/linux-${KV}
+ if [ "${PN}" = "linux-sources" ] && [ -e .config.eg ] && [ ! -e .config ]
+ then
+ cp -a .config.eg .config
+ fi
+}
diff --git a/sys-libs/glibc/glibc-2.2.3-r4.ebuild b/sys-libs/glibc/glibc-2.2.3-r4.ebuild
index a5d9ab42af33..131f62f5a897 100644
--- a/sys-libs/glibc/glibc-2.2.3-r4.ebuild
+++ b/sys-libs/glibc/glibc-2.2.3-r4.ebuild
@@ -1,7 +1,7 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Achim Gottinger <achim@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.2.3-r4.ebuild,v 1.1 2001/07/28 15:49:20 pete Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.2.3-r4.ebuild,v 1.2 2001/08/04 18:22:45 pete Exp $
A="$P.tar.gz glibc-linuxthreads-${PV}.tar.gz"
S=${WORKDIR}/${P}
@@ -49,7 +49,7 @@ src_compile() {
# If we build for the build system we use the kernel headers from the target
myconf="--with-header=${ROOT}usr/include"
fi
- if [ "`use gd`" ] && [ -z "`use bootstrap`" ]
+ if [ "`use gd`" ] && [ -z "`use bootstrap`" ] && [ -z "`use bootcd`" ] && [ -z "`use build`" ]
then
myconf="${myconf} --with-gd=yes"
else