diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-07-10 14:45:07 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-07-10 14:45:07 -0400 |
| commit | 394da24c854fdd2dc08e37090263972b732f5424 (patch) | |
| tree | 5fafbf0b64b0883d176418747b45b7d8316ca6c9 /src/stdlib/paths.c | |
| parent | 39501916acc08208360d9f920af425d0e8e230bb (diff) | |
| parent | cd1e9b5fd52dbc993463d58c41895aba9cd78966 (diff) | |
Merge branch 'main' into decimals
Diffstat (limited to 'src/stdlib/paths.c')
| -rw-r--r-- | src/stdlib/paths.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/stdlib/paths.c b/src/stdlib/paths.c index 5047d615..94baf995 100644 --- a/src/stdlib/paths.c +++ b/src/stdlib/paths.c @@ -372,7 +372,7 @@ public OptionalList_t Path$read_bytes(Path_t path, OptionalInt_t count) close(fd); if (count.small != 0 && (int64_t)len < target_count) fail("Could not read ", target_count, " bytes from ", path, " (only got ", (uint64_t)len, ")"); - return (List_t){.data=content, .atomic=1, .stride=1, .length=len}; + return (List_t){.data=content, .atomic=1, .stride=1, .length=(int64_t)len}; } } @@ -609,6 +609,22 @@ public Text_t Path$extension(Path_t path, bool full) return Text$from_str(extension); } +public bool Path$has_extension(Path_t path, Text_t extension) +{ + if (path.components.length < 2) + return extension.length == 0; + + Text_t last = *(Text_t*)(path.components.data + path.components.stride*(path.components.length-1)); + + if (extension.length == 0) + return !Text$has(Text$from(last, I(2)), Text(".")) || Text$equal_values(last, Text("..")); + + if (!Text$starts_with(extension, Text("."))) + extension = Texts(Text("."), extension); + + return Text$ends_with(Text$from(last, I(2)), extension); +} + public Path_t Path$child(Path_t path, Text_t name) { if (Text$has(name, Text("/")) || Text$has(name, Text(";"))) |
