- /* parent reads from fds[0] */
- close(fds[1]);
- retval = 0;
- while (1) {
- res = read(fds[0], buffer, sizeof(buffer) - 1);
- if (res <= 0)
- break;
- buffer[res] = '\0';
- if (res > len) {
- dbg("result len %d too short", len);
- retval = -1;
- }
- if (value_set) {
- dbg("result value already set");
- retval = -1;
- } else {
- value_set = 1;
- strncpy(value, buffer, len);
- pos = value + strlen(value)-1;
- if (pos[0] == '\n')
- pos[0] = '\0';
- dbg("result is '%s'", value);
- }
- }
- close(fds[0]);
- res = wait(&status);
- if (res < 0) {
- dbg("wait failed result %d", res);
- retval = -1;
- }
-
- if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) {
- dbg("exec program status 0x%x", status);
- retval = -1;
- }