ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/util.C
(Generate patch)

Comparing gvpe/src/util.C (file contents):
Revision 1.19 by pcg, Wed Mar 23 21:55:39 2005 UTC vs.
Revision 1.21 by pcg, Tue Apr 26 00:55:56 2005 UTC

16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details. 17 GNU General Public License for more details.
18 18
19 You should have received a copy of the GNU General Public License 19 You should have received a copy of the GNU General Public License
20 along with gvpe; if not, write to the Free Software 20 along with gvpe; if not, write to the Free Software
21 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22*/ 22*/
23 23
24#include "config.h" 24#include "config.h"
25 25
26#include <cstdio> 26#include <cstdio>
129 return 0; 129 return 0;
130} 130}
131 131
132bool run_script (const run_script_cb &cb, bool wait) 132bool run_script (const run_script_cb &cb, bool wait)
133{ 133{
134 int pid; 134 if (wait)
135 signal (SIGCHLD, SIG_DFL); // this is extremely ugly, but I did not feel like implementing a complete wait() event logic. It's easier to write this long comment to make your editor happy.
135 136
136 if ((pid = fork ()) == 0) 137 int pid = fork ();
138
139 if (pid == 0)
137 { 140 {
138 execl ("/bin/sh", "/bin/sh", "-c", cb (), (char *) 0); 141 execl ("/bin/sh", "/bin/sh", "-c", cb (), (char *) 0);
139 exit (EXIT_FAILURE); 142 exit (EXIT_FAILURE);
140 } 143 }
141 else if (pid > 0) 144 else if (pid > 0)
142 { 145 {
143 if (wait) 146 if (wait)
144 { 147 {
145 int status; 148 int status;
146
147 if (waitpid (pid, &status, 0) < 0) 149 int res = waitpid (pid, &status, 0);
150
151 signal (SIGCHLD, SIG_IGN);
152
153 if (res < 0)
148 { 154 {
149 slog (L_WARN, _("waiting for an external command failed: %s."), 155 slog (L_WARN, _("waiting for an external command failed: %s."),
150 strerror (errno)); 156 strerror (errno));
151 return false; 157 return false;
152 } 158 }
156 WEXITSTATUS (status), status); 162 WEXITSTATUS (status), status);
157 return false; 163 return false;
158 } 164 }
159 } 165 }
160 } 166 }
167 else
168 {
169 slog (L_ERR, _("unable to fork, exiting: %s"), strerror (errno));
170 exit (EXIT_FAILURE);
171 }
161 172
162 return true; 173 return true;
163} 174}
164 175
165#if ENABLE_HTTP_PROXY 176#if ENABLE_HTTP_PROXY

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines