// 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 dragonfly freebsd linux netbsd openbsd solaris #include #include #include #define NOPLAN9DEFINES #include 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; }