authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-11 17:41:34-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-11 17:41:34-07:00
log52bc1442d6e48438a1f8fb155a4174e41d02090f
tree5c377ae9f1316e1ebd12c2efbe605e8d4fdb1235
parent1852dc7e13b49a0b3238b8d654d09c4fc91aa3e4

std.fs.path.extension: add additional API guarantee

Added: The returned slice is guaranteed to have its pointer within the start and end pointer address range of `path`, even if it is length zero.

1 files changed, 4 insertions(+), 2 deletions(-)

lib/std/fs/path.zig+4-2
...@@ -1201,15 +1201,17 @@ fn testRelativeWindows(from: []const u8, to: []const u8, expected_output: []cons...@@ -1201,15 +1201,17 @@ fn testRelativeWindows(from: []const u8, to: []const u8, expected_output: []cons
1201/// - `"src.keep.me"` ⇒ `".me"`1201/// - `"src.keep.me"` ⇒ `".me"`
1202/// - `"/src/keep.me"` ⇒ `".me"`1202/// - `"/src/keep.me"` ⇒ `".me"`
1203/// - `"/src/keep.me/"` ⇒ `".me"`1203/// - `"/src/keep.me/"` ⇒ `".me"`
1204/// The returned slice is guaranteed to have its pointer within the start and end
1205/// pointer address range of `path`, even if it is length zero.
1204pub fn extension(path: []const u8) []const u8 {1206pub fn extension(path: []const u8) []const u8 {
1205 const filename = basename(path);1207 const filename = basename(path);
1206 return if (std.mem.lastIndexOf(u8, filename, ".")) |index|1208 return if (std.mem.lastIndexOf(u8, filename, ".")) |index|
1207 if (index == 0 or index == filename.len - 1)1209 if (index == 0 or index == filename.len - 1)
1208 ""1210 path[path.len..]
1209 else1211 else
1210 filename[index..]1212 filename[index..]
1211 else1213 else
1212 "";1214 path[path.len..];
1213}1215}
12141216
1215fn testExtension(path: []const u8, expected: []const u8) void {1217fn testExtension(path: []const u8, expected: []const u8) void {