aboutsummaryrefslogtreecommitdiffstats
path: root/extension
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-07-09 21:37:18 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-07-09 21:37:18 +0300
commit077270f8fb16ad5dbf33fe0ff8afedd34fdf435a (patch)
treec8d3b0c9704d1cedc1f6b72236756e6839d1fca5 /extension
parent7d37bcd5a8066718b15de8c03725708819389931 (diff)
downloadegawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.tar.gz
egawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.tar.bz2
egawk-077270f8fb16ad5dbf33fe0ff8afedd34fdf435a.zip
Change to readfile return value.
Diffstat (limited to 'extension')
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/readfile.c13
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[] = {