void spass_call(int argc, char ** argv, Formula * fl, ui time) { int fch1[2], fch2[2]; char ** sp_argv; ui cpid; sp_argv = malloc((argc + 2)*sizeof(char*)); memcpy(sp_argv, argv, argc*sizeof(char*)); sp_argv[argc] = "-Stdin"; sp_argv[argc + 1] = NULL; if (pipe(fch1) == -1) { perror("spass_call"); return; } if (pipe(fch2) == -1) { perror("spass_call"); return; } if (!(cpid = fork())) { dup2(fch1[0], 0); close(fch1[1]); dup2(fch2[1], 1); close(fch2[0]); execvp(sp_argv[0],sp_argv); perror("spass_call"); return; } if (cpid == -1) { perror("spass_call"); return; } in = fdopen(fch2[0], "r"); close(fch2[1]); out = fdopen(fch1[1], "w"); close(fch1[0]); spass_in(fl, time); spass_out(); } ======================= Translated =================================== void spass_call(int argc, char ** argv, Formula * fl_, ui time_) { char *sp_argv = NULL; long args_len = 0; int i = 0; for (i=0;i