static void find_wrapper_target(struct wrapper_data *data) { FILE *inpipe = NULL; char str[MAXPATHLEN + 1]; if (find_target_in_path(data)) return; if (find_target_in_envd(data, 0)) return; /* Only our wrapper is in PATH, so get the CC path using gcc-config and execute the real binary in there... */ inpipe = popen(GCC_CONFIG " --get-bin-path", "r"); if (inpipe == NULL) wrapper_exit( "Could not open pipe: %s\n", wrapper_strerror(errno, data)); if (fgets(str, MAXPATHLEN, inpipe) == 0) wrapper_exit( "Could not get compiler binary path: %s\n", wrapper_strerror(errno, data)); strncpy(data->bin, str, sizeof(data->bin) - 1); data->bin[strlen(data->bin) - 1] = '/'; strncat(data->bin, data->name, sizeof(data->bin) - 1); data->bin[MAXPATHLEN] = 0; pclose(inpipe); }
static void find_wrapper_target(struct wrapper_data *data) { if (find_target_in_path(data)) return; if (find_target_in_envd(data, 0)) return; /* Only our wrapper is in PATH, so get the CC path using * gcc-config and execute the real binary in there ... */ FILE *inpipe = popen(GCC_CONFIG " --get-bin-path", "r"); if (inpipe == NULL) wrapper_errp("could not open pipe"); char str[PATH_MAX + 1]; if (fgets(str, PATH_MAX, inpipe) == 0) wrapper_errp("could not get compiler binary path"); /* chomp! */ size_t plen = strlen(str); if (str[plen-1] == '\n') str[plen-1] = '\0'; data->bin = xmalloc(plen + 1 + strlen(data->name) + 1); sprintf(data->bin, "%s/%s", str, data->name); pclose(inpipe); }