mirror of
https://github.com/golang/go
synced 2024-11-14 22:50:27 -07:00
0d932d434b
R=golang-dev, bradfitz, r CC=golang-dev https://golang.org/cl/8573043
44 lines
810 B
C
44 lines
810 B
C
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build darwin freebsd linux netbsd openbsd
|
|
|
|
#include <u.h>
|
|
#include <errno.h>
|
|
#include <sys/wait.h>
|
|
#define NOPLAN9DEFINES
|
|
#include <libc.h>
|
|
|
|
int
|
|
runcmd(char **argv)
|
|
{
|
|
int pid, pid1, status;
|
|
|
|
switch(pid = fork()) {
|
|
case -1:
|
|
return -1;
|
|
case 0:
|
|
execvp(argv[0], argv);
|
|
fprint(2, "exec %s: %r\n", argv[0]);
|
|
_exit(1);
|
|
}
|
|
|
|
while((pid1 = wait(&status)) < 0) {
|
|
if(errno != EINTR) {
|
|
werrstr("waitpid: %r");
|
|
return -1;
|
|
}
|
|
}
|
|
if(pid1 != pid) {
|
|
werrstr("unexpected pid in wait");
|
|
return -1;
|
|
}
|
|
if(!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
|
|
werrstr("unsuccessful exit status %#x", status);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|