Blame view
sources/lib/private/files/stream/staticstream.php
3.28 KB
|
03e52840d
|
1 2 3 4 5 6 7 8 9 10 11 |
<?php
/**
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OC\Files\Stream;
class StaticStream {
|
|
31b7f2792
|
12 |
const MODE_FILE = 0100000; |
|
03e52840d
|
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public $context;
protected static $data = array();
protected $path = '';
protected $pointer = 0;
protected $writable = false;
public function stream_close() {
}
public function stream_eof() {
return $this->pointer >= strlen(self::$data[$this->path]);
}
public function stream_flush() {
}
|
|
31b7f2792
|
29 30 31 |
public static function clear() {
self::$data = array();
}
|
|
03e52840d
|
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
public function stream_open($path, $mode, $options, &$opened_path) {
switch ($mode[0]) {
case 'r':
if (!isset(self::$data[$path])) return false;
$this->path = $path;
$this->writable = isset($mode[1]) && $mode[1] == '+';
break;
case 'w':
self::$data[$path] = '';
$this->path = $path;
$this->writable = true;
break;
case 'a':
if (!isset(self::$data[$path])) self::$data[$path] = '';
$this->path = $path;
$this->writable = true;
$this->pointer = strlen(self::$data[$path]);
break;
case 'x':
if (isset(self::$data[$path])) return false;
$this->path = $path;
$this->writable = true;
break;
case 'c':
if (!isset(self::$data[$path])) self::$data[$path] = '';
$this->path = $path;
$this->writable = true;
break;
default:
return false;
}
$opened_path = $this->path;
return true;
}
public function stream_read($count) {
$bytes = min(strlen(self::$data[$this->path]) - $this->pointer, $count);
$data = substr(self::$data[$this->path], $this->pointer, $bytes);
$this->pointer += $bytes;
return $data;
}
public function stream_seek($offset, $whence = SEEK_SET) {
$len = strlen(self::$data[$this->path]);
switch ($whence) {
case SEEK_SET:
if ($offset <= $len) {
$this->pointer = $offset;
return true;
}
break;
case SEEK_CUR:
if ($this->pointer + $offset <= $len) {
$this->pointer += $offset;
return true;
}
break;
case SEEK_END:
if ($len + $offset <= $len) {
$this->pointer = $len + $offset;
return true;
}
break;
}
return false;
}
public function stream_stat() {
|
|
31b7f2792
|
100 |
return $this->url_stat($this->path); |
|
03e52840d
|
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
}
public function stream_tell() {
return $this->pointer;
}
public function stream_write($data) {
if (!$this->writable) return 0;
$size = strlen($data);
if ($this->stream_eof()) {
self::$data[$this->path] .= $data;
} else {
self::$data[$this->path] = substr_replace(
self::$data[$this->path],
$data,
$this->pointer
);
}
$this->pointer += $size;
return $size;
}
public function unlink($path) {
if (isset(self::$data[$path])) {
unset(self::$data[$path]);
}
return true;
}
public function url_stat($path) {
if (isset(self::$data[$path])) {
$size = strlen(self::$data[$path]);
$time = time();
|
|
31b7f2792
|
134 |
$data = array( |
|
03e52840d
|
135 |
'dev' => 0, |
|
03e52840d
|
136 |
'ino' => 0, |
|
31b7f2792
|
137 |
'mode' => self::MODE_FILE | 0777, |
|
03e52840d
|
138 |
'nlink' => 1, |
|
03e52840d
|
139 |
'uid' => 0, |
|
03e52840d
|
140 |
'gid' => 0, |
|
03e52840d
|
141 |
'rdev' => '', |
|
03e52840d
|
142 |
'size' => $size, |
|
03e52840d
|
143 |
'atime' => $time, |
|
03e52840d
|
144 |
'mtime' => $time, |
|
03e52840d
|
145 |
'ctime' => $time, |
|
03e52840d
|
146 |
'blksize' => -1, |
|
03e52840d
|
147 148 |
'blocks' => -1, ); |
|
31b7f2792
|
149 |
return array_values($data) + $data; |
|
03e52840d
|
150 151 152 153 |
} return false; } } |