Skip to content

Commit c4a6998

Browse files
committed
Merge branch 'PHP-7.4'
2 parents 3faa903 + b317f0e commit c4a6998

File tree

9 files changed

+41
-111
lines changed

9 files changed

+41
-111
lines changed

Zend/zend_language_scanner.l

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,6 @@ ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle)
292292
zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
293293
/* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */
294294
file_handle->opened_path = NULL;
295-
if (file_handle->free_filename) {
296-
file_handle->filename = NULL;
297-
}
298295
}
299296

300297
ZEND_API void zend_lex_tstring(zval *zv)

Zend/zend_stream.c

Lines changed: 34 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -51,35 +51,11 @@ static size_t zend_stream_stdio_fsizer(void *handle) /* {{{ */
5151
return 0;
5252
} /* }}} */
5353

54-
static void zend_stream_unmap(zend_stream *stream) { /* {{{ */
55-
if (stream->mmap.buf) {
56-
efree(stream->mmap.buf);
57-
}
58-
stream->mmap.len = 0;
59-
stream->mmap.buf = 0;
60-
stream->handle = stream->mmap.old_handle;
61-
} /* }}} */
62-
63-
static void zend_stream_mmap_closer(zend_stream *stream) /* {{{ */
64-
{
65-
zend_stream_unmap(stream);
66-
if (stream->mmap.old_closer && stream->handle) {
67-
stream->mmap.old_closer(stream->handle);
68-
}
69-
} /* }}} */
70-
71-
static inline int zend_stream_is_mmap(zend_file_handle *file_handle) { /* {{{ */
72-
return file_handle->type == ZEND_HANDLE_MAPPED;
73-
} /* }}} */
74-
7554
static size_t zend_stream_fsize(zend_file_handle *file_handle) /* {{{ */
7655
{
7756
zend_stat_t buf;
7857

79-
if (zend_stream_is_mmap(file_handle)) {
80-
return file_handle->handle.stream.mmap.len;
81-
}
82-
if (file_handle->type == ZEND_HANDLE_STREAM || file_handle->type == ZEND_HANDLE_MAPPED) {
58+
if (file_handle->type == ZEND_HANDLE_STREAM) {
8359
return file_handle->handle.stream.fsizer(file_handle->handle.stream.handle);
8460
}
8561
if (file_handle->handle.fp && zend_fstat(fileno(file_handle->handle.fp), &buf) == 0) {
@@ -109,17 +85,14 @@ ZEND_API void zend_stream_init_filename(zend_file_handle *handle, const char *fi
10985

11086
ZEND_API int zend_stream_open(const char *filename, zend_file_handle *handle) /* {{{ */
11187
{
88+
zend_string *opened_path;
11289
if (zend_stream_open_function) {
11390
return zend_stream_open_function(filename, handle);
11491
}
115-
handle->type = ZEND_HANDLE_FP;
116-
handle->opened_path = NULL;
117-
handle->handle.fp = zend_fopen(filename, &handle->opened_path);
118-
handle->filename = filename;
119-
handle->free_filename = 0;
120-
memset(&handle->handle.stream.mmap, 0, sizeof(zend_mmap));
12192

122-
return (handle->handle.fp) ? SUCCESS : FAILURE;
93+
zend_stream_init_fp(handle, zend_fopen(filename, &opened_path), filename);
94+
handle->opened_path = opened_path;
95+
return handle->handle.fp ? SUCCESS : FAILURE;
12396
} /* }}} */
12497

12598
static int zend_stream_getc(zend_file_handle *file_handle) /* {{{ */
@@ -134,7 +107,7 @@ static int zend_stream_getc(zend_file_handle *file_handle) /* {{{ */
134107

135108
static size_t zend_stream_read(zend_file_handle *file_handle, char *buf, size_t len) /* {{{ */
136109
{
137-
if (!zend_stream_is_mmap(file_handle) && file_handle->handle.stream.isatty) {
110+
if (file_handle->handle.stream.isatty) {
138111
int c = '*';
139112
size_t n;
140113

@@ -155,35 +128,29 @@ ZEND_API int zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t
155128
size_t size;
156129
zend_stream_type old_type;
157130

131+
if (file_handle->buf) {
132+
*buf = file_handle->buf;
133+
*len = file_handle->len;
134+
return SUCCESS;
135+
}
136+
158137
if (file_handle->type == ZEND_HANDLE_FILENAME) {
159138
if (zend_stream_open(file_handle->filename, file_handle) == FAILURE) {
160139
return FAILURE;
161140
}
162141
}
163142

164-
switch (file_handle->type) {
165-
case ZEND_HANDLE_FP:
166-
if (!file_handle->handle.fp) {
167-
return FAILURE;
168-
}
169-
memset(&file_handle->handle.stream.mmap, 0, sizeof(zend_mmap));
170-
file_handle->handle.stream.isatty = isatty(fileno((FILE *)file_handle->handle.stream.handle));
171-
file_handle->handle.stream.reader = (zend_stream_reader_t)zend_stream_stdio_reader;
172-
file_handle->handle.stream.closer = (zend_stream_closer_t)zend_stream_stdio_closer;
173-
file_handle->handle.stream.fsizer = (zend_stream_fsizer_t)zend_stream_stdio_fsizer;
174-
memset(&file_handle->handle.stream.mmap, 0, sizeof(file_handle->handle.stream.mmap));
175-
/* no break; */
176-
case ZEND_HANDLE_STREAM:
177-
/* nothing to do */
178-
break;
179-
180-
case ZEND_HANDLE_MAPPED:
181-
*buf = file_handle->handle.stream.mmap.buf;
182-
*len = file_handle->handle.stream.mmap.len;
183-
return SUCCESS;
184-
185-
default:
143+
if (file_handle->type == ZEND_HANDLE_FP) {
144+
if (!file_handle->handle.fp) {
186145
return FAILURE;
146+
}
147+
148+
file_handle->type = ZEND_HANDLE_STREAM;
149+
file_handle->handle.stream.handle = file_handle->handle.fp;
150+
file_handle->handle.stream.isatty = isatty(fileno((FILE *)file_handle->handle.stream.handle));
151+
file_handle->handle.stream.reader = (zend_stream_reader_t)zend_stream_stdio_reader;
152+
file_handle->handle.stream.closer = (zend_stream_closer_t)zend_stream_stdio_closer;
153+
file_handle->handle.stream.fsizer = (zend_stream_fsizer_t)zend_stream_stdio_fsizer;
187154
}
188155

189156
size = zend_stream_fsize(file_handle);
@@ -195,8 +162,8 @@ ZEND_API int zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t
195162
file_handle->type = ZEND_HANDLE_STREAM; /* we might still be _FP but we need fsize() work */
196163

197164
if (old_type == ZEND_HANDLE_FP && !file_handle->handle.stream.isatty && size) {
198-
file_handle->handle.stream.mmap.buf = *buf = safe_emalloc(1, size, ZEND_MMAP_AHEAD);
199-
file_handle->handle.stream.mmap.len = zend_stream_read(file_handle, *buf, size);
165+
file_handle->buf = *buf = safe_emalloc(1, size, ZEND_MMAP_AHEAD);
166+
file_handle->len = zend_stream_read(file_handle, *buf, size);
200167
} else {
201168
size_t read, remain = 4*1024;
202169
*buf = emalloc(remain);
@@ -211,29 +178,22 @@ ZEND_API int zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t
211178
remain = size;
212179
}
213180
}
214-
file_handle->handle.stream.mmap.len = size;
181+
file_handle->len = size;
215182
if (size && remain < ZEND_MMAP_AHEAD) {
216183
*buf = safe_erealloc(*buf, size, 1, ZEND_MMAP_AHEAD);
217184
}
218-
file_handle->handle.stream.mmap.buf = *buf;
185+
file_handle->buf = *buf;
219186
}
220187

221-
if (file_handle->handle.stream.mmap.len == 0) {
188+
if (file_handle->len == 0) {
222189
*buf = erealloc(*buf, ZEND_MMAP_AHEAD);
223-
file_handle->handle.stream.mmap.buf = *buf;
190+
file_handle->buf = *buf;
224191
}
225192

226-
if (ZEND_MMAP_AHEAD) {
227-
memset(file_handle->handle.stream.mmap.buf + file_handle->handle.stream.mmap.len, 0, ZEND_MMAP_AHEAD);
228-
}
229-
file_handle->type = ZEND_HANDLE_MAPPED;
230-
file_handle->handle.stream.mmap.old_handle = file_handle->handle.stream.handle;
231-
file_handle->handle.stream.mmap.old_closer = file_handle->handle.stream.closer;
232-
file_handle->handle.stream.handle = &file_handle->handle.stream;
233-
file_handle->handle.stream.closer = (zend_stream_closer_t)zend_stream_mmap_closer;
193+
memset(file_handle->buf + file_handle->len, 0, ZEND_MMAP_AHEAD);
234194

235-
*buf = file_handle->handle.stream.mmap.buf;
236-
*len = file_handle->handle.stream.mmap.len;
195+
*buf = file_handle->buf;
196+
*len = file_handle->len;
237197

238198
return SUCCESS;
239199
} /* }}} */
@@ -245,7 +205,6 @@ ZEND_API void zend_file_handle_dtor(zend_file_handle *fh) /* {{{ */
245205
fclose(fh->handle.fp);
246206
break;
247207
case ZEND_HANDLE_STREAM:
248-
case ZEND_HANDLE_MAPPED:
249208
if (fh->handle.stream.closer && fh->handle.stream.handle) {
250209
fh->handle.stream.closer(fh->handle.stream.handle);
251210
}
@@ -261,9 +220,9 @@ ZEND_API void zend_file_handle_dtor(zend_file_handle *fh) /* {{{ */
261220
zend_string_release_ex(fh->opened_path, 0);
262221
fh->opened_path = NULL;
263222
}
264-
if (fh->free_filename && fh->filename) {
265-
efree((char*)fh->filename);
266-
fh->filename = NULL;
223+
if (fh->buf) {
224+
efree(fh->buf);
225+
fh->buf = NULL;
267226
}
268227
}
269228
/* }}} */
@@ -278,11 +237,6 @@ ZEND_API int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *
278237
return fh1->handle.fp == fh2->handle.fp;
279238
case ZEND_HANDLE_STREAM:
280239
return fh1->handle.stream.handle == fh2->handle.stream.handle;
281-
case ZEND_HANDLE_MAPPED:
282-
return (fh1->handle.stream.handle == &fh1->handle.stream &&
283-
fh2->handle.stream.handle == &fh2->handle.stream &&
284-
fh1->handle.stream.mmap.old_handle == fh2->handle.stream.mmap.old_handle)
285-
|| fh1->handle.stream.handle == fh2->handle.stream.handle;
286240
default:
287241
return 0;
288242
}

Zend/zend_stream.h

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,12 @@ typedef void (*zend_stream_closer_t)(void* handle);
3737
typedef enum {
3838
ZEND_HANDLE_FILENAME,
3939
ZEND_HANDLE_FP,
40-
ZEND_HANDLE_STREAM,
41-
ZEND_HANDLE_MAPPED
40+
ZEND_HANDLE_STREAM
4241
} zend_stream_type;
4342

44-
typedef struct _zend_mmap {
45-
size_t len;
46-
char *buf;
47-
void *old_handle;
48-
zend_stream_closer_t old_closer;
49-
} zend_mmap;
50-
5143
typedef struct _zend_stream {
5244
void *handle;
5345
int isatty;
54-
zend_mmap mmap;
5546
zend_stream_reader_t reader;
5647
zend_stream_fsizer_t fsizer;
5748
zend_stream_closer_t closer;
@@ -65,7 +56,8 @@ typedef struct _zend_file_handle {
6556
const char *filename;
6657
zend_string *opened_path;
6758
zend_stream_type type;
68-
zend_bool free_filename;
59+
char *buf;
60+
size_t len;
6961
} zend_file_handle;
7062

7163
BEGIN_EXTERN_C()

ext/opcache/ZendAccelerator.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,6 @@ accel_time_t zend_get_file_handle_timestamp(zend_file_handle *file_handle, size_
961961
}
962962
break;
963963
case ZEND_HANDLE_FILENAME:
964-
case ZEND_HANDLE_MAPPED:
965964
if (file_handle->opened_path) {
966965
char *file_path = ZSTR_VAL(file_handle->opened_path);
967966

ext/phar/phar.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3261,11 +3261,9 @@ static zend_op_array *phar_compile_file(zend_file_handle *file_handle, int type)
32613261
efree(f.opened_path);
32623262
}
32633263
f.opened_path = file_handle->opened_path;
3264-
f.free_filename = file_handle->free_filename;
32653264

32663265
switch (file_handle->type) {
32673266
case ZEND_HANDLE_STREAM:
3268-
case ZEND_HANDLE_MAPPED:
32693267
if (file_handle->handle.stream.closer && file_handle->handle.stream.handle) {
32703268
file_handle->handle.stream.closer(file_handle->handle.stream.handle);
32713269
}
@@ -3289,7 +3287,6 @@ static zend_op_array *phar_compile_file(zend_file_handle *file_handle, int type)
32893287
phar->is_persistent ?
32903288
php_stream_rewind(PHAR_G(cached_fp)[phar->phar_pos].fp) :
32913289
php_stream_rewind(phar->fp);
3292-
memset(&file_handle->handle.stream.mmap, 0, sizeof(file_handle->handle.stream.mmap));
32933290
}
32943291
}
32953292
}

main/main.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,17 +1554,17 @@ static int php_stream_open_for_zend(const char *filename, zend_file_handle *hand
15541554

15551555
PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode) /* {{{ */
15561556
{
1557-
php_stream *stream = php_stream_open_wrapper((char *)filename, "rb", mode, &handle->opened_path);
1558-
1557+
zend_string *opened_path;
1558+
php_stream *stream = php_stream_open_wrapper((char *)filename, "rb", mode, &opened_path);
15591559
if (stream) {
1560+
memset(handle, 0, sizeof(zend_file_handle));
15601561
handle->type = ZEND_HANDLE_STREAM;
15611562
handle->filename = (char*)filename;
1562-
handle->free_filename = 0;
1563+
handle->opened_path = opened_path;
15631564
handle->handle.stream.handle = stream;
15641565
handle->handle.stream.reader = (zend_stream_reader_t)_php_stream_read;
15651566
handle->handle.stream.fsizer = php_zend_stream_fsizer;
15661567
handle->handle.stream.isatty = 0;
1567-
memset(&handle->handle.stream.mmap, 0, sizeof(handle->handle.stream.mmap));
15681568
handle->handle.stream.closer = php_zend_stream_closer;
15691569
/* suppress warning if this stream is not explicitly closed */
15701570
php_stream_auto_cleanup(stream);

sapi/litespeed/lsapi_main.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,7 +1313,6 @@ static int cli_main( int argc, char * argv[] )
13131313
highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini);
13141314
} else if (source_highlight == 2) {
13151315
file_handle.filename = *p;
1316-
file_handle.free_filename = 0;
13171316
file_handle.opened_path = NULL;
13181317
ret = php_lint_script(&file_handle);
13191318
if (ret==SUCCESS) {
@@ -1324,7 +1323,6 @@ static int cli_main( int argc, char * argv[] )
13241323

13251324
} else {
13261325
file_handle.filename = *p;
1327-
file_handle.free_filename = 0;
13281326
file_handle.opened_path = NULL;
13291327

13301328
php_execute_script(&file_handle);

sapi/phpdbg/phpdbg_list.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,10 +294,6 @@ zend_op_array *phpdbg_init_compile_file(zend_file_handle *file, int type) {
294294
zend_string_release(file->opened_path);
295295
file->opened_path = zend_string_init(filename, strlen(filename), 0);
296296
} else {
297-
if (file->free_filename) {
298-
efree((char *) file->filename);
299-
}
300-
file->free_filename = 0;
301297
file->filename = filename;
302298
}
303299
}

sapi/phpdbg/phpdbg_prompt.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -577,9 +577,6 @@ int phpdbg_compile(void) /* {{{ */
577577
if (php_stream_open_for_zend_ex(PHPDBG_G(exec), &fh, USE_PATH|STREAM_OPEN_FOR_INCLUDE) == SUCCESS && zend_stream_fixup(&fh, &buf, &len) == SUCCESS) {
578578
CG(skip_shebang) = 1;
579579
PHPDBG_G(ops) = zend_compile_file(&fh, ZEND_INCLUDE);
580-
581-
fh.handle.stream.mmap.buf = buf;
582-
fh.handle.stream.mmap.len = len;
583580
zend_destroy_file_handle(&fh);
584581
if (EG(exception)) {
585582
zend_exception_error(EG(exception), E_ERROR);

0 commit comments

Comments
 (0)