From 12f50dbca6bf0191cd62445c036c8f8aa2e5f620 Mon Sep 17 00:00:00 2001
From: Michael Hanson <hansonorders@verizon.net>
Date: Wed, 24 Nov 2010 02:40:41 +0000
Subject: hdparm: upgrade

---
 abs/core/hdparm/PKGBUILD                      | 41 ++++++++-----
 abs/core/hdparm/wiper.sh.2_6.max-ranges.patch | 84 +++++++++++++++++++++++++++
 2 files changed, 110 insertions(+), 15 deletions(-)
 create mode 100644 abs/core/hdparm/wiper.sh.2_6.max-ranges.patch

diff --git a/abs/core/hdparm/PKGBUILD b/abs/core/hdparm/PKGBUILD
index 2e1a441..b68bffe 100644
--- a/abs/core/hdparm/PKGBUILD
+++ b/abs/core/hdparm/PKGBUILD
@@ -1,33 +1,44 @@
-# $Id: PKGBUILD 7862 2008-08-04 20:16:21Z tpowa $
+# $Id: PKGBUILD 97491 2010-10-30 19:08:52Z tpowa $
 # Maintainer: Paul Mattal <paul@archlinux.org>
 
 pkgname=hdparm
-pkgver=9.29
+pkgver=9.35
 pkgrel=1
 pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
-arch=(i686 x86_64)
+arch=('i686' 'x86_64')
 depends=('glibc')
