From 3438b2129cd933e430349a6bd66a1933071c92c2 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sun, 1 Apr 2012 17:07:45 -0400 Subject: Update ERRNO API. --- extension/fork.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'extension/fork.c') diff --git a/extension/fork.c b/extension/fork.c index 88353879..8b8558e6 100644 --- a/extension/fork.c +++ b/extension/fork.c @@ -44,7 +44,7 @@ do_fork(int nargs) ret = fork(); if (ret < 0) - update_ERRNO(); + update_ERRNO_int(errno); else if (ret == 0) { /* update PROCINFO in the child */ @@ -83,7 +83,7 @@ do_waitpid(int nargs) options = WNOHANG|WUNTRACED; ret = waitpid(pid, NULL, options); if (ret < 0) - update_ERRNO(); + update_ERRNO_int(errno); } else if (do_lint) lintwarn("wait: called with no arguments"); -- cgit v1.2.3 From aa23de50eb7c81a3e8f94769c5288aecfeb52b4c Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Mon, 2 Apr 2012 22:36:26 -0400 Subject: Minor extension fixes. --- extension/fork.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'extension/fork.c') diff --git a/extension/fork.c b/extension/fork.c index 8b8558e6..7d6ab362 100644 --- a/extension/fork.c +++ b/extension/fork.c @@ -45,15 +45,17 @@ do_fork(int nargs) if (ret < 0) update_ERRNO_int(errno); - else if (ret == 0) { + else if (ret == 0 && PROCINFO_node != NULL) { /* update PROCINFO in the child */ aptr = assoc_lookup(PROCINFO_node, tmp = make_string("pid", 3)); - (*aptr)->numbr = (AWKNUM) getpid(); + unref(*aptr); + *aptr = make_number((AWKNUM) getpid()); unref(tmp); aptr = assoc_lookup(PROCINFO_node, tmp = make_string("ppid", 4)); - (*aptr)->numbr = (AWKNUM) getppid(); + unref(*aptr); + *aptr = make_number((AWKNUM) getppid()); unref(tmp); } -- cgit v1.2.3 From bc9ed3fd239984429613095e6cfc142092f036c4 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sat, 7 Apr 2012 16:30:50 -0400 Subject: Extension enhancements and tests. --- extension/fork.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'extension/fork.c') diff --git a/extension/fork.c b/extension/fork.c index 7d6ab362..5a6e96d5 100644 --- a/extension/fork.c +++ b/extension/fork.c @@ -93,6 +93,25 @@ do_waitpid(int nargs) return make_number((AWKNUM) ret); } + +/* do_wait --- provide dynamically loaded wait() builtin for gawk */ + +static NODE * +do_wait(int nargs) +{ + int ret; + + if (do_lint && nargs > 0) + lintwarn("wait: called with too many arguments"); + + ret = wait(NULL); + if (ret < 0) + update_ERRNO_int(errno); + + /* Set the return value */ + return make_number((AWKNUM) ret); +} + /* dlload --- load new builtins in this library */ NODE * @@ -102,5 +121,6 @@ void *dl; { make_builtin("fork", do_fork, 0); make_builtin("waitpid", do_waitpid, 1); + make_builtin("wait", do_wait, 0); return make_number((AWKNUM) 0); } -- cgit v1.2.3