version 1.1.1.3, 2013/07/22 01:32:11
|
version 1.1.1.5, 2014/06/15 20:04:01
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| PHP Version 5 | |
| PHP Version 5 | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1997-2013 The PHP Group | | | Copyright (c) 1997-2014 The PHP Group | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 3.01 of the PHP license, | |
| This source file is subject to version 3.01 of the PHP license, | |
| that is bundled with this package in the file LICENSE, and is | |
| that is bundled with this package in the file LICENSE, and is | |
Line 736 PHPAPI size_t _php_stream_read(php_stream *stream, cha
|
Line 736 PHPAPI size_t _php_stream_read(php_stream *stream, cha
|
|
|
if (!stream->readfilters.head && (stream->flags & PHP_STREAM_FLAG_NO_BUFFER || stream->chunk_size == 1)) { |
if (!stream->readfilters.head && (stream->flags & PHP_STREAM_FLAG_NO_BUFFER || stream->chunk_size == 1)) { |
toread = stream->ops->read(stream, buf, size TSRMLS_CC); |
toread = stream->ops->read(stream, buf, size TSRMLS_CC); |
|
if (toread == (size_t) -1) { |
|
/* e.g. underlying read(2) returned -1 */ |
|
break; |
|
} |
} else { |
} else { |
php_stream_fill_read_buffer(stream, size TSRMLS_CC); |
php_stream_fill_read_buffer(stream, size TSRMLS_CC); |
|
|
Line 1401 PHPAPI size_t _php_stream_passthru(php_stream * stream
|
Line 1405 PHPAPI size_t _php_stream_passthru(php_stream * stream
|
p = php_stream_mmap_range(stream, php_stream_tell(stream), PHP_STREAM_MMAP_ALL, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped); |
p = php_stream_mmap_range(stream, php_stream_tell(stream), PHP_STREAM_MMAP_ALL, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped); |
|
|
if (p) { |
if (p) { |
PHPWRITE(p, mapped); | do { |
| /* output functions return int, so pass in int max */ |
| if (0 < (b = PHPWRITE(p, MIN(mapped - bcount, INT_MAX)))) { |
| bcount += b; |
| } |
| } while (b > 0 && mapped > bcount); |
|
|
php_stream_mmap_unmap_ex(stream, mapped); |
php_stream_mmap_unmap_ex(stream, mapped); |
|
|
return mapped; | return bcount; |
} |
} |
} |
} |
|
|
Line 1920 PHPAPI int _php_stream_stat_path(char *path, int flags
|
Line 1929 PHPAPI int _php_stream_stat_path(char *path, int flags
|
char *path_to_open = path; |
char *path_to_open = path; |
int ret; |
int ret; |
|
|
/* Try to hit the cache first */ | if (!(flags & PHP_STREAM_URL_STAT_NOCACHE)) { |
if (flags & PHP_STREAM_URL_STAT_LINK) { | /* Try to hit the cache first */ |
if (BG(CurrentLStatFile) && strcmp(path, BG(CurrentLStatFile)) == 0) { | if (flags & PHP_STREAM_URL_STAT_LINK) { |
memcpy(ssb, &BG(lssb), sizeof(php_stream_statbuf)); | if (BG(CurrentLStatFile) && strcmp(path, BG(CurrentLStatFile)) == 0) { |
return 0; | memcpy(ssb, &BG(lssb), sizeof(php_stream_statbuf)); |
| return 0; |
| } |
| } else { |
| if (BG(CurrentStatFile) && strcmp(path, BG(CurrentStatFile)) == 0) { |
| memcpy(ssb, &BG(ssb), sizeof(php_stream_statbuf)); |
| return 0; |
| } |
} |
} |
} else { |
|
if (BG(CurrentStatFile) && strcmp(path, BG(CurrentStatFile)) == 0) { |
|
memcpy(ssb, &BG(ssb), sizeof(php_stream_statbuf)); |
|
return 0; |
|
} |
|
} |
} |
|
|
wrapper = php_stream_locate_url_wrapper(path, &path_to_open, 0 TSRMLS_CC); |
wrapper = php_stream_locate_url_wrapper(path, &path_to_open, 0 TSRMLS_CC); |
if (wrapper && wrapper->wops->url_stat) { |
if (wrapper && wrapper->wops->url_stat) { |
ret = wrapper->wops->url_stat(wrapper, path_to_open, flags, ssb, context TSRMLS_CC); |
ret = wrapper->wops->url_stat(wrapper, path_to_open, flags, ssb, context TSRMLS_CC); |
if (ret == 0) { |
if (ret == 0) { |
/* Drop into cache */ | if (!(flags & PHP_STREAM_URL_STAT_NOCACHE)) { |
if (flags & PHP_STREAM_URL_STAT_LINK) { | /* Drop into cache */ |
if (BG(CurrentLStatFile)) { | if (flags & PHP_STREAM_URL_STAT_LINK) { |
efree(BG(CurrentLStatFile)); | if (BG(CurrentLStatFile)) { |
| efree(BG(CurrentLStatFile)); |
| } |
| BG(CurrentLStatFile) = estrdup(path); |
| memcpy(&BG(lssb), ssb, sizeof(php_stream_statbuf)); |
| } else { |
| if (BG(CurrentStatFile)) { |
| efree(BG(CurrentStatFile)); |
| } |
| BG(CurrentStatFile) = estrdup(path); |
| memcpy(&BG(ssb), ssb, sizeof(php_stream_statbuf)); |
} |
} |
BG(CurrentLStatFile) = estrdup(path); |
|
memcpy(&BG(lssb), ssb, sizeof(php_stream_statbuf)); |
|
} else { |
|
if (BG(CurrentStatFile)) { |
|
efree(BG(CurrentStatFile)); |
|
} |
|
BG(CurrentStatFile) = estrdup(path); |
|
memcpy(&BG(ssb), ssb, sizeof(php_stream_statbuf)); |
|
} |
} |
} |
} |
return ret; |
return ret; |
Line 2358 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
Line 2371 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
} else { |
} else { |
if(vector_size*2 < vector_size) { |
if(vector_size*2 < vector_size) { |
/* overflow */ |
/* overflow */ |
|
php_stream_closedir(stream); |
efree(vector); |
efree(vector); |
return FAILURE; |
return FAILURE; |
} |
} |
Line 2371 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
Line 2385 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
nfiles++; |
nfiles++; |
if(vector_size < 10 || nfiles == 0) { |
if(vector_size < 10 || nfiles == 0) { |
/* overflow */ |
/* overflow */ |
|
php_stream_closedir(stream); |
efree(vector); |
efree(vector); |
return FAILURE; |
return FAILURE; |
} |
} |
Line 2379 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
Line 2394 PHPAPI int _php_stream_scandir(char *dirname, char **n
|
|
|
*namelist = vector; |
*namelist = vector; |
|
|
if (compare) { | if (nfiles > 0 && compare) { |
qsort(*namelist, nfiles, sizeof(char *), (int(*)(const void *, const void *))compare); |
qsort(*namelist, nfiles, sizeof(char *), (int(*)(const void *, const void *))compare); |
} |
} |
return nfiles; |
return nfiles; |