static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC)
{
php_stream *controlstream = (php_stream *)stream->wrapperdata;
+ int ret = 0;
if (controlstream) {
+ if (strpbrk(stream->mode, "wa+")) {
+ char tmp_line[512];
+ int result;
+
+ /* For write modes close data stream first to signal EOF to server */
+ stream->wrapperdata = NULL;
+ php_stream_close(stream);
+ stream = NULL;
+
+ result = GET_FTP_RESULT(controlstream);
+ if (result != 226 && result != 250) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "FTP server error %d:%s", result, tmp_line);
+ ret = EOF;
+ }
+ }
+
php_stream_write_string(controlstream, "QUIT\r\n");
php_stream_close(controlstream);
- stream->wrapperdata = NULL;
+ if (stream) {
+ stream->wrapperdata = NULL;
+ }
}
- return 0;
+
+ return ret;
}
/* }}} */