aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe-symfony-finder/Cargo.toml1
-rw-r--r--crates/shirabe-symfony-finder/src/spl_file_info.rs14
2 files changed, 11 insertions, 4 deletions
diff --git a/crates/shirabe-symfony-finder/Cargo.toml b/crates/shirabe-symfony-finder/Cargo.toml
index 8088aa23..0823bfaf 100644
--- a/crates/shirabe-symfony-finder/Cargo.toml
+++ b/crates/shirabe-symfony-finder/Cargo.toml
@@ -10,6 +10,7 @@ license.workspace = true
[dependencies]
shirabe-pcre.workspace = true
shirabe-php-shim.workspace = true
+anyhow.workspace = true
chrono.workspace = true
indexmap.workspace = true
regex.workspace = true
diff --git a/crates/shirabe-symfony-finder/src/spl_file_info.rs b/crates/shirabe-symfony-finder/src/spl_file_info.rs
index b719efc5..40bd153a 100644
--- a/crates/shirabe-symfony-finder/src/spl_file_info.rs
+++ b/crates/shirabe-symfony-finder/src/spl_file_info.rs
@@ -76,9 +76,15 @@ impl SplFileInfo {
shirabe_php_shim::realpath(&self.pathname)
}
- pub fn get_size(&self) -> i64 {
- // \SplFileInfo::getSize() returns the file size in bytes (throws on failure).
- // TODO(php-semantics): PHP throws a \RuntimeException on stat failure; this returns 0 instead.
- shirabe_php_shim::filesize(&self.pathname).unwrap_or(0)
+ pub fn get_size(&self) -> anyhow::Result<i64> {
+ // Inherited from \SplFileInfo, whose failure message names the base class even for subclasses.
+ match shirabe_php_shim::filesize(&self.pathname) {
+ Some(size) => Ok(size),
+ None => Err(shirabe_php_shim::RuntimeException::new(format!(
+ "SplFileInfo::getSize(): stat failed for {}",
+ self.pathname
+ ))
+ .into()),
+ }
}
}