Commit 07fba63e9eda509d1eee13df0b325dbd4be2f3cd

J. David Ibáñez 2013-07-06T23:51:40

Fix return value in git_config_get_multivar If there is not an error, the return value was always the return value of the last call to file->get_multivar With this commit GIT_ENOTFOUND is only returned if all the calls to filge-get_multivar return GIT_ENOTFOUND.

diff --git a/src/config.c b/src/config.c
index 068c402..aaad7d8 100644
--- a/src/config.c
+++ b/src/config.c
@@ -535,6 +535,7 @@ int git_config_get_multivar(
 	file_internal *internal;
 	git_config_backend *file;
 	int ret = GIT_ENOTFOUND;
+	int err;
 	size_t i;
 
 	/*
@@ -547,9 +548,15 @@ int git_config_get_multivar(
 			continue;
 		file = internal->file;
 
-		ret = file->get_multivar(file, name, regexp, cb, payload);
-		if (ret < 0 && ret != GIT_ENOTFOUND)
-			return ret;
+		err = file->get_multivar(file, name, regexp, cb, payload);
+		switch (err) {
+			case GIT_OK:
+				ret = GIT_OK;
+			case GIT_ENOTFOUND:
+				break;
+			default:
+				return err;
+		}
 	}
 
 	return (ret == GIT_ENOTFOUND) ? config_error_notfound(name) : 0;