From 880c161cd35b232909046cd8e9261f068a78c67c Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Mon, 6 Aug 2012 17:34:38 -0500
Subject: coreutils: 8.17

---
 ...each-symlink-to-relative-name-in-properly.patch | 135 ++++++++++++++++
 abs/core/coreutils/PKGBUILD                        |  39 +++--
 abs/core/coreutils/coreutils-uname.patch           | 173 ---------------------
 3 files changed, 153 insertions(+), 194 deletions(-)
 create mode 100644 abs/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
 delete mode 100644 abs/core/coreutils/coreutils-uname.patch

diff --git a/abs/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch b/abs/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
new file mode 100644
index 0000000..087b87c
--- /dev/null
+++ b/abs/core/coreutils/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
@@ -0,0 +1,135 @@
+From 6124a3842dfa8484b52e067a8ab8105c3875a4f7 Mon Sep 17 00:00:00 2001
+From: Jim Meyering <meyering@redhat.com>
+Date: Thu, 10 May 2012 19:43:00 +0200
+Subject: [PATCH] ls: color each symlink-to-relative-name in / properly
+
+In order for ls --color to color each symlink, it must form the name
+of each referent and then stat it to see if the link is dangling, to
+a directory, to a file, etc.  When the symlink is to a relative name,
+ls must concatenate the starting directory name and that relative name.
+When, in addition, the starting directory was "/" or "/some-name",
+the result was ill-formed, and the subsequent stat would usually fail,
+making the caller color it as a dangling symlink.
+* src/ls.c (make_link_name): Don't botch the case in which
+dir_name(NAME) == "/" and LINKNAME is relative.
+* tests/ls/root-rel-symlink-color: New file.  Test for the above.
+* tests/Makefile.am (TESTS): Add it.
+* NEWS (Bug fixes): Mention it.
+Reported by Mike Frysinger in http://bugs.gnu.org/11453
+Bug introduced by commit v8.16-23-gbcb9078.
+---
+ NEWS                            |  5 ++++
+ src/ls.c                        |  9 +++++++-
+ tests/Makefile.am               |  1 +
+ tests/ls/root-rel-symlink-color | 51 +++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 65 insertions(+), 1 deletion(-)
+ create mode 100755 tests/ls/root-rel-symlink-color
+
+diff --git a/NEWS b/NEWS
+index 6c620b3..f9e9c70 100644
+--- a/NEWS
++++ b/NEWS
+@@ -2,6 +2,11 @@ GNU coreutils NEWS                                    -*- outline -*-
+ 
+ * Noteworthy changes in release ?.? (????-??-??) [?]
+ 
++** Bug fixes
++
++  ls --color would mis-color relative-named symlinks in /
++  [bug introduced in coreutils-8.17]
++
+ 
+ * Noteworthy changes in release 8.17 (2012-05-10) [stable]
+ 
+diff --git a/src/ls.c b/src/ls.c
+index 397e4ea..9494ae9 100644
+--- a/src/ls.c
++++ b/src/ls.c
+@@ -3213,7 +3213,14 @@ make_link_name (char const *name, char const *linkname)
+     return xstrdup (linkname);
+ 
+   char *p = xmalloc (prefix_len + 1 + strlen (linkname) + 1);
+-  stpcpy (stpncpy (p, name, prefix_len + 1), linkname);
++
++  /* PREFIX_LEN usually specifies a string not ending in slash.
++     In that case, extend it by one, since the next byte *is* a slash.
++     Otherwise, the prefix is "/", so leave the length unchanged.  */
++  if ( ! ISSLASH (name[prefix_len - 1]))
++    ++prefix_len;
++
++  stpcpy (stpncpy (p, name, prefix_len), linkname);
+   return p;
+ }
+ 
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index a4370a6..0bafc5f 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -449,6 +449,7 @@ TESTS =						\
+   ls/proc-selinux-segfault			\
+   ls/readdir-mountpoint-inode			\
+   ls/recursive					\
++  ls/root-rel-symlink-color			\
+   ls/rt-1					\
+   ls/slink-acl					\
+   ls/stat-dtype					\
+diff --git a/tests/ls/root-rel-symlink-color b/tests/ls/root-rel-symlink-color
+new file mode 100755
+index 0000000..d795432
+--- /dev/null
++++ b/tests/ls/root-rel-symlink-color
+@@ -0,0 +1,51 @@
++#!/bin/sh
++# Exercise the 8.17 ls bug with coloring relative-named symlinks in "/".
++
++# Copyright (C) 2012 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 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../src
++print_ver_ ls
++
++symlink_to_rel=
++for i in /*; do
++  # Skip non-symlinks:
++  env test -h "$i" || continue
++
++  # Skip dangling symlinks:
++  env test -e "$i" || continue
++
++  # Skip any symlink-to-absolute-name:
++  case $(readlink "$i") in /*) continue ;; esac
++
++  symlink_to_rel=$i
++  break
++done
++
++test -z "$symlink_to_rel" \
++  && skip_ no relative symlink in /
++
++e='\33'
++color_code='01;36'
++c_pre="$e[0m$e[${color_code}m"
++c_post="$e[0m"
++printf "$c_pre$symlink_to_rel$c_post\n" > exp || framework_failure_
++
++env TERM=xterm LS_COLORS="ln=$color_code:or=1;31;42" \
++  ls -d --color=always "$symlink_to_rel" > out || fail=1
++
++compare exp out || fail=1
++
++Exit $fail
+-- 
+1.7.11.2
+
diff --git a/abs/core/coreutils/PKGBUILD b/abs/core/coreutils/PKGBUILD
index 6d75f06..f83225f 100644
--- a/abs/core/coreutils/PKGBUILD
+++ b/abs/core/coreutils/PKGBUILD
@@ -1,27 +1,28 @@
-# $Id: PKGBUILD 127042 2011-06-10 00:56:53Z bisson $
+# $Id: PKGBUILD 163714 2012-07-18 02:16:52Z dreisner $
 # Maintainer: Allan McRae <allan@archlinux.org>
 # Contributor: judd <jvinet@zeroflux.org>
 
 pkgname=coreutils
-pkgver=8.12
+pkgver=8.17
 pkgrel=3
 pkgdesc="The basic file, shell and text manipulation utilities of the GNU operating system"
 arch=('i686' 'x86_64')
 license=('GPL3')
 url="http://www.gnu.org/software/coreutils"
 groups=('base')
-depends=('glibc' 'shadow' 'pam' 'acl' 'gmp' 'libcap')
+depends=('glibc' 'pam' 'acl' 'gmp' 'libcap')
 replaces=('mktemp')
 backup=('etc/pam.d/su')
 install=${pkgname}.install
 options=('!emptydirs')
-source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz
-	coreutils-uname.patch
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz{,.sig}
 	coreutils-pam.patch
+	0001-ls-color-each-symlink-to-relative-name-in-properly.patch
 	su.pam)
-md5sums=('0f7d43c2d2e24314b43a6c6267e25b90'
-         'c4fcca138b6abf6d443d48a6f0cd8833'
+md5sums=('bbda656ce8ca2c6903948f9faa204ba3'
+         'ebecd29b095aa21b0b2f833f1ec20d70'
          'aad79a2aa6d566c375d7bdd1b0767278'
+         'd7c691898a695a6284a927e6a9426fe4'
          'fa85e5cce5d723275b14365ba71a8aad')
 
 build() {
@@ -30,11 +31,12 @@ build() {
   # added su wheel group pam patch (from fedora git)
   patch -Np1 -i ${srcdir}/coreutils-pam.patch
 
-  # linux specific uname improvement (from gentoo portage)
-  patch -Np1 -i ${srcdir}/coreutils-uname.patch
+  # fix coloring for symlinks in /
+  # upstream commit 6124a3842dfa8484b52e067a8ab8105c3875a4f7
+  patch -Np1 -i $srcdir/0001-ls-color-each-symlink-to-relative-name-in-properly.patch
 
   autoreconf -v
-  ./configure --prefix=/usr \
+  ./configure --prefix=/usr --libexecdir=/usr/lib/coreutils \
               --enable-install-program=su \
               --enable-no-install-program=groups,hostname,kill,uptime \
               --enable-pam
@@ -49,20 +51,15 @@ check() {
 package() {
   cd ${srcdir}/${pkgname}-${pkgver}
   make DESTDIR=${pkgdir} install
-  
+
   cd ${pkgdir}/usr/bin
   install -dm755 ${pkgdir}/{bin,usr/sbin}
-  
-  # binaries required by FHS
-  _fhs="cat chgrp chmod chown cp date dd df echo false ln ls \
-        mkdir mknod mv pwd rm rmdir stty su sync true uname"
-  mv ${_fhs} ${pkgdir}/bin
 
-  # binaries required by various Arch scripts
-  _bin="cut dir dircolors du install mkfifo readlink shred \
-        sleep touch tr vdir"
-  mv ${_bin} ${pkgdir}/bin
-  ln -sf /bin/sleep ${pkgdir}/usr/bin/sleep
+  # binaries required by FHS
+  _fhs=('cat' 'chgrp' 'chmod' 'chown' 'cp' 'date' 'dd' 'df' 'echo' 'false'
+        'ln' 'ls' 'mkdir' 'mknod' 'mv' 'pwd' 'rm' 'rmdir' 'stty' 'su' 'sync'
+        'true' 'uname')
+  mv ${_fhs[@]} ${pkgdir}/bin
 
   mv chroot ${pkgdir}/usr/sbin
   install -Dm644 ${srcdir}/su.pam ${pkgdir}/etc/pam.d/su
diff --git a/abs/core/coreutils/coreutils-uname.patch b/abs/core/coreutils/coreutils-uname.patch
deleted file mode 100644
index b458abe..0000000
--- a/abs/core/coreutils/coreutils-uname.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-On linux platforms, grok /proc/cpuinfo for the CPU/vendor info.
-
-Prob not suitable for upstream seeing as how it's 100% linux-specific
-http://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
-
-Patch originally by Carlos E. Gorges <carlos@techlinux.com.br>, but 
-heavily reworked to suck less.
-
-To add support for additional platforms, check out the show_cpuinfo()
-func in the linux/arch/<ARCH>/ source tree of the kernel.
-
---- coreutils/src/uname.c
-+++ coreutils/src/uname.c
-@@ -50,6 +50,11 @@
- # include <mach-o/arch.h>
- #endif
- 
-+#if defined(__linux__)
-+# define USE_PROCINFO
-+# define UNAME_HARDWARE_PLATFORM
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "quote.h"
-@@ -138,6 +143,117 @@
-   exit (status);
- }
- 
-+#if defined(USE_PROCINFO)
-+
-+# if defined(__s390__) || defined(__s390x__)
-+#  define CPUINFO_FILE    "/proc/sysinfo"
-+#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c"
-+# else
-+#  define CPUINFO_FILE    "/proc/cpuinfo"
-+#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c"
-+# endif
-+
-+# define PROCINFO_PROCESSOR      0
-+# define PROCINFO_HARDWARE_PLATFORM 1
-+
-+static void __eat_cpuinfo_space(char *buf)
-+{
-+	/* first eat trailing space */
-+	char *tmp = buf + strlen(buf) - 1;
-+	while (tmp > buf && isspace(*tmp))
-+		*tmp-- = '\0';
-+	/* then eat leading space */
-+	tmp = buf;
-+	while (*tmp && isspace(*tmp))
-+		tmp++;
-+	if (tmp != buf)
-+		memmove(buf, tmp, strlen(tmp)+1);
-+	/* finally collapse whitespace */
-+	tmp = buf;
-+	while (tmp[0] && tmp[1]) {
-+		if (isspace(tmp[0]) && isspace(tmp[1])) {
-+			memmove(tmp, tmp+1, strlen(tmp));
-+			continue;
-+		}
-+		++tmp;
-+	}
-+}
-+
-+static int __linux_procinfo(int x, char *fstr, size_t s)
-+{
-+	FILE *fp;
-+
-+	char *procinfo_keys[] = {
-+		/* --processor --hardware-platform */
-+		#if defined(__alpha__)
-+			"cpu model", "system type"
-+		#elif defined(__arm__)
-+			"Processor", "Hardware"
-+		#elif defined(__avr32__)
-+			"processor", "cpu family"
-+		#elif defined(__bfin__)
-+			"CPU", "BOARD Name"
-+		#elif defined(__cris__)
-+			"cpu", "cpu model"
-+		#elif defined(__frv__)
-+			"CPU-Core", "System"
-+		#elif defined(__i386__) || defined(__x86_64__)
-+			"model name", "vendor_id"
-+		#elif defined(__ia64__)
-+			"family", "vendor"
-+		#elif defined(__hppa__)
-+			"cpu", "model"
-+		#elif defined(__m68k__)
-+			"CPU", "MMU"
-+		#elif defined(__mips__)
-+			"cpu model", "system type"
-+		#elif defined(__powerpc__) || defined(__powerpc64__)
-+			"cpu", "machine"
-+		#elif defined(__s390__) || defined(__s390x__)
-+			"Type", "Manufacturer"
-+		#elif defined(__sh__)
-+			"cpu type", "machine"
-+		#elif defined(sparc) || defined(__sparc__)
-+			"type", "cpu"
-+		#elif defined(__vax__)
-+			"cpu type", "cpu"
-+		#else
-+			"unknown", "unknown"
-+		#endif
-+	};
-+
-+	if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
-+		char key[65], value[257], eol, *ret = NULL;
-+
-+		while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
-+			__eat_cpuinfo_space(key);
-+			if (!strcmp(key, procinfo_keys[x])) {
-+				__eat_cpuinfo_space(value);
-+				ret = value;
-+				break;
-+			}
-+			if (eol != '\n') {
-+				/* we need two fscanf's here in case the previous
-+				 * length limit caused us to read right up to the
-+				 * newline ... doing "%*[^\n]\n" wont eat the newline
-+				 */
-+				fscanf(fp, "%*[^\n]");
-+				fscanf(fp, "\n");
-+			}
-+		}
-+		fclose(fp);
-+
-+		if (ret) {
-+			strncpy(fstr, ret, s);
-+			return 0;
-+		}
-+	}
-+
-+	return -1;
-+}
-+
-+#endif
-+
- /* Print ELEMENT, preceded by a space if something has already been
-    printed.  */
- 
-@@ -250,10 +344,14 @@ main (int argc, char **argv)
-   if (toprint & PRINT_PROCESSOR)
-     {
-       char const *element = unknown;
--#if HAVE_SYSINFO && defined SI_ARCHITECTURE
-+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
-       {
-         static char processor[257];
-+#if defined(USE_PROCINFO)
-+        if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
-+#else
-         if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
-+#endif
-           element = processor;
-       }
- #endif
-@@ -306,9 +404,13 @@ main (int argc, char **argv)
-       if (element == unknown)
-         {
-           static char hardware_platform[257];
-+#if defined(USE_PROCINFO)
-+          if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
-+#else
-           size_t s = sizeof hardware_platform;
-           static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
-           if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
-+#endif
-             element = hardware_platform;
-         }
- #endif
-- 
cgit v0.12

