X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bam_sort.c;h=e3a6c472cb1b50ddb0eab7273433a438c6dabede;hb=77734b9975b7f86b4ce3e977729b0329c3414dd7;hp=abf8d4f6caf6dfeb25af423784934d78fe677478;hpb=a9a8e7769267e5a39a10004f2e0a10bee9e33aaf;p=samtools.git diff --git a/bam_sort.c b/bam_sort.c index abf8d4f..e3a6c47 100644 --- a/bam_sort.c +++ b/bam_sort.c @@ -418,6 +418,31 @@ void bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t m bam_sort_core_ext(is_by_qname, fn, prefix, max_mem, 0); } + +size_t bam_sort_get_max_mem(char *max_mem_string) +{ + char c; + size_t max_mem; + size_t multiplier=1; + c=max_mem_string[strlen(max_mem_string)-1]; + switch(c) { + case 'G': + multiplier*=1024; + case 'M': + multiplier*=1024; + case 'K': + multiplier*=1024; + case 'B': + max_mem_string[strlen(max_mem_string)-1]='\0'; + break; + default: + break; + } + max_mem = multiplier * atol(max_mem_string); + // max_mem should be checked that it was not zero after atol! + return max_mem; +} + int bam_sort(int argc, char *argv[]) { size_t max_mem = 500000000; @@ -426,7 +451,7 @@ int bam_sort(int argc, char *argv[]) switch (c) { case 'o': is_stdout = 1; break; case 'n': is_by_qname = 1; break; - case 'm': max_mem = atol(optarg); break; + case 'm': max_mem = bam_sort_get_max_mem(optarg); break; } } if (optind + 2 > argc) {