~vcs-imports/gawk/master

« back to all changes in this revision

Viewing changes to extension/fork.c

Update README.solaris.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 */
7
7
 
8
8
/*
9
 
 * Copyright (C) 2001, 2004, 2011, 2012, 2013, 2018
10
 
 * the Free Software Foundation, Inc.
11
 
 *
 
9
 * Copyright (C) 2001, 2004, 2011, 2012, 2013 the Free Software Foundation, Inc.
 
10
 * 
12
11
 * This file is part of GAWK, the GNU implementation of the
13
12
 * AWK Programming Language.
14
 
 *
 
13
 * 
15
14
 * GAWK is free software; you can redistribute it and/or modify
16
15
 * it under the terms of the GNU General Public License as published by
17
16
 * the Free Software Foundation; either version 3 of the License, or
18
17
 * (at your option) any later version.
19
 
 *
 
18
 * 
20
19
 * GAWK is distributed in the hope that it will be useful,
21
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
22
 * GNU General Public License for more details.
24
 
 *
 
23
 * 
25
24
 * You should have received a copy of the GNU General Public License
26
25
 * along with this program; if not, write to the Free Software
27
26
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
49
48
#define N_(msgid) msgid
50
49
 
51
50
static const gawk_api_t *api;   /* for convenience macros to work */
52
 
static awk_ext_id_t ext_id;
 
51
static awk_ext_id_t *ext_id;
53
52
static const char *ext_version = "fork extension: version 1.0";
54
53
static awk_bool_t (*init_func)(void) = NULL;
55
54
 
72
71
/*  do_fork --- provide dynamically loaded fork() builtin for gawk */
73
72
 
74
73
static awk_value_t *
75
 
do_fork(int nargs, awk_value_t *result, struct awk_ext_func *unused)
 
74
do_fork(int nargs, awk_value_t *result)
76
75
{
77
76
        int ret = -1;
78
77
 
79
78
        assert(result != NULL);
80
79
 
 
80
        if (do_lint && nargs > 0)
 
81
                lintwarn(ext_id, _("fork: called with too many arguments"));
 
82
 
81
83
        ret = fork();
82
84
 
83
85
        if (ret < 0)
104
106
/*  do_waitpid --- provide dynamically loaded waitpid() builtin for gawk */
105
107
 
106
108
static awk_value_t *
107
 
do_waitpid(int nargs, awk_value_t *result, struct awk_ext_func *unused)
 
109
do_waitpid(int nargs, awk_value_t *result)
108
110
{
109
111
        awk_value_t pid;
110
112
        int ret = -1;
112
114
 
113
115
        assert(result != NULL);
114
116
 
 
117
        if (do_lint && nargs > 1)
 
118
                lintwarn(ext_id, _("waitpid: called with too many arguments"));
 
119
 
115
120
        if (get_argument(0, AWK_NUMBER, &pid)) {
116
121
                options = WNOHANG|WUNTRACED;
117
122
                ret = waitpid(pid.num_value, NULL, options);
118
123
                if (ret < 0)
119
124
                        update_ERRNO_int(errno);
120
 
        }
 
125
        } else if (do_lint)
 
126
                lintwarn(ext_id, _("wait: called with no arguments"));
121
127
 
122
128
        /* Set the return value */
123
129
        return make_number(ret, result);
127
133
/*  do_wait --- provide dynamically loaded wait() builtin for gawk */
128
134
 
129
135
static awk_value_t *
130
 
do_wait(int nargs, awk_value_t *result, struct awk_ext_func *unused)
 
136
do_wait(int nargs, awk_value_t *result)
131
137
{
132
138
        int ret;
133
139
 
134
140
        assert(result != NULL);
135
141
 
 
142
        if (do_lint && nargs > 0)
 
143
                lintwarn(ext_id, _("wait: called with too many arguments"));
 
144
 
136
145
        ret = wait(NULL);
137
146
        if (ret < 0)
138
147
                update_ERRNO_int(errno);
142
151
}
143
152
 
144
153
static awk_ext_func_t func_table[] = {
145
 
        { "fork", do_fork, 0, 0, awk_false, NULL },
146
 
        { "waitpid", do_waitpid, 1, 1, awk_false, NULL },
147
 
        { "wait", do_wait, 0, 0, awk_false, NULL },
 
154
        { "fork", do_fork, 0 },
 
155
        { "waitpid", do_waitpid, 1 },
 
156
        { "wait", do_wait, 0 },
148
157
};
149
158
 
150
159
/* define the dl_load function using the boilerplate macro */