Skip to content

Commit e201665

Browse files
authored
os: fix file_ext function (#14566)
1 parent f971da9 commit e201665

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

vlib/os/os.v

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,20 @@ pub fn is_dir_empty(path string) bool {
173173

174174
// file_ext will return the part after the last occurence of `.` in `path`.
175175
// The `.` is included.
176+
// Examples:
177+
// ```v
178+
// assert os.file_ext('file.v') == '.v'
179+
// assert os.file_ext('.ignore_me') == ''
180+
// assert os.file_ext('.') == ''
181+
// ```
176182
pub fn file_ext(path string) string {
177-
pos := path.last_index('.') or { return '' }
183+
if path.len < 3 {
184+
return empty_str
185+
}
186+
pos := path.last_index(dot_str) or { return empty_str }
187+
if pos + 1 >= path.len || pos == 0 {
188+
return empty_str
189+
}
178190
return path[pos..]
179191
}
180192

vlib/os/os_test.v

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,19 @@ fn test_is_executable_writable_readable() ? {
585585
os.rm(file_name) or { panic(err) }
586586
}
587587

588-
fn test_ext() {
588+
fn test_file_ext() {
589589
assert os.file_ext('file.v') == '.v'
590+
assert os.file_ext('file.js.v') == '.v'
591+
assert os.file_ext('file.ext1.ext2.ext3') == '.ext3'
592+
assert os.file_ext('.ignore_me.v') == '.v'
590593
assert os.file_ext('file') == ''
594+
assert os.file_ext('.git') == ''
595+
assert os.file_ext('file.') == ''
596+
assert os.file_ext('.') == ''
597+
assert os.file_ext('..') == ''
598+
assert os.file_ext('file...') == ''
599+
assert os.file_ext('.file.') == ''
600+
assert os.file_ext('..file..') == ''
591601
}
592602

593603
fn test_join() {

0 commit comments

Comments
 (0)