mirror of
https://codeberg.org/icewind/SMB.git
synced 2026-06-03 17:24:07 +02:00
use stat instead of attributes
This commit is contained in:
parent
e0e86b1664
commit
89082b2b29
3 changed files with 16 additions and 28 deletions
|
|
@ -9,6 +9,7 @@ namespace Icewind\SMB\Native;
|
|||
|
||||
use Icewind\SMB\ACL;
|
||||
use Icewind\SMB\Exception\Exception;
|
||||
use Icewind\SMB\Exception\NotFoundException;
|
||||
use Icewind\SMB\IFileInfo;
|
||||
|
||||
class NativeFileInfo implements IFileInfo {
|
||||
|
|
@ -18,8 +19,8 @@ class NativeFileInfo implements IFileInfo {
|
|||
protected $name;
|
||||
/** @var NativeShare */
|
||||
protected $share;
|
||||
/** @var array{"mode": int, "size": int, "write_time": int}|null */
|
||||
protected $attributeCache = null;
|
||||
/** @var array{"mode": int, "size": int, "mtime": int}|null */
|
||||
protected $statCache = null;
|
||||
|
||||
public function __construct(NativeShare $share, string $path, string $name) {
|
||||
$this->share = $share;
|
||||
|
|
@ -36,33 +37,13 @@ class NativeFileInfo implements IFileInfo {
|
|||
}
|
||||
|
||||
/**
|
||||
* @return array{"mode": int, "size": int, "write_time": int}
|
||||
* @return array{"mode": int, "size": int, "mtime": int}
|
||||
*/
|
||||
protected function stat(): array {
|
||||
if (is_null($this->attributeCache)) {
|
||||
$rawAttributes = explode(',', $this->share->getAttribute($this->path, 'system.dos_attr.*'));
|
||||
$attributes = [];
|
||||
foreach ($rawAttributes as $rawAttribute) {
|
||||
list($name, $value) = explode(':', $rawAttribute);
|
||||
$name = strtolower($name);
|
||||
if ($name == 'mode') {
|
||||
$attributes[$name] = (int)hexdec(substr($value, 2));
|
||||
} else {
|
||||
$attributes[$name] = (int)$value;
|
||||
if (is_null($this->statCache)) {
|
||||
$this->statCache = $this->share->rawStat($this->path);
|
||||
}
|
||||
}
|
||||
if (!isset($attributes['mode'])) {
|
||||
throw new Exception("Invalid attribute response");
|
||||
}
|
||||
if (!isset($attributes['size'])) {
|
||||
throw new Exception("Invalid attribute response");
|
||||
}
|
||||
if (!isset($attributes['write_time'])) {
|
||||
throw new Exception("Invalid attribute response");
|
||||
}
|
||||
$this->attributeCache = $attributes;
|
||||
}
|
||||
return $this->attributeCache;
|
||||
return $this->statCache;
|
||||
}
|
||||
|
||||
public function getSize(): int {
|
||||
|
|
@ -72,7 +53,7 @@ class NativeFileInfo implements IFileInfo {
|
|||
|
||||
public function getMTime(): int {
|
||||
$stat = $this->stat();
|
||||
return $stat['write_time'];
|
||||
return $stat['mtime'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -116,6 +116,13 @@ class NativeShare extends AbstractShare {
|
|||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{"mode": int, "size": int, "mtime": int}
|
||||
*/
|
||||
public function rawStat(string $path): array {
|
||||
return $this->getState()->stat($this->buildUrl($path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Multibyte unicode safe version of basename()
|
||||
*
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ abstract class NativeStream implements File {
|
|||
*/
|
||||
public function stream_stat() {
|
||||
try {
|
||||
return $this->state->stat($this->url);
|
||||
return $this->state->fstat($this->handle, $this->url);
|
||||
} catch (Exception $e) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue