diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-07-09 21:37:18 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-07-09 21:37:18 +0300 |
commit | 077270f8fb16ad5dbf33fe0ff8afedd34fdf435a (patch) | |
tree | c8d3b0c9704d1cedc1f6b72236756e6839d1fca5 /extension | |
parent | 7d37bcd5a8066718b15de8c03725708819389931 (diff) | |
download | egawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.tar.gz egawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.tar.bz2 egawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.zip |
Change to readfile return value.
Diffstat (limited to 'extension')
-rw-r--r-- | extension/ChangeLog | 5 | ||||
-rw-r--r-- | extension/readfile.c | 13 |
2 files changed, 12 insertions, 6 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index 40224589..7e61fc54 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2012-07-09 Arnold D. Robbins <arnold@skeeve.com> + + * filefuncs.c (do_readfile): Return "" and set ERRNO on error + instead of returning -1. Per suggestion from Andrew Schorr. + 2012-07-08 Arnold D. Robbins <arnold@skeeve.com> * filefuncs.c (array_set): Adjust for change in set_array_element API. diff --git a/extension/readfile.c b/extension/readfile.c index 89723036..56bdcbc3 100644 --- a/extension/readfile.c +++ b/extension/readfile.c @@ -59,16 +59,19 @@ static awk_value_t * do_readfile(int nargs, awk_value_t *result) { awk_value_t filename; - double ret = -1; + int ret; struct stat sbuf; char *text; int fd; assert(result != NULL); + make_string("", 0, result); /* default return value */ if (do_lint && nargs > 1) lintwarn(ext_id, "readfile: called with too many arguments"); + unset_ERRNO(); + if (get_argument(0, AWK_STRING, &filename)) { ret = stat(filename.str_value.str, & sbuf); if (ret < 0) { @@ -76,13 +79,11 @@ do_readfile(int nargs, awk_value_t *result) goto done; } else if ((sbuf.st_mode & S_IFMT) != S_IFREG) { errno = EINVAL; - ret = -1; update_ERRNO_int(errno); goto done; } if ((fd = open(filename.str_value.str, O_RDONLY|O_BINARY)) < 0) { - ret = -1; update_ERRNO_int(errno); goto done; } @@ -92,20 +93,20 @@ do_readfile(int nargs, awk_value_t *result) if ((ret = read(fd, text, sbuf.st_size)) != sbuf.st_size) { (void) close(fd); - ret = -1; update_ERRNO_int(errno); goto done; } close(fd); - return make_string(text, sbuf.st_size, result); + make_string(text, sbuf.st_size, result); + goto done; } else if (do_lint) lintwarn(ext_id, "readfile: called with no arguments"); done: /* Set the return value */ - return make_number(ret, result); + return result; } static awk_ext_func_t func_table[] = { |