diff options
Diffstat (limited to 'extension')
-rw-r--r-- | extension/Makefile.in | 6 | ||||
-rw-r--r-- | extension/filefuncs2.c | 99 |
2 files changed, 40 insertions, 65 deletions
diff --git a/extension/Makefile.in b/extension/Makefile.in index c766d898..72c75b02 100644 --- a/extension/Makefile.in +++ b/extension/Makefile.in @@ -85,9 +85,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/longlong.m4 \ - $(top_srcdir)/m4/mpfr.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/mpfr.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noreturn.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/readline.m4 \ $(top_srcdir)/m4/socket.m4 $(top_srcdir)/m4/ulonglong.m4 \ diff --git a/extension/filefuncs2.c b/extension/filefuncs2.c index 73bea0c2..67b14185 100644 --- a/extension/filefuncs2.c +++ b/extension/filefuncs2.c @@ -7,7 +7,8 @@ */ /* - * Copyright (C) 2001, 2004, 2005, 2010, 2011 the Free Software Foundation, Inc. + * Copyright (C) 2001, 2004, 2005, 2010, 2011, 2012 + * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. @@ -54,14 +55,14 @@ do_chdir(int nargs) if (do_lint && nargs != 1) lintwarn(ext_id, "chdir: called with incorrect number of arguments"); - newdir = get_curfunc_param(ext_id, 0, AWK_PARAM_STRING); + newdir = get_curfunc_param(0, AWK_PARAM_STRING); ret = chdir(newdir->str_value.str); if (ret < 0) - update_ERRNO_int(ext_id, errno); + update_ERRNO_int(errno); result.val_type = AWK_NUMBER; result.num_value = ret; - set_return_value(ext_id, & result); + set_return_value(& result); return 1; } @@ -220,10 +221,10 @@ array_set(awk_array_t array, const char *sub, awk_value_t *value) memset(& element, 0, sizeof(element)); - element.index = dup_string(ext_id, sub, strlen(sub))->str_value; + element.index = dup_string(sub, strlen(sub))->str_value; element.value = *value; - set_array_element(ext_id, array, & element); + set_array_element(array, & element); } /* do_stat --- provide a stat() function for gawk */ @@ -246,8 +247,8 @@ do_stat(int nargs) } /* file is first arg, array to hold results is second */ - file_param = get_curfunc_param(ext_id, 0, AWK_PARAM_STRING); - array_param = get_curfunc_param(ext_id, 0, AWK_PARAM_ARRAY); + file_param = get_curfunc_param(0, AWK_PARAM_STRING); + array_param = get_curfunc_param(0, AWK_PARAM_ARRAY); if (file_param == NULL || array_param == NULL) { warning(ext_id, "stat: bad paramaters"); @@ -259,43 +260,43 @@ do_stat(int nargs) array = array_param->array_cookie; /* empty out the array */ - clear_array(ext_id, array); + clear_array(array); /* lstat the file, if error, set ERRNO and return */ ret = lstat(name, & sbuf); if (ret < 0) { - update_ERRNO_int(ext_id, errno); + update_ERRNO_int(errno); ret = 0; goto out; } /* fill in the array */ - array_set(array, "name", make_string(ext_id, name, file_param->str_value.len)); - array_set(array, "dev", make_number(ext_id, (double) sbuf.st_dev)); - array_set(array, "ino", make_number(ext_id, (double) sbuf.st_ino)); - array_set(array, "mode", make_number(ext_id, (double) sbuf.st_mode)); - array_set(array, "nlink", make_number(ext_id, (double) sbuf.st_nlink)); - array_set(array, "uid", make_number(ext_id, (double) sbuf.st_uid)); - array_set(array, "gid", make_number(ext_id, (double) sbuf.st_gid)); - array_set(array, "size", make_number(ext_id, (double) sbuf.st_size)); - array_set(array, "blocks", make_number(ext_id, (double) sbuf.st_blocks)); - array_set(array, "atime", make_number(ext_id, (double) sbuf.st_atime)); - array_set(array, "mtime", make_number(ext_id, (double) sbuf.st_mtime)); - array_set(array, "ctime", make_number(ext_id, (double) sbuf.st_ctime)); + array_set(array, "name", make_string(name, file_param->str_value.len)); + array_set(array, "dev", make_number((double) sbuf.st_dev)); + array_set(array, "ino", make_number((double) sbuf.st_ino)); + array_set(array, "mode", make_number((double) sbuf.st_mode)); + array_set(array, "nlink", make_number((double) sbuf.st_nlink)); + array_set(array, "uid", make_number((double) sbuf.st_uid)); + array_set(array, "gid", make_number((double) sbuf.st_gid)); + array_set(array, "size", make_number((double) sbuf.st_size)); + array_set(array, "blocks", make_number((double) sbuf.st_blocks)); + array_set(array, "atime", make_number((double) sbuf.st_atime)); + array_set(array, "mtime", make_number((double) sbuf.st_mtime)); + array_set(array, "ctime", make_number((double) sbuf.st_ctime)); /* for block and character devices, add rdev, major and minor numbers */ if (S_ISBLK(sbuf.st_mode) || S_ISCHR(sbuf.st_mode)) { - array_set(array, "rdev", make_number(ext_id, (double) sbuf.st_rdev)); - array_set(array, "major", make_number(ext_id, (double) major(sbuf.st_rdev))); - array_set(array, "minor", make_number(ext_id, (double) minor(sbuf.st_rdev))); + array_set(array, "rdev", make_number((double) sbuf.st_rdev)); + array_set(array, "major", make_number((double) major(sbuf.st_rdev))); + array_set(array, "minor", make_number((double) minor(sbuf.st_rdev))); } #ifdef HAVE_ST_BLKSIZE - array_set(array, "blksize", make_number(ext_id, (double) sbuf.st_blksize)); + array_set(array, "blksize", make_number((double) sbuf.st_blksize)); #endif /* HAVE_ST_BLKSIZE */ pmode = format_mode(sbuf.st_mode); - array_set(array, "pmode", make_string(ext_id, pmode, strlen(pmode))); + array_set(array, "pmode", make_string(pmode, strlen(pmode))); /* for symbolic links, add a linkval field */ if (S_ISLNK(sbuf.st_mode)) { @@ -304,7 +305,7 @@ do_stat(int nargs) if ((buf = read_symlink(name, sbuf.st_size, &linksize)) != NULL) - array_set(array, "linkval", make_string(ext_id, buf, linksize)); + array_set(array, "linkval", make_string(buf, linksize)); else warning(ext_id, "unable to read symbolic link `%s'", name); } @@ -345,46 +346,20 @@ do_stat(int nargs) #endif } - array_set(array, "type", make_string(ext_id, type, strlen(type))); + array_set(array, "type", make_string(type, strlen(type))); ret = 1; /* success */ out: - set_return_value(ext_id, make_number(ext_id, (double) ret)); + set_return_value(make_number((double) ret)); } +static awk_ext_func_t func_table[] = { + { "chdir", do_chdir, 1 }, + { "stat", do_stat, 2 }, +}; -/* dl_load --- load new builtins in this library */ -int dl_load(const gawk_api_t *const api_p, awk_ext_id_t id) -{ - static awk_ext_func_t func_table[] = { - { "chdir", do_chdir, 1 }, - { "stat", do_stat, 2 }, - }; - size_t i, j; - int errors = 0; - - if (api->major_version != GAWK_API_MAJOR_VERSION - || api->minor_version < GAWK_API_MINOR_VERSION) { - fprintf(stderr, "filefuncs: version mismatch with gawk!\n"); - fprintf(stderr, "\tmy version (%d, %d), gawk version (%d, %d)\n", - GAWK_API_MAJOR_VERSION, GAWK_API_MINOR_VERSION, - api->major_version, api->minor_version); - exit(1); - } - - api = api_p; - ext_id = id; +/* define the dl_load function using the boilerplate macro */ - /* load functions */ - for (i = 0, j = sizeof(func_table) / sizeof(func_table[0]); i < j; i++) { - if (! add_ext_func(ext_id, & func_table[i], "")) { - warning(ext_id, "filefuncs: could not add %s\n", - func_table[i].name); - errors++; - } - } - - return (errors == 0); -} +dl_load_func(api, ext_id, func_table, filefuncs, "") |