/* * Opens a trace file named 'file'. This is initially looked for as a * pathname relative to a file named "relative_to". This may (for * example) be the name of an experiment file referencing the trace * file. In this case by passing relative_to as the experiment file * filename the trace file will be picked up in the same directory as * the experiment file. Relative_to may be supplied as NULL. * * 'file' is looked for at relative_to, then the current directory, and then * all of the locations listed in RAWDATA (which is a colon separated list). * * Returns a FILE pointer when found. * NULL otherwise. */ FILE *open_trace_file(char *file, char *relative_to) { char *newsearch; char *ele; FILE *fp; /* Look in the same location as the incoming 'relative_to' filename */ if (relative_to) { char *cp; char relative_path[PATH_MAX+1]; strcpy(relative_path, relative_to); if (cp = strrchr(relative_path, '/')) *cp = 0; if (fp = find_file_dir(file, relative_path)) return fp; } /* Not found it yet? use RAWDATA then */ if (NULL == (newsearch = tokenise_search_path(getenv("RAWDATA")))) return NULL; /* * Step through the search path testing out each component. * We now look through each path element treating some prefixes as * special, otherwise we treat the element as a directory. */ for (ele = newsearch; *ele; ele += strlen(ele)+1) { if (0 == strncmp(ele, "TAR=", 4)) { if (fp = find_file_tar(file, ele+4, 0)) { free(newsearch); return fp; } #ifdef TRACE_ARCHIVE } else if (0 == strncmp(ele, "ARC=", 4)) { if (fp = find_file_archive(file, ele+4)) { free(newsearch); return fp; } #endif #ifdef USE_WGET } else if (0 == strncmp(ele, "URL=", 4)) { if (fp = find_file_url(file, ele+4)) { free(newsearch); return fp; } #endif } else { if (fp = find_file_dir(file, ele)) { free(newsearch); return fp; } } } free(newsearch); return NULL; }
/* * Opens a trace file named 'file'. This is initially looked for as a * pathname relative to a file named "relative_to". This may (for * example) be the name of an experiment file referencing the trace * file. In this case by passing relative_to as the experiment file * filename the trace file will be picked up in the same directory as * the experiment file. Relative_to may be supplied as NULL. * * 'file' is looked for at relative_to, then the current directory, and then * all of the locations listed in 'path' (which is a colon separated list). * If 'path' is NULL it uses the RAWDATA environment variable instead. * * Returns a mFILE pointer when found. * NULL otherwise. */ mFILE *open_path_mfile(char *file, char *path, char *relative_to) { char *newsearch; char *ele; mFILE *fp; /* Use path first */ if (!path) path = getenv("RAWDATA"); if (NULL == (newsearch = tokenise_search_path(path))) return NULL; /* * Step through the search path testing out each component. * We now look through each path element treating some prefixes as * special, otherwise we treat the element as a directory. */ for (ele = newsearch; *ele; ele += strlen(ele)+1) { int i; char *suffix[6] = {"", ".gz", ".bz2", ".sz", ".Z", ".bz2"}; for (i = 0; i < 6; i++) { char file2[1024]; char *ele2; int valid = 1; /* * '|' prefixing a path component indicates that we do not * wish to perform the compression extension searching in that * location. */ if (*ele == '|') { ele2 = ele+1; valid = (i == 0); } else { ele2 = ele; } sprintf(file2, "%s%s", file, suffix[i]); #if defined(HAVE_LIBCURL) if (0 == strncmp(ele2, "URL=", 4)) { if (valid && (fp = find_file_url(file2, ele2+4))) { free(newsearch); return fp; } } else #endif if (valid && (fp = find_file_dir(file2, ele2))) { free(newsearch); return fp; } } } free(newsearch); /* Look in the same location as the incoming 'relative_to' filename */ if (relative_to) { char *cp; char relative_path[PATH_MAX+1]; strcpy(relative_path, relative_to); if ((cp = strrchr(relative_path, '/'))) *cp = 0; if ((fp = find_file_dir(file, relative_path))) return fp; } return NULL; }
/* * Opens a trace file named 'file'. This is initially looked for as a * pathname relative to a file named "relative_to". This may (for * example) be the name of an experiment file referencing the trace * file. In this case by passing relative_to as the experiment file * filename the trace file will be picked up in the same directory as * the experiment file. Relative_to may be supplied as NULL. * * 'file' is looked for at relative_to, then the current directory, and then * all of the locations listed in 'path' (which is a colon separated list). * If 'path' is NULL it uses the RAWDATA environment variable instead. * * Returns a mFILE pointer when found. * NULL otherwise. */ mFILE *open_path_mfile(char *file, char *path, char *relative_to) { char *newsearch; char *ele; mFILE *fp; /* Use path first */ if (!path) path = getenv("RAWDATA"); if (NULL == (newsearch = tokenise_search_path(path))) return NULL; /* * Step through the search path testing out each component. * We now look through each path element treating some prefixes as * special, otherwise we treat the element as a directory. */ for (ele = newsearch; *ele; ele += strlen(ele)+1) { char *ele2; /* * '|' prefixing a path component indicates that we do not * wish to perform the compression extension searching in that * location. * * NB: this has been removed from the htslib implementation. */ if (*ele == '|') { ele2 = ele+1; } else { ele2 = ele; } if (0 == strncmp(ele2, "URL=", 4)) { if ((fp = find_file_url(file, ele2+4))) { free(newsearch); return fp; } } else if (!strncmp(ele2, "http:", 5) || !strncmp(ele2, "ftp:", 4)) { if ((fp = find_file_url(file, ele2))) { free(newsearch); return fp; } } else if ((fp = find_file_dir(file, ele2))) { free(newsearch); return fp; } } free(newsearch); /* Look in the same location as the incoming 'relative_to' filename */ if (relative_to) { char *cp; char relative_path[PATH_MAX+1]; strcpy(relative_path, relative_to); if ((cp = strrchr(relative_path, '/'))) *cp = 0; if ((fp = find_file_dir(file, relative_path))) return fp; } return NULL; }