From d14da8dc6a524942b6a7b8585fd53c127ea74efd Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Thu, 10 Apr 2014 16:26:53 +0000
Subject: libbsd: initial inclusion. dep of samba. refs #961

---
 abs/extra/libbsd/PKGBUILD  | 39 ++++++++++++++++++++++++++++++++++++
 abs/extra/libbsd/spt.patch | 50 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 89 insertions(+)
 create mode 100644 abs/extra/libbsd/PKGBUILD
 create mode 100644 abs/extra/libbsd/spt.patch

diff --git a/abs/extra/libbsd/PKGBUILD b/abs/extra/libbsd/PKGBUILD
new file mode 100644
index 0000000..2e9b745
--- /dev/null
+++ b/abs/extra/libbsd/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id$
+# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
+# Contributor: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
+
+pkgname=libbsd
+pkgver=0.6.0
+pkgrel=2
+pkgdesc="Provides useful functions commonly found on BSD systems like strlcpy()"
+arch=('i686' 'x86_64')
+url="http://libbsd.freedesktop.org"
+license=('custom')
+depends=('glibc')
+options=('staticlibs')
+source=(http://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz{,.asc})
+md5sums=('f6c75f0a9818e323a589bcbd560a0eb4'
+         'SKIP')
+
+build() {
+  cd $pkgname-$pkgver
+
+  ./configure --prefix=/usr
+  make
+}
+
+check() {
+  cd $pkgname-$pkgver
+
+  make check
+}
+
+package() {
+  cd $pkgname-$pkgver
+
+  make DESTDIR="$pkgdir" install
+  rm "${pkgdir}"/usr/lib/libbsd.a
+  install -D -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/extra/libbsd/spt.patch b/abs/extra/libbsd/spt.patch
new file mode 100644
index 0000000..b19dc9b
--- /dev/null
+++ b/abs/extra/libbsd/spt.patch
@@ -0,0 +1,50 @@
+diff -u -r libbsd-0.5.2-orig/src/setproctitle.c libbsd-0.5.2/src/setproctitle.c
+--- libbsd-0.5.2-orig/src/setproctitle.c	2013-06-08 18:26:04.000000000 +0200
++++ libbsd-0.5.2/src/setproctitle.c	2013-06-18 02:35:59.441393418 +0200
+@@ -86,7 +86,7 @@
+ 	if (environ != envp)
+ 		return 0;
+ 
+-	/* Make a copy of the old environ array of pointers, in case
++	/* Make a deep copy of the old environ array of pointers, in case
+ 	 * clearenv() or setenv() is implemented to free the internal
+ 	 * environ array, because we will need to access the old environ
+ 	 * contents to make the new copy. */
+@@ -94,11 +94,13 @@
+ 	envcopy = malloc(envsize);
+ 	if (envcopy == NULL)
+ 		return errno;
+-	memcpy(envcopy, envp, envsize);
++	for (i = 0; envp[i]; i++) envcopy[i] = strdup(envp[i]);
++	envcopy[i] = NULL;
+ 
+ 	error = spt_clearenv();
+ 	if (error) {
+ 		environ = envp;
++		for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 		free(envcopy);
+ 		return error;
+ 	}
+@@ -116,18 +118,20 @@
+ 		if (error) {
+ #ifdef HAVE_CLEARENV
+ 			/* Because the old environ might not be available
+-			 * anymore we will make do with the shallow copy. */
++			 * anymore we will make do with the deep copy. */
+ 			environ = envcopy;
+ #else
+ 			environ = envp;
++			for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 			free(envcopy);
+ #endif
+ 			return error;
+ 		}
+ 	}
+ 
+-	/* Dispose of the shallow copy, now that we've finished transfering
++	/* Dispose of the deep copy, now that we've finished transfering
+ 	 * the old environment. */
++	for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 	free(envcopy);
+ 
+ 	return 0;
-- 
cgit v0.12

