+ else { /* program_is_wrapper==1 */
+ pid_t pid_wrapper;
+ fflush(stdout);fflush(stdin);
+ switch (pid_wrapper = fork()) {
+ case -1:
+ printf("ERROR [fork: %s]\n", strerror(errno));
+ error("fork: %s", strerror(errno));
+ /*NOTREACHED*/
+
+ case 0: /* child */
+ {
+ char *argvchild[6];
+ char *cmd = vstralloc(DUMPER_DIR, "/", program, NULL);
+ argvchild[0] = program;
+ argvchild[1] = "selfcheck";
+ argvchild[2] = disk;
+ argvchild[3] = amdevice;
+ argvchild[4] = optstr;
+ argvchild[5] = NULL;
+ execve(cmd,argvchild,safe_env());
+ exit(127);
+ }
+ default: /* parent */
+ {
+ int status;
+ waitpid(pid_wrapper, &status, 0);
+ }
+ }
+ fflush(stdout);fflush(stdin);
+ amfree(device);
+ amfree(qamdevice);
+ amfree(qdisk);
+ return;
+ }