From: Petr Danecek Date: Mon, 3 Dec 2012 09:14:47 +0000 (+0000) Subject: bam_plcmd.c: added sanity check in read_file_list, complain if file list is not a... X-Git-Url: https://git.donarmstrong.com/?p=samtools.git;a=commitdiff_plain;h=4b0058f506960786fc4c988c512cd462e02f24ed bam_plcmd.c: added sanity check in read_file_list, complain if file list is not a file list --- diff --git a/bam_plcmd.c b/bam_plcmd.c index 51dece5..a51e773 100644 --- a/bam_plcmd.c +++ b/bam_plcmd.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "sam.h" #include "faidx.h" #include "kstring.h" @@ -396,8 +397,12 @@ static int mpileup(mplp_conf_t *conf, int n, char **fn) static int read_file_list(const char *file_list,int *n,char **argv[]) { char buf[MAX_PATH_LEN]; - int len, nfiles; - char **files; + int len, nfiles = 0; + char **files = NULL; + struct stat sb; + + *n = 0; + *argv = NULL; FILE *fh = fopen(file_list,"r"); if ( !fh ) @@ -406,28 +411,33 @@ static int read_file_list(const char *file_list,int *n,char **argv[]) return 1; } - // Speed is not an issue here, determine the number of files by reading the file twice - nfiles = 0; - while ( fgets(buf,MAX_PATH_LEN,fh) ) nfiles++; - - if ( fseek(fh, 0L, SEEK_SET) ) - { - fprintf(stderr,"%s: %s\n", file_list,strerror(errno)); - return 1; - } - files = calloc(nfiles,sizeof(char*)); nfiles = 0; while ( fgets(buf,MAX_PATH_LEN,fh) ) { + // allow empty lines and trailing spaces len = strlen(buf); while ( len>0 && isspace(buf[len-1]) ) len--; if ( !len ) continue; - files[nfiles] = malloc(sizeof(char)*(len+1)); - strncpy(files[nfiles],buf,len); - files[nfiles][len] = 0; + // check sanity of the file list + buf[len] = 0; + if (stat(buf, &sb) != 0) + { + // no such file, check if it is safe to print its name + int i, safe_to_print = 1; + for (i=0; i