Annotation of embedaddon/php/main/streams/mmap.c, revision 1.1

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:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>