-groups=('base')
-source=(http://heanet.dl.sourceforge.net/sourceforge/hdparm/${pkgname}-${pkgver}.tar.gz)
+optdepends=('sh: required by idectl and ultrabayd')
+source=(http://downloads.sourceforge.net/sourceforge/hdparm/${pkgname}-${pkgver}.tar.gz
+        wiper.sh.2_6.max-ranges.patch)
 license=('BSD')
 url="http://sourceforge.net/projects/hdparm/"
+optdepends=('bash: for wiper.sh script')
+options=('emptydirs')
 
 build() {
-  cd ${startdir}/src/${pkgname}-${pkgver} || return 1
+  cd ${srcdir}/${pkgname}-${pkgver}
 
   # build
   make || return 1
+}
+package() {
+  cd ${srcdir}/${pkgname}-${pkgver}
 
   # install
-  mkdir -p ${startdir}/pkg/{usr,sbin} || return 1
-  make DESTDIR=${startdir}/pkg install || return 1
-  install -m755 contrib/idectl ${startdir}/pkg/sbin || return 1
-  install -m755 contrib/ultrabayd ${startdir}/pkg/sbin || return 1
+  mkdir -p ${pkgdir}/{usr,sbin}
+  make DESTDIR=${pkgdir} install
+  install -m755 contrib/idectl ${pkgdir}/sbin
+  install -m755 contrib/ultrabayd ${pkgdir}/sbin
 
-  #install license file
-  install -D -m 644 LICENSE.TXT $startdir/pkg/usr/share/licenses/hdparm/LICENSE.TXT
+  # install wiper.sh script
+ # Fix Range input/output error when wiping Intel G2 and OCZ drives
+  patch -Np1 -i $srcdir/wiper.sh.2_6.max-ranges.patch
 
-  # installs empty /usr/share, which we let it do since it causes
-  # no harm and it might put something there someday
+  install -D -m 0644 $srcdir/$pkgname-$pkgver/wiper/README.txt $pkgdir/usr/share/doc/wiper/README.txt
+  install -D -m 0755 $srcdir/$pkgname-$pkgver/wiper/wiper.sh $pkgdir/usr/sbin/wiper.sh
+
+  #install license file
+  install -D -m 644 LICENSE.TXT $pkgdir/usr/share/licenses/hdparm/LICENSE.TXT
 }
-md5sums=('6575aba60e5adee628414cac76549c9b')
+md5sums=('520996cc36b69212c3907df351296702'
+         '5b99485ee6881de8e009597bffba7eea')
diff --git a/abs/core/hdparm/wiper.sh.2_6.max-ranges.patch b/abs/core/hdparm/wiper.sh.2_6.max-ranges.patch
new file mode 100644
index 0000000..61d197b
--- /dev/null
+++ b/abs/core/hdparm/wiper.sh.2_6.max-ranges.patch
@@ -0,0 +1,84 @@
+--- hdparm-9.28/wiper/wiper.sh.orig	2010-03-09 06:17:37.000000000 -0800
+--- hdparm-9.28/wiper/wiper.sh	2010-05-15 03:08:02.182856971 -0700
+@@ -29,7 +29,7 @@
+ function usage_error(){
+ 	echo >&2
+ 	echo "Linux tune-up (TRIM) utility for SATA SSDs"
+-	echo "Usage:  $0 [--verbose] [--commit] <mount_point|block_device>" >&2
++	echo "Usage:  $0 [--max-ranges <num>] [--verbose] [--commit] <mount_point|block_device>" >&2
+ 	echo "   Eg:  $0 /dev/sda1" >&2
+ 	echo >&2
+ 	exit 1
+@@ -44,6 +44,7 @@
+ 
+ export verbose=0
+ commit=""
++max_ranges=-1
+ argc=$#
+ arg=""
+ while [ $argc -gt 0 ]; do
+@@ -51,6 +52,10 @@
+ 		commit=yes
+ 	elif [ "$1" = "--verbose" ]; then
+ 		verbose=$((verbose + 1))
++	elif [ "$1" = "--max-ranges" -a $argc -gt 1 ]; then
++		max_ranges=$2
++		argc=$((argc - 1))
++		shift
+ 	elif [ "$1" = "" ]; then
+ 		usage_error
+ 	else
+@@ -499,6 +550,18 @@
+ 	fi
+ fi
+ 
++## Different SSD's have a different maximum number of ranges they'll accept
++## in a single TRIM command.
++if [ $max_ranges -le 0 ] ; then
++	model=`$HDPARM -I $rawdev | $GAWK '/Model Number/ { print $NF }'`
++	case "$model" in
++		SSDSA[12]*)  max_ranges=512 ;;	# Intel X18-M/X25-M
++		OCZ-VERTEX2) max_ranges=64 ;;	# OCZ Vertex2
++		*)           max_ranges=65535
++	esac
++fi
++[ $verbose -gt 0 ] && echo "max-ranges = $max_ranges"
++
+ ## All ready.  Now let the user know exactly what we intend to do:
+ ##
+ mountstatus="$fstype non-mounted"
+@@ -608,7 +671,7 @@
+ 		nsectors += count;
+ 		while (count > 0) {
+ 			this_count  = (count > 65535) ? 65535 : count
+-			printf "%u:%u ", lba, this_count
++			printf "%u:%u \n", lba, this_count
+ 			if (verbose > 1)
+ 				printf "%u:%u ", lba, this_count > "/dev/stderr"
+ 			lba        += this_count
+@@ -695,6 +758,22 @@
+ 	-v verbose="$verbose"			\
+ 	-v xfs_blksects="$xfs_blksects"		\
+ 	-v xfs_agoffsets="$xfs_agoffsets"	\
+-	"$GAWKPROG" | $TRIM
++	"$GAWKPROG" | (
++		i=0
++		while read range ; do
++			ranges=$ranges" "$range
++			((i++))
++			if [ $i -ge $max_ranges ] ; then
++				[ $verbose -gt 0 ] && echo -e "Trim ranges:"$ranges"\n"         
++				echo $ranges | $TRIM
++				ranges=""
++				i=0
++			fi
++		done
++		if [ $i -gt 0 ] ; then
++			[ $verbose -gt 0 ] && echo -e "Trim ranges:"$ranges"\n"
++ 			echo $ranges | $TRIM
++		fi
++	)
+ 
+ do_cleanup $?
+
+ 	  	 
-- 
cgit v0.12

