aboutsummaryrefslogtreecommitdiffstats
path: root/extension/readfile.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2010-11-18 23:00:31 +0200
committerArnold D. Robbins <arnold@skeeve.com>2010-11-18 23:00:31 +0200
commit6f3612539c425da2bc1d34db621696e6a273b01c (patch)
tree9623b3ac2c54a93e5eed3be2b1dda7f4e4bf0e47 /extension/readfile.c
parent4e3701015635401df2fc4da58abaab7645f4ebd3 (diff)
downloadegawk-6f3612539c425da2bc1d34db621696e6a273b01c.tar.gz
egawk-6f3612539c425da2bc1d34db621696e6a273b01c.tar.bz2
egawk-6f3612539c425da2bc1d34db621696e6a273b01c.zip
Bring latest byte code gawk into git. Hurray!
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);
}