root/main/streams/mmap.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. _php_stream_mmap_range
  2. _php_stream_mmap_unmap
  3. _php_stream_mmap_unmap_ex

   1 /*
   2   +----------------------------------------------------------------------+
   3   | PHP Version 7                                                        |
   4   +----------------------------------------------------------------------+
   5   | Copyright (c) 1997-2016 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$ */
  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_access_t mode, size_t *mapped_len)
  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)
  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, zend_off_t readden)
  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  */

/* [<][>][^][v][top][bottom][index][help] */