aboutsummaryrefslogtreecommitdiffstats
path: root/extension/readfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'extension/readfile.c')
-rw-r--r--extension/readfile.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/extension/readfile.c b/extension/readfile.c
index 37f39a2c..edab20f8 100644
--- a/extension/readfile.c
+++ b/extension/readfile.c
@@ -40,8 +40,7 @@
/* do_readfile --- read a file into memory */
NODE *
-do_readfile(tree)
-NODE *tree;
+do_readfile(int nargs)
{
NODE *filename;
int ret = -1;
@@ -52,27 +51,24 @@ NODE *tree;
if (do_lint && get_curfunc_arg_count() > 1)
lintwarn("readfile: called with too many arguments");
- filename = get_argument(tree, 0);
+ filename = get_scalar_argument(0, FALSE);
if (filename != NULL) {
(void) force_string(filename);
ret = stat(filename->stptr, & sbuf);
if (ret < 0) {
update_ERRNO();
- free_temp(filename);
goto done;
} else if ((sbuf.st_mode & S_IFMT) != S_IFREG) {
errno = EINVAL;
ret = -1;
update_ERRNO();
- free_temp(filename);
goto done;
}
if ((fd = open(filename->stptr, O_RDONLY|O_BINARY)) < 0) {
ret = -1;
update_ERRNO();
- free_temp(filename);
goto done;
}
@@ -83,24 +79,18 @@ NODE *tree;
(void) close(fd);
ret = -1;
update_ERRNO();
- free_temp(filename);
goto done;
}
close(fd);
- free_temp(filename);
- set_value(tmp_string(text, sbuf.st_size));
- return tmp_number((AWKNUM) 0);
+ return make_string(text, sbuf.st_size);
} else if (do_lint)
lintwarn("filename: called with no arguments");
done:
/* Set the return value */
- set_value(tmp_number((AWKNUM) ret));
-
- /* Just to make the interpreter happy */
- return tmp_number((AWKNUM) 0);
+ return make_number((AWKNUM) ret);
}
@@ -113,5 +103,5 @@ void *dl;
{
make_builtin("readfile", do_readfile, 1);
- return tmp_number((AWKNUM) 0);
+ return make_number((AWKNUM) 0);
}