diff options
Diffstat (limited to 'kmer_utils.c')
-rw-r--r-- | kmer_utils.c | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/kmer_utils.c b/kmer_utils.c index 79c9180..b8d5691 100644 --- a/kmer_utils.c +++ b/kmer_utils.c @@ -23,6 +23,18 @@ unsigned long long pow_four(unsigned long long x) { return (unsigned long long)1 << (x * 2); } +void check_null_ptr(void *ptr, const char *error) { + if (ptr == NULL) { + if(error != NULL) { + fprintf(stderr, "Error: %s - %s\n", error, strerror(errno)); + } + else { + fprintf(stderr, "Error: %s\n", strerror(errno)); + } + exit(EXIT_FAILURE); + } +} + // convert a string of k-mer size base-4 values into a // base-10 index unsigned long num_to_index(const char *str, const int kmer, const long error_pos, long long *current_position) { @@ -51,10 +63,7 @@ unsigned long long load_specific_mers_from_file(char *fn, unsigned int kmer, siz char line[64]; fh = fopen(fn, "r"); - if(fh == NULL) { - fprintf(stderr, "Error opening %s - %s\n", fn, strerror(errno)); - exit(EXIT_FAILURE); - } + check_null_ptr(fh, fn); while (fgets(line, sizeof(line), fh) != NULL) { size_t i; @@ -99,10 +108,8 @@ char *index_to_kmer(unsigned long long index, long kmer) { size_t j = 0; char *num_array = calloc(kmer, sizeof(char)); char *ret = calloc(kmer + 1, sizeof(char)); - if(ret == NULL || num_array == NULL) { - fprintf(stderr, "%s\n", strerror(errno)); - exit(EXIT_FAILURE); - } + check_null_ptr(num_array, NULL); + check_null_ptr(ret, NULL); // this is the core of the conversion. modulus 4 for base 4 conversion @@ -164,25 +171,22 @@ unsigned long long * get_kmer_counts_from_file(FILE *fh, const unsigned int kmer size_t len = 0; ssize_t read; - long long i = 0; - long long position = 0; - // width is 4^kmer // there's a sneaky bitshift to avoid pow dependency const unsigned long width = pow_four(kmer); // malloc our return array unsigned long long * counts = calloc((width+ 1), sizeof(unsigned long long)); - if(counts == NULL) { - fprintf(stderr, "%s\n", strerror(errno)); - exit(EXIT_FAILURE); - } + check_null_ptr(counts, NULL); while ((read = getdelim(&line, &len, '>', fh)) != -1) { size_t k; char *seq; size_t seq_length; + long long i = 0; + long long position = 0; + // find our first \n, this should be the end of the header seq = strchr(line, '\n'); if(seq == NULL) @@ -235,10 +239,7 @@ unsigned long long * get_kmer_counts_from_file(FILE *fh, const unsigned int kmer unsigned long long * get_kmer_counts_from_filename(const char *fn, const unsigned int kmer) { FILE *fh = fopen(fn, "r"); - if(fh == NULL) { - fprintf(stderr, "Could not open %s - %s\n", fn, strerror(errno)); - return NULL; - } + check_null_ptr(fh, fn); return get_kmer_counts_from_file(fh, kmer); } @@ -256,10 +257,7 @@ unsigned long long * get_continuous_kmer_counts_from_file(FILE *fh, const unsign // malloc our return array unsigned long long * counts = calloc((width+ 1), sizeof(unsigned long long)); - if(counts == NULL) { - fprintf(stderr, "%s\n", strerror(errno)); - exit(EXIT_FAILURE); - } + check_null_ptr(counts, NULL); size_t cpy_size = kmer - 1; @@ -327,7 +325,6 @@ unsigned long long * get_continuous_kmer_counts_from_file(FILE *fh, const unsign } - free(end_of_previous); free(line); fclose(fh); @@ -337,10 +334,7 @@ unsigned long long * get_continuous_kmer_counts_from_file(FILE *fh, const unsign unsigned long long * get_continuous_kmer_counts_from_filename(const char *fn, const unsigned int kmer) { FILE *fh = fopen(fn, "r"); - if(fh == NULL) { - fprintf(stderr, "Could not open %s - %s\n", fn, strerror(errno)); - return NULL; - } + check_null_ptr(fh, fn); return get_continuous_kmer_counts_from_file(fh, kmer); } |