Commit 0c84160e110 for php.net

commit 0c84160e110e96ac329629b65f1eb52f02660eeb
Author: Gina Peter Banyard <girgias@php.net>
Date:   Mon Jul 20 19:43:02 2026 +0100

    streams: refactor _php_stream_opendir() to use early returns

diff --git a/main/streams/streams.c b/main/streams/streams.c
index d7d3d70782f..59297ed8ba8 100644
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -2034,21 +2034,32 @@ PHPAPI php_stream *_php_stream_opendir(const char *path, int options,
 	path_to_open = path;

 	wrapper = php_stream_locate_url_wrapper(path, &path_to_open, options);
-
-	if (wrapper && wrapper->wops->dir_opener) {
-		stream = wrapper->wops->dir_opener(wrapper,
-				path_to_open, "r", options & ~REPORT_ERRORS, NULL,
-				context STREAMS_REL_CC);
-
-		if (stream) {
-			stream->wrapper = wrapper;
-			stream->flags |= PHP_STREAM_FLAG_NO_BUFFER | PHP_STREAM_FLAG_IS_DIR;
+	if (UNEXPECTED(wrapper == NULL)) {
+		if (options & REPORT_ERRORS) {
+			php_stream_display_wrapper_errors(NULL, context, PHP_STREAM_EC(OpenFailed),
+					"Failed to open directory");
+			php_stream_tidy_wrapper_error_log(wrapper);
 		}
-	} else if (wrapper) {
+		return NULL;
+	}
+
+	if (UNEXPECTED(!wrapper->wops->dir_opener)) {
 		php_stream_wrapper_log_warn(wrapper, context, options & ~REPORT_ERRORS,
 				NoOpener, "not implemented");
+		php_stream_display_wrapper_errors(wrapper, context, PHP_STREAM_EC(OpenFailed),
+				"Failed to open directory");
+		php_stream_tidy_wrapper_error_log(wrapper);
+		return NULL;
 	}
-	if (stream == NULL && (options & REPORT_ERRORS)) {
+
+	stream = wrapper->wops->dir_opener(wrapper,
+			path_to_open, "r", options & ~REPORT_ERRORS, NULL,
+			context STREAMS_REL_CC);
+
+	if (stream) {
+		stream->wrapper = wrapper;
+		stream->flags |= PHP_STREAM_FLAG_NO_BUFFER | PHP_STREAM_FLAG_IS_DIR;
+	} else if (options & REPORT_ERRORS) {
 		php_stream_display_wrapper_errors(wrapper, context, PHP_STREAM_EC(OpenFailed),
 				"Failed to open directory");
 	}