From 20d64927755218ef64dceb13ceb12ed1dc50ee37 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 19 Nov 2019 02:25:55 +0300 Subject: [PATCH] os: make read_lines() return ?[]string --- vlib/os/os.v | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/vlib/os/os.v b/vlib/os/os.v index e87eee6033..df8487bdad 100644 --- a/vlib/os/os.v +++ b/vlib/os/os.v @@ -154,16 +154,16 @@ pub fn cp_r(osource_path, odest_path string, overwrite bool) ?bool{ //single file copy if !os.is_dir(source_path) { adjasted_path := if os.is_dir(dest_path) { - filepath.join(dest_path, os.filename(source_path)) - } else { - dest_path + filepath.join(dest_path, os.filename(source_path)) + } else { + dest_path } if os.file_exists(adjasted_path) { if overwrite { - os.rm(adjasted_path) + os.rm(adjasted_path) } - else { - return error('Destination file path already exist') + else { + return error('Destination file path already exist') } } os.cp(source_path, adjasted_path) or { return error(err) } @@ -196,8 +196,7 @@ fn vfopen(path, mode string) *C.FILE { } // read_lines reads the file in `path` into an array of lines. -// TODO return `?[]string` TODO implement `?[]` support -pub fn read_lines(path string) []string { +pub fn read_lines(path string) ?[]string { mut res := []string mut buf_len := 1024 mut buf := malloc(buf_len) @@ -205,9 +204,7 @@ pub fn read_lines(path string) []string { mode := 'rb' mut fp := vfopen(path, mode) if isnil(fp) { - // TODO - // return error('failed to open file "$path"') - return res + return error('read_lines() failed to open file "$path"') } mut buf_index := 0 @@ -217,7 +214,7 @@ pub fn read_lines(path string) []string { buf_len *= 2 buf = C.realloc(buf, buf_len) if isnil(buf) { - panic('Could not reallocate the read buffer') + return error('could not reallocate the read buffer') } buf_index = len continue @@ -235,8 +232,10 @@ pub fn read_lines(path string) []string { return res } -fn read_ulines(path string) []ustring { - lines := read_lines(path) +fn read_ulines(path string) ?[]ustring { + lines := read_lines(path) or { + return err + } // mut ulines := new_array(0, lines.len, sizeof(ustring)) mut ulines := []ustring for myline in lines { @@ -983,7 +982,7 @@ pub fn tmpdir() string { /* if path == '' { // TODO untested - path = C.NSTemporaryDirectory() + path = C.NSTemporaryDirectory() } */ if path == '' { path = '/tmp' }