From a3f2898ea64930cc9eb3765a6efebe900c9ceafc Mon Sep 17 00:00:00 2001
From: Juan RP <xtraeme@gmail.com>
Date: Sat, 17 May 2014 12:36:02 +0200
Subject: [PATCH] Explicitly set errno to ENOENT when a pkg hasn't been found
 in array/dictionaries.

---
 lib/plist_find.c   | 14 +++++++++++---
 lib/repo_pkgdeps.c |  2 +-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/lib/plist_find.c b/lib/plist_find.c
index ddc0183..8890888 100644
--- lib/plist_find.c
+++ lib/plist_find.c
@@ -90,7 +90,11 @@ get_pkg_in_array(xbps_array_t array, const char *str, bool virtual)
 	}
 	xbps_object_iterator_release(iter);
 
-	return found ? obj : NULL;
+	if (!found) {
+		errno = ENOENT;
+		return NULL;
+	}
+	return obj;
 }
 
 xbps_dictionary_t HIDDEN
@@ -140,8 +144,10 @@ match_pkg_by_pkgver(xbps_dictionary_t repod, const char *p)
 	d = xbps_dictionary_get(repod, pkgname);
 	if (d) {
 		xbps_dictionary_get_cstring_nocopy(d, "pkgver", &pkgver);
-		if (strcmp(pkgver, p))
+		if (strcmp(pkgver, p)) {
 			d = NULL;
+			errno = ENOENT;
+		}
 	}
 
 	free(pkgname);
@@ -168,8 +174,10 @@ match_pkg_by_pattern(xbps_dictionary_t repod, const char *p)
 	if (d) {
 		xbps_dictionary_get_cstring_nocopy(d, "pkgver", &pkgver);
 		assert(pkgver);
-		if (!xbps_pkgpattern_match(pkgver, p))
+		if (!xbps_pkgpattern_match(pkgver, p)) {
 			d = NULL;
+			errno = ENOENT;
+		}
 	}
 
 	free(pkgname);
diff --git a/lib/repo_pkgdeps.c b/lib/repo_pkgdeps.c
index fa1cb38..d1b3c36 100644
--- lib/repo_pkgdeps.c
+++ lib/repo_pkgdeps.c
@@ -224,7 +224,7 @@ find_repo_deps(struct xbps_handle *xhp,
 			if (errno && errno != ENOENT) {
 				/* error */
 				rv = errno;
-				xbps_dbg_printf(xhp, "failed to find installed pkg for `%s': %s\n", reqpkg, strerror(errno));
+				xbps_dbg_printf(xhp, "failed to find installed pkg for `%s': %s\n", reqpkg, strerror(rv));
 				free(pkgname);
 				break;
 			}
-- 
1.9.2

