Return to mmap.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / main / streams |
1.1 ! misho 1: /* ! 2: +----------------------------------------------------------------------+ ! 3: | PHP Version 5 | ! 4: +----------------------------------------------------------------------+ ! 5: | Copyright (c) 1997-2012 The PHP Group | ! 6: +----------------------------------------------------------------------+ ! 7: | This source file is subject to version 3.01 of the PHP license, | ! 8: | that is bundled with this package in the file LICENSE, and is | ! 9: | available through the world-wide-web at the following url: | ! 10: | http://www.php.net/license/3_01.txt | ! 11: | If you did not receive a copy of the PHP license and are unable to | ! 12: | obtain it through the world-wide-web, please send a note to | ! 13: | license@php.net so we can mail you a copy immediately. | ! 14: +----------------------------------------------------------------------+ ! 15: | Author: Wez Furlong <wez@thebrainroom.com> | ! 16: +----------------------------------------------------------------------+ ! 17: */ ! 18: ! 19: /* $Id: mmap.c 321634 2012-01-01 13:15:04Z felipe $ */ ! 20: ! 21: /* Memory Mapping interface for streams */ ! 22: #include "php.h" ! 23: #include "php_streams_int.h" ! 24: ! 25: PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC) ! 26: { ! 27: php_stream_mmap_range range; ! 28: ! 29: range.offset = offset; ! 30: range.length = length; ! 31: range.mode = mode; ! 32: range.mapped = NULL; ! 33: ! 34: /* For now, we impose an arbitrary limit to avoid ! 35: * runaway swapping when large files are passed thru. */ ! 36: if (length > 4 * 1024 * 1024) { ! 37: return NULL; ! 38: } ! 39: ! 40: if (PHP_STREAM_OPTION_RETURN_OK == php_stream_set_option(stream, PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_MAP_RANGE, &range)) { ! 41: if (mapped_len) { ! 42: *mapped_len = range.length; ! 43: } ! 44: return range.mapped; ! 45: } ! 46: return NULL; ! 47: } ! 48: ! 49: PHPAPI int _php_stream_mmap_unmap(php_stream *stream TSRMLS_DC) ! 50: { ! 51: return php_stream_set_option(stream, PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_UNMAP, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0; ! 52: } ! 53: ! 54: PHPAPI int _php_stream_mmap_unmap_ex(php_stream *stream, off_t readden TSRMLS_DC) ! 55: { ! 56: int ret = 1; ! 57: ! 58: if (php_stream_seek(stream, readden, SEEK_CUR) != 0) { ! 59: ret = 0; ! 60: } ! 61: if (php_stream_mmap_unmap(stream) == 0) { ! 62: ret = 0; ! 63: } ! 64: ! 65: return ret; ! 66: } ! 67: ! 68: /* ! 69: * Local variables: ! 70: * tab-width: 4 ! 71: * c-basic-offset: 4 ! 72: * End: ! 73: * vim600: noet sw=4 ts=4 fdm=marker ! 74: * vim<600: noet sw=4 ts=4 ! 75: */