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");
}