]> git.pld-linux.org Git - packages/php.git/blame - php-5.3.6-bug-54092.patch
move php.1 manual to -program (link to actual php-cli)
[packages/php.git] / php-5.3.6-bug-54092.patch
CommitLineData
fb98beff
ER
1--- PHP_5_3/ext/standard/ftp_fopen_wrapper.c 2011/02/27 20:10:08 308733
2+++ PHP_5_3/ext/standard/ftp_fopen_wrapper.c 2011/02/27 20:23:54 308734
3@@ -72,6 +72,12 @@
4 #define FTPS_ENCRYPT_DATA 1
5 #define GET_FTP_RESULT(stream) get_ftp_result((stream), tmp_line, sizeof(tmp_line) TSRMLS_CC)
6
7+typedef struct _php_ftp_dirstream_data {
8+ php_stream *datastream;
9+ php_stream *controlstream;
10+ php_stream *dirstream;
11+} php_ftp_dirstream_data;
12+
13 /* {{{ get_ftp_result
14 */
15 static inline int get_ftp_result(php_stream *stream, char *buffer, size_t buffer_size TSRMLS_DC)
16@@ -97,7 +103,7 @@
17 */
18 static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC)
19 {
20- php_stream *controlstream = (php_stream *)stream->wrapperdata;
21+ php_stream *controlstream = stream->wrapperthis;
22 int ret = 0;
23
24 if (controlstream) {
25@@ -106,10 +112,6 @@
26 int result;
27
28 /* For write modes close data stream first to signal EOF to server */
29- stream->wrapperdata = NULL;
30- php_stream_close(stream);
31- stream = NULL;
32-
33 result = GET_FTP_RESULT(controlstream);
34 if (result != 226 && result != 250) {
35 php_error_docref(NULL TSRMLS_CC, E_WARNING, "FTP server error %d:%s", result, tmp_line);
36@@ -119,9 +121,7 @@
37
38 php_stream_write_string(controlstream, "QUIT\r\n");
39 php_stream_close(controlstream);
40- if (stream) {
41- stream->wrapperdata = NULL;
42- }
43+ stream->wrapperthis = NULL;
44 }
45
46 return ret;
47@@ -584,7 +584,7 @@
48 }
49
50 /* remember control stream */
51- datastream->wrapperdata = (zval *)stream;
52+ datastream->wrapperthis = stream;
53
54 php_url_free(resource);
55 return datastream;
56@@ -608,11 +608,13 @@
57 static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
58 {
59 php_stream_dirent *ent = (php_stream_dirent *)buf;
60- php_stream *innerstream = (php_stream *)stream->abstract;
61+ php_stream *innerstream;
62 size_t tmp_len;
63 char *basename;
64 size_t basename_len;
65
66+ innerstream = ((php_ftp_dirstream_data *)stream->abstract)->datastream;
67+
68 if (count != sizeof(php_stream_dirent)) {
69 return 0;
70 }
71@@ -656,13 +658,18 @@
72 */
73 static int php_ftp_dirstream_close(php_stream *stream, int close_handle TSRMLS_DC)
74 {
75- php_stream *innerstream = (php_stream *)stream->abstract;
76+ php_ftp_dirstream_data *data = stream->abstract;
77
78- if (innerstream->wrapperdata) {
79- php_stream_close((php_stream *)innerstream->wrapperdata);
80- innerstream->wrapperdata = NULL;
81- }
82- php_stream_close((php_stream *)stream->abstract);
83+ /* close control connection */
84+ if (data->controlstream) {
85+ php_stream_close(data->controlstream);
86+ data->controlstream = NULL;
87+ }
88+ /* close data connection */
89+ php_stream_close(data->datastream);
90+ data->datastream = NULL;
91+
92+ efree(data);
93 stream->abstract = NULL;
94
95 return 0;
96@@ -688,6 +695,7 @@
97 php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
98 {
99 php_stream *stream, *reuseid, *datastream = NULL;
100+ php_ftp_dirstream_data *dirsdata;
101 php_url *resource = NULL;
102 int result = 0, use_ssl, use_ssl_on_data = 0;
103 char *hoststart = NULL, tmp_line[512];
104@@ -747,11 +755,14 @@
105 goto opendir_errexit;
106 }
107
108- /* remember control stream */
109- datastream->wrapperdata = (zval *)stream;
110-
111 php_url_free(resource);
112- return php_stream_alloc(&php_ftp_dirstream_ops, datastream, 0, mode);
113+
114+ dirsdata = emalloc(sizeof *dirsdata);
115+ dirsdata->datastream = datastream;
116+ dirsdata->controlstream = stream;
117+ dirsdata->dirstream = php_stream_alloc(&php_ftp_dirstream_ops, dirsdata, 0, mode);
118+
119+ return dirsdata->dirstream;
120
121 opendir_errexit:
122 if (resource) {
This page took 0.090175 seconds and 4 git commands to generate.