Mercurial > repos > ashvark > qiime_1_8_0
comparison bwa-0.6.2/utils.c @ 2:a294fbfcb1db draft default tip
Uploaded BWA
| author | ashvark |
|---|---|
| date | Fri, 18 Jul 2014 07:55:59 -0400 |
| parents | dd1186b11b3b |
| children |
comparison
equal
deleted
inserted
replaced
| 1:a9636dc1e99a | 2:a294fbfcb1db |
|---|---|
| 1 /* The MIT License | |
| 2 | |
| 3 Copyright (c) 2008 Genome Research Ltd (GRL). | |
| 4 | |
| 5 Permission is hereby granted, free of charge, to any person obtaining | |
| 6 a copy of this software and associated documentation files (the | |
| 7 "Software"), to deal in the Software without restriction, including | |
| 8 without limitation the rights to use, copy, modify, merge, publish, | |
| 9 distribute, sublicense, and/or sell copies of the Software, and to | |
| 10 permit persons to whom the Software is furnished to do so, subject to | |
| 11 the following conditions: | |
| 12 | |
| 13 The above copyright notice and this permission notice shall be | |
| 14 included in all copies or substantial portions of the Software. | |
| 15 | |
| 16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| 17 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| 18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| 19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |
| 20 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |
| 21 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
| 22 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| 23 SOFTWARE. | |
| 24 */ | |
| 25 | |
| 26 /* Contact: Heng Li <lh3@sanger.ac.uk> */ | |
| 27 | |
| 28 #include <stdio.h> | |
| 29 #include <stdarg.h> | |
| 30 #include <stdlib.h> | |
| 31 #include <string.h> | |
| 32 #include <zlib.h> | |
| 33 #include <errno.h> | |
| 34 #include <sys/resource.h> | |
| 35 #include <sys/time.h> | |
| 36 #include "utils.h" | |
| 37 | |
| 38 FILE *err_xopen_core(const char *func, const char *fn, const char *mode) | |
| 39 { | |
| 40 FILE *fp = 0; | |
| 41 if (strcmp(fn, "-") == 0) | |
| 42 return (strstr(mode, "r"))? stdin : stdout; | |
| 43 if ((fp = fopen(fn, mode)) == 0) { | |
| 44 fprintf(stderr, "[%s] fail to open file '%s'. Abort!\n", func, fn); | |
| 45 abort(); | |
| 46 } | |
| 47 return fp; | |
| 48 } | |
| 49 FILE *err_xreopen_core(const char *func, const char *fn, const char *mode, FILE *fp) | |
| 50 { | |
| 51 if (freopen(fn, mode, fp) == 0) { | |
| 52 fprintf(stderr, "[%s] fail to open file '%s': ", func, fn); | |
| 53 perror(NULL); | |
| 54 fprintf(stderr, "Abort!\n"); | |
| 55 abort(); | |
| 56 } | |
| 57 return fp; | |
| 58 } | |
| 59 gzFile err_xzopen_core(const char *func, const char *fn, const char *mode) | |
| 60 { | |
| 61 gzFile fp; | |
| 62 if (strcmp(fn, "-") == 0) | |
| 63 return gzdopen(fileno((strstr(mode, "r"))? stdin : stdout), mode); | |
| 64 if ((fp = gzopen(fn, mode)) == 0) { | |
| 65 fprintf(stderr, "[%s] fail to open file '%s'. Abort!\n", func, fn); | |
| 66 abort(); | |
| 67 } | |
| 68 return fp; | |
| 69 } | |
| 70 void err_fatal(const char *header, const char *fmt, ...) | |
| 71 { | |
| 72 va_list args; | |
| 73 va_start(args, fmt); | |
| 74 fprintf(stderr, "[%s] ", header); | |
| 75 vfprintf(stderr, fmt, args); | |
| 76 fprintf(stderr, " Abort!\n"); | |
| 77 va_end(args); | |
| 78 abort(); | |
| 79 } | |
| 80 | |
| 81 void err_fatal_simple_core(const char *func, const char *msg) | |
| 82 { | |
| 83 fprintf(stderr, "[%s] %s Abort!\n", func, msg); | |
| 84 abort(); | |
| 85 } | |
| 86 | |
| 87 size_t err_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) | |
| 88 { | |
| 89 size_t ret = fwrite(ptr, size, nmemb, stream); | |
| 90 if (ret != nmemb) | |
| 91 { | |
| 92 err_fatal_simple_core("fwrite", strerror(errno)); | |
| 93 } | |
| 94 return ret; | |
| 95 } | |
| 96 | |
| 97 int err_printf(const char *format, ...) | |
| 98 { | |
| 99 va_list arg; | |
| 100 int done; | |
| 101 | |
| 102 va_start(arg, format); | |
| 103 done = vfprintf(stdout, format, arg); | |
| 104 int saveErrno = errno; | |
| 105 va_end(arg); | |
| 106 | |
| 107 if (done < 0) | |
| 108 { | |
| 109 err_fatal_simple_core("vfprintf(stdout)", strerror(saveErrno)); | |
| 110 } | |
| 111 return done; | |
| 112 } | |
| 113 | |
| 114 int err_fprintf(FILE *stream, const char *format, ...) | |
| 115 { | |
| 116 va_list arg; | |
| 117 int done; | |
| 118 | |
| 119 va_start(arg, format); | |
| 120 done = vfprintf(stream, format, arg); | |
| 121 int saveErrno = errno; | |
| 122 va_end(arg); | |
| 123 | |
| 124 if (done < 0) | |
| 125 { | |
| 126 err_fatal_simple_core("vfprintf", strerror(saveErrno)); | |
| 127 } | |
| 128 return done; | |
| 129 } | |
| 130 | |
| 131 int err_fflush(FILE *stream) | |
| 132 { | |
| 133 int ret = fflush(stream); | |
| 134 if (ret != 0) | |
| 135 { | |
| 136 err_fatal_simple_core("fflush", strerror(errno)); | |
| 137 } | |
| 138 return ret; | |
| 139 } | |
| 140 | |
| 141 int err_fclose(FILE *stream) | |
| 142 { | |
| 143 int ret = fclose(stream); | |
| 144 if (ret != 0) | |
| 145 { | |
| 146 err_fatal_simple_core("fclose", strerror(errno)); | |
| 147 } | |
| 148 return ret; | |
| 149 } | |
| 150 | |
| 151 double cputime() | |
| 152 { | |
| 153 struct rusage r; | |
| 154 getrusage(RUSAGE_SELF, &r); | |
| 155 return r.ru_utime.tv_sec + r.ru_stime.tv_sec + 1e-6 * (r.ru_utime.tv_usec + r.ru_stime.tv_usec); | |
| 156 } | |
| 157 | |
| 158 double realtime() | |
| 159 { | |
| 160 struct timeval tp; | |
| 161 struct timezone tzp; | |
| 162 gettimeofday(&tp, &tzp); | |
| 163 return tp.tv_sec + tp.tv_usec * 1e-6; | |
| 164 } |
