Lines Matching refs:fd

138 static int cram_io_C_FILE_fseek(void * fd, off_t offset, int whence)  in cram_io_C_FILE_fseek()  argument
140 return fseeko((FILE *)fd,offset,whence); in cram_io_C_FILE_fseek()
143 static off_t cram_io_C_FILE_ftell(void * fd) in cram_io_C_FILE_ftell() argument
145 return ftello((FILE *)fd); in cram_io_C_FILE_ftell()
153 static void cram_io_fill_input_buffer(cram_fd * fd) in cram_io_fill_input_buffer() argument
156 assert ( fd->fp_in_buffer->fp_in_buf_pc == fd->fp_in_buffer->fp_in_buf_pe ); in cram_io_fill_input_buffer()
162 (fd->fp_in_callbacks->fread_callback)(fd->fp_in_buffer->fp_in_buf_pa, in cram_io_fill_input_buffer()
164 fd->fp_in_buffer->fp_in_buf_size, in cram_io_fill_input_buffer()
165 fd->fp_in_callbacks->user_data); in cram_io_fill_input_buffer()
167 fd->fp_in_buffer->fp_in_buf_start += (fd->fp_in_buffer->fp_in_buf_pe - in cram_io_fill_input_buffer()
168 fd->fp_in_buffer->fp_in_buf_pa); in cram_io_fill_input_buffer()
170 fd->fp_in_buffer->fp_in_buf_pe = fd->fp_in_buffer->fp_in_buf_pa + r; in cram_io_fill_input_buffer()
172 fd->fp_in_buffer->fp_in_buf_pc = fd->fp_in_buffer->fp_in_buf_pa; in cram_io_fill_input_buffer()
178 int cram_io_input_buffer_underflow(cram_fd * fd) in cram_io_input_buffer_underflow() argument
180 cram_io_fill_input_buffer(fd); in cram_io_input_buffer_underflow()
182 if ( fd->fp_in_buffer->fp_in_buf_pc == fd->fp_in_buffer->fp_in_buf_pe ) in cram_io_input_buffer_underflow()
185 return (int)((unsigned char )(*(fd->fp_in_buffer->fp_in_buf_pc++))); in cram_io_input_buffer_underflow()
195 size_t cram_io_input_buffer_read(void *vptr, size_t size, size_t nmemb, cram_fd * fd) in cram_io_input_buffer_read() argument
199 size_t inbuf = fd->fp_in_buffer->fp_in_buf_pe - in cram_io_input_buffer_read()
200 fd->fp_in_buffer->fp_in_buf_pc; /* number of bytes in buffer */ in cram_io_input_buffer_read()
206 memcpy(ptr,fd->fp_in_buffer->fp_in_buf_pc,tocopy); in cram_io_input_buffer_read()
210 fd->fp_in_buffer->fp_in_buf_pc += tocopy; in cram_io_input_buffer_read()
213 while ( (toread >= fd->fp_in_buffer->fp_in_buf_size) && in cram_io_input_buffer_read()
214 ((blockread = ((fd->fp_in_callbacks-> in cram_io_input_buffer_read()
217 fd->fp_in_buffer->fp_in_buf_size, in cram_io_input_buffer_read()
218 fd->fp_in_callbacks->user_data))!=0) ) { in cram_io_input_buffer_read()
222 fd->fp_in_buffer->fp_in_buf_start += blockread; in cram_io_input_buffer_read()
228 assert ( fd->fp_in_buffer->fp_in_buf_pc == fd->fp_in_buffer->fp_in_buf_pe ); in cram_io_input_buffer_read()
230 cram_io_fill_input_buffer(fd); in cram_io_input_buffer_read()
232 inbuf = fd->fp_in_buffer->fp_in_buf_pe-fd->fp_in_buffer->fp_in_buf_pc; in cram_io_input_buffer_read()
240 memcpy(ptr,fd->fp_in_buffer->fp_in_buf_pc,tocopy); in cram_io_input_buffer_read()
244 fd->fp_in_buffer->fp_in_buf_pc += tocopy; in cram_io_input_buffer_read()
250 int cram_io_input_buffer_seek(cram_fd * fd, off_t offset, int whence) in cram_io_input_buffer_seek() argument
257 uint64_t const curpos = fd->fp_in_buffer->fp_in_buf_start + in cram_io_input_buffer_seek()
258 (fd->fp_in_buffer->fp_in_buf_pc - in cram_io_input_buffer_seek()
259 fd->fp_in_buffer->fp_in_buf_pa); in cram_io_input_buffer_seek()
261 uint64_t const bufferlow = fd->fp_in_buffer->fp_in_buf_start; in cram_io_input_buffer_seek()
263 uint64_t const bufferhigh = fd->fp_in_buffer->fp_in_buf_start + in cram_io_input_buffer_seek()
264 (fd->fp_in_buffer->fp_in_buf_pe - in cram_io_input_buffer_seek()
265 fd->fp_in_buffer->fp_in_buf_pa); in cram_io_input_buffer_seek()
272 fd->fp_in_buffer->fp_in_buf_pc += offset; in cram_io_input_buffer_seek()
273 assert ( fd->fp_in_buffer->fp_in_buf_pc >= fd->fp_in_buffer->fp_in_buf_pa ); in cram_io_input_buffer_seek()
274 assert ( fd->fp_in_buffer->fp_in_buf_pc <= fd->fp_in_buffer->fp_in_buf_pe ); in cram_io_input_buffer_seek()
280 int64_t const filepos = fd->fp_in_buffer->fp_in_buf_start + in cram_io_input_buffer_seek()
281 (fd->fp_in_buffer->fp_in_buf_pe - in cram_io_input_buffer_seek()
282 fd->fp_in_buffer->fp_in_buf_pa); in cram_io_input_buffer_seek()
286 r = fd->fp_in_callbacks->fseek_callback(fd->fp_in_callbacks->user_data, in cram_io_input_buffer_seek()
292 fd->fp_in_buffer->fp_in_buf_pc = fd->fp_in_buffer->fp_in_buf_pa; in cram_io_input_buffer_seek()
293 fd->fp_in_buffer->fp_in_buf_pe = fd->fp_in_buffer->fp_in_buf_pa; in cram_io_input_buffer_seek()
295 fd->fp_in_buffer->fp_in_buf_start = abstarget; in cram_io_input_buffer_seek()
304 fd->fp_in_buffer->fp_in_buf_pc = fd->fp_in_buffer->fp_in_buf_pa; in cram_io_input_buffer_seek()
305 fd->fp_in_buffer->fp_in_buf_pe = fd->fp_in_buffer->fp_in_buf_pa; in cram_io_input_buffer_seek()
308 r = fd->fp_in_callbacks->fseek_callback(fd->fp_in_callbacks->user_data, in cram_io_input_buffer_seek()
314 fd->fp_in_buffer->fp_in_buf_start = in cram_io_input_buffer_seek()
315 fd->fp_in_callbacks->ftell_callback(fd->fp_in_callbacks->user_data); in cram_io_input_buffer_seek()
398 char * cram_io_input_buffer_fgets(char * s, int size, cram_fd * fd) in cram_io_input_buffer_fgets() argument
403 int const c = CRAM_IO_GETC(fd); in cram_io_input_buffer_fgets()
434 int cram_io_flush_output_buffer(cram_fd *fd) in cram_io_flush_output_buffer() argument
441 if (!fd->fp_out_buffer) in cram_io_flush_output_buffer()
444 dat = fd->fp_out_buffer->fp_out_buf_pa; in cram_io_flush_output_buffer()
445 olen = fd->fp_out_buffer->fp_out_buf_pc - dat; in cram_io_flush_output_buffer()
451 r = fd->fp_out_callbacks->fwrite_callback in cram_io_flush_output_buffer()
452 (dat, 1, len, fd->fp_out_callbacks->user_data); in cram_io_flush_output_buffer()
456 fd->fp_out_buffer->fp_out_buf_start += r; /* move offset */ in cram_io_flush_output_buffer()
461 memmove(fd->fp_out_buffer->fp_out_buf_pa, dat, len); in cram_io_flush_output_buffer()
462 fd->fp_out_buffer->fp_out_buf_pc in cram_io_flush_output_buffer()
463 = fd->fp_out_buffer->fp_out_buf_pa + len; in cram_io_flush_output_buffer()
472 fd->fp_out_buffer->fp_out_buf_pc = fd->fp_out_buffer->fp_out_buf_pa; in cram_io_flush_output_buffer()
480 cram_fd *fd) in cram_io_output_buffer_write() argument
486 size_t outbuf = fd->fp_out_buffer->fp_out_buf_pe - in cram_io_output_buffer_write()
487 fd->fp_out_buffer->fp_out_buf_pc; in cram_io_output_buffer_write()
495 memcpy(fd->fp_out_buffer->fp_out_buf_pc, ptr, tocopy); in cram_io_output_buffer_write()
499 fd->fp_out_buffer->fp_out_buf_pc += tocopy; in cram_io_output_buffer_write()
502 if (cram_io_flush_output_buffer(fd) < 0) in cram_io_output_buffer_write()
506 while (towrite >= fd->fp_out_buffer->fp_out_buf_size) { in cram_io_output_buffer_write()
507 blockwrite = fd->fp_out_callbacks->fwrite_callback in cram_io_output_buffer_write()
510 fd->fp_out_buffer->fp_out_buf_size, in cram_io_output_buffer_write()
511 fd->fp_out_callbacks->user_data); in cram_io_output_buffer_write()
516 fd->fp_out_buffer->fp_out_buf_start += blockwrite; in cram_io_output_buffer_write()
518 if (blockwrite < fd->fp_out_buffer->fp_out_buf_size) in cram_io_output_buffer_write()
525 assert(fd->fp_out_buffer->fp_out_buf_pc == in cram_io_output_buffer_write()
526 fd->fp_out_buffer->fp_out_buf_pa); in cram_io_output_buffer_write()
529 assert(towrite <= fd->fp_out_buffer->fp_out_buf_size); in cram_io_output_buffer_write()
531 memcpy(fd->fp_out_buffer->fp_out_buf_pc, ptr, towrite); in cram_io_output_buffer_write()
533 fd->fp_out_buffer->fp_out_buf_pc += towrite; in cram_io_output_buffer_write()
620 int cram_io_output_buffer_putc(int c, cram_fd * fd) in cram_io_output_buffer_putc() argument
624 if (cram_io_output_buffer_write(&cc, 1, 1, fd) == 1) in cram_io_output_buffer_putc()
648 int itf8_decode(cram_fd *fd, int32_t *val_p) { in itf8_decode() argument
665 int32_t val = CRAM_IO_GETC(fd); in itf8_decode()
678 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
683 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
684 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
689 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
690 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
691 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
696 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
697 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
698 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in itf8_decode()
699 val = (val<<4) | (((unsigned char)CRAM_IO_GETC(fd)) & 0x0f); in itf8_decode()
706 int itf8_decode_crc(cram_fd *fd, int32_t *val_p, uint32_t *crc) { in itf8_decode_crc() argument
724 int32_t val = CRAM_IO_GETC(fd); in itf8_decode_crc()
740 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
746 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
747 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
753 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
754 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
755 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
761 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
762 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
763 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd)); in itf8_decode_crc()
764 val = (val<<4) | (((c[4]=CRAM_IO_GETC(fd))) & 0x0f); in itf8_decode_crc()
777 int itf8_encode(cram_fd *fd, int32_t val) { in itf8_encode() argument
780 return CRAM_IO_WRITE(buf, 1, len, fd) == len ? 0 : -1; in itf8_encode()
1011 int ltf8_decode(cram_fd *fd, int64_t *val_p) { in ltf8_decode() argument
1012 int c = CRAM_IO_GETC(fd); in ltf8_decode()
1022 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1027 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1028 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1033 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1034 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1035 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1040 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1041 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1042 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1043 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1048 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1049 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1050 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1051 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1052 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1057 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1058 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1059 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1060 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1061 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1062 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1067 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1068 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1069 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1070 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1071 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1072 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1073 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1078 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1079 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1080 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1081 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1082 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1083 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1084 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1085 val = (val<<8) | (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode()
1092 int ltf8_decode_crc(cram_fd *fd, int64_t *val_p, uint32_t *crc) { in ltf8_decode_crc() argument
1094 int64_t val = (unsigned char)CRAM_IO_GETC(fd); in ltf8_decode_crc()
1106 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1112 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1113 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1119 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1120 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1121 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1127 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1128 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1129 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1130 val = (val<<8) | (c[4]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1136 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1137 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1138 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1139 val = (val<<8) | (c[4]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1140 val = (val<<8) | (c[5]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1146 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1147 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1148 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1149 val = (val<<8) | (c[4]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1150 val = (val<<8) | (c[5]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1151 val = (val<<8) | (c[6]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1157 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1158 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1159 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1160 val = (val<<8) | (c[4]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1161 val = (val<<8) | (c[5]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1162 val = (val<<8) | (c[6]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1163 val = (val<<8) | (c[7]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1169 val = (val<<8) | (c[1]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1170 val = (val<<8) | (c[2]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1171 val = (val<<8) | (c[3]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1172 val = (val<<8) | (c[4]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1173 val = (val<<8) | (c[5]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1174 val = (val<<8) | (c[6]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1175 val = (val<<8) | (c[7]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1176 val = (val<<8) | (c[8]=CRAM_IO_GETC(fd));; in ltf8_decode_crc()
1211 int uint7_encode(cram_fd *fd, int64_t val) { in uint7_encode() argument
1214 return CRAM_IO_WRITE(buf, 1, len, fd) == len ? 0 : -1; in uint7_encode()
1231 int uint7_decode_crc32(cram_fd *fd, int32_t *val_p, uint32_t *crc) { in uint7_decode_crc32() argument
1237 b[i++] = c = CRAM_IO_GETC(fd); in uint7_decode_crc32()
1248 int uint7_decode_crc(cram_fd *fd, int64_t *val_p, uint32_t *crc) { in uint7_decode_crc() argument
1254 b[i++] = c = CRAM_IO_GETC(fd); in uint7_decode_crc()
1272 int int32_decode(cram_fd *fd, int32_t *val) { in int32_decode() argument
1274 if (1 != CRAM_IO_READ(&i, 4, 1, fd)) in int32_decode()
1287 int int32_encode(cram_fd *fd, int32_t val) { in int32_encode() argument
1289 if (1 != CRAM_IO_WRITE(&val, 4, 1, fd)) in int32_encode()
1568 cram_block *cram_read_block(cram_fd *fd) { in cram_read_block() argument
1577 if (-1 == (b->method = (c=CRAM_IO_GETC(fd)))) { free(b); return NULL; } in cram_read_block()
1579 if (-1 == (b->content_type = (c=CRAM_IO_GETC(fd)))) { free(b); return NULL; } in cram_read_block()
1581 if (-1 == itf8_decode_crc(fd, &b->content_id, &crc)) { free(b); return NULL; } in cram_read_block()
1582 if (-1 == itf8_decode_crc(fd, &b->comp_size, &crc)) { free(b); return NULL; } in cram_read_block()
1583 if (-1 == itf8_decode_crc(fd, &b->uncomp_size, &crc)) { free(b); return NULL; } in cram_read_block()
1591 if (b->uncomp_size != CRAM_IO_READ(b->data, 1, b->uncomp_size, fd)) { in cram_read_block()
1599 if (b->comp_size != CRAM_IO_READ(b->data, 1, b->comp_size, fd)) { in cram_read_block()
1606 if (IS_CRAM_3_VERS(fd)) { in cram_read_block()
1607 if (-1 == int32_decode(fd, (int32_t *)&b->crc32)) { in cram_read_block()
1613 b->crc32_checked = fd->ignore_md5; in cram_read_block()
1632 int cram_write_block(cram_fd *fd, cram_block *b) { in cram_write_block() argument
1635 if (CRAM_IO_PUTC(b->method, fd) == EOF) return -1; in cram_write_block()
1636 if (CRAM_IO_PUTC(b->content_type, fd) == EOF) return -1; in cram_write_block()
1637 if (itf8_encode(fd, b->content_id) == -1) return -1; in cram_write_block()
1638 if (itf8_encode(fd, b->comp_size) == -1) return -1; in cram_write_block()
1639 if (itf8_encode(fd, b->uncomp_size) == -1) return -1; in cram_write_block()
1642 if (b->uncomp_size != CRAM_IO_WRITE(b->data, 1, b->uncomp_size, fd)) in cram_write_block()
1645 if (b->comp_size != CRAM_IO_WRITE(b->data, 1, b->comp_size, fd)) in cram_write_block()
1649 if (IS_CRAM_3_VERS(fd)) { in cram_write_block()
1668 if (-1 == int32_encode(fd, b->crc32)) in cram_write_block()
2068 int cram_compress_block(cram_fd *fd, cram_slice *s, in cram_compress_block() argument
2108 if (fd->metrics_lock) pthread_mutex_lock(fd->metrics_lock); in cram_compress_block()
2109 if (fd->unsorted == 2) in cram_compress_block()
2130 if (fd->metrics_lock) pthread_mutex_unlock(fd->metrics_lock); in cram_compress_block()
2151 case FQZ: strat = CRAM_MAJOR_VERS(fd->version); break; in cram_compress_block()
2157 if (fd->verbose > 1) in cram_compress_block()
2186 if (fd->metrics_lock) pthread_mutex_lock(fd->metrics_lock); in cram_compress_block()
2220 if (fd->level <= 1) { in cram_compress_block()
2223 } else if (fd->level <= 3) { in cram_compress_block()
2226 } else if (fd->level <= 6) { in cram_compress_block()
2239 if (fd->verbose > 1) in cram_compress_block()
2259 case FQZ: strat = CRAM_MAJOR_VERS(fd->version); break; in cram_compress_block()
2282 if (fd->verbose > 1 && method != metrics->revised_method) in cram_compress_block()
2287 if (fd->metrics_lock) pthread_mutex_unlock(fd->metrics_lock); in cram_compress_block()
2292 if (fd->metrics_lock) pthread_mutex_unlock(fd->metrics_lock); in cram_compress_block()
2330 if (fd->verbose) in cram_compress_block()
2674 static void sanitise_SQ_lines(cram_fd *fd) { in sanitise_SQ_lines() argument
2677 if (!fd->header) in sanitise_SQ_lines()
2680 if (!fd->refs || !fd->refs->h_meta) in sanitise_SQ_lines()
2683 for (i = 0; i < fd->header->nref; i++) { in sanitise_SQ_lines()
2684 char *name = fd->header->ref[i].name; in sanitise_SQ_lines()
2685 HashItem *hi = HashTableSearch(fd->refs->h_meta, name, 0); in sanitise_SQ_lines()
2696 if (r->length && r->length != fd->header->ref[i].len) { in sanitise_SQ_lines()
2697 assert(strcmp(r->name, fd->header->ref[i].name) == 0); in sanitise_SQ_lines()
2703 r->name, fd->header->ref[i].len, (int)r->length); in sanitise_SQ_lines()
2707 fd->header->ref[i].len = r->length; in sanitise_SQ_lines()
2750 static int refs_from_header(refs_t *r, cram_fd *fd, SAM_hdr *h) { in refs_from_header() argument
2891 static int cram_populate_ref(cram_fd *fd, int id, ref_entry *r) { in cram_populate_ref() argument
2899 if (fd->verbose) in cram_populate_ref()
2900 fprintf(stderr, "cram_populate_ref on fd %p, id %d\n", fd, id); in cram_populate_ref()
2908 if (!(ty = sam_hdr_find(fd->header, "SQ", "SN", r->name))) in cram_populate_ref()
2911 if (!(tag = sam_hdr_find_key(fd->header, ty, "M5", NULL))) in cram_populate_ref()
2914 if (fd->verbose) in cram_populate_ref()
2928 r->fn = string_dup(fd->refs->pool, path); in cram_populate_ref()
2930 if (fd->refs->fp) in cram_populate_ref()
2931 bzi_close(fd->refs->fp); in cram_populate_ref()
2932 fd->refs->fp = fp; in cram_populate_ref()
2933 fd->refs->fn = r->fn; in cram_populate_ref()
2959 if (!(tag = sam_hdr_find_key(fd->header, ty, "UR", NULL))) in cram_populate_ref()
2966 if (fd->refs->fp) { in cram_populate_ref()
2967 bzi_close(fd->refs->fp); in cram_populate_ref()
2968 fd->refs->fp = NULL; in cram_populate_ref()
2970 if (!(refs = refs_load_fai(fd->refs, fn, 0))) in cram_populate_ref()
2972 sanitise_SQ_lines(fd); in cram_populate_ref()
2974 fd->refs = refs; in cram_populate_ref()
2975 if (fd->refs->fp) { in cram_populate_ref()
2976 bzi_close(fd->refs->fp); in cram_populate_ref()
2977 fd->refs->fp = NULL; in cram_populate_ref()
2980 if (!fd->refs->fn) in cram_populate_ref()
2983 if (-1 == refs2id(fd->refs, fd->header)) in cram_populate_ref()
2985 if (!fd->refs->ref_id || !fd->refs->ref_id[id]) in cram_populate_ref()
2998 if (fd->verbose) in cram_populate_ref()
3248 char *cram_get_ref(cram_fd *fd, int id, int start, int end) { in cram_get_ref() argument
3262 if (fd->ref_lock) pthread_mutex_lock(fd->ref_lock); in cram_get_ref()
3264 RP("%d cram_get_ref on fd %p, id %d, range %d..%d\n", gettid(), fd, id, start, end); in cram_get_ref()
3271 if (fd->unsorted) in cram_get_ref()
3272 fd->shared_ref = 1; in cram_get_ref()
3276 if (id >= fd->refs->nref) { in cram_get_ref()
3278 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3282 if (!fd->refs || !fd->refs->ref_id[id]) { in cram_get_ref()
3284 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3288 if (!(r = fd->refs->ref_id[id])) { in cram_get_ref()
3290 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3306 pthread_mutex_lock(&fd->refs->lock); in cram_get_ref()
3308 if (cram_populate_ref(fd, id, r) == -1) { in cram_get_ref()
3310 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3311 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3314 r = fd->refs->ref_id[id]; in cram_get_ref()
3315 if (fd->unsorted) in cram_get_ref()
3316 cram_ref_incr_locked(fd->refs, id); in cram_get_ref()
3332 if (end - start >= 0.5*r->length || fd->shared_ref) { in cram_get_ref()
3345 if (fd->shared_ref || r->seq || (start == 1 && end == r->length)) { in cram_get_ref()
3350 cram_ref_incr_locked(fd->refs, id); in cram_get_ref()
3353 if (!(e = cram_ref_load(fd->refs, id))) { in cram_get_ref()
3354 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3355 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3362 if (fd->unsorted) in cram_get_ref()
3363 cram_ref_incr_locked(fd->refs, id); in cram_get_ref()
3366 fd->ref = NULL; /* We never access it directly */ in cram_get_ref()
3367 fd->ref_start = 1; in cram_get_ref()
3368 fd->ref_end = r->length; in cram_get_ref()
3369 fd->ref_id = id; in cram_get_ref()
3371 cp = fd->refs->ref_id[id]->seq + ostart-1; in cram_get_ref()
3373 fd->ref = NULL; in cram_get_ref()
3379 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3380 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3394 if (fd->ref_free) { in cram_get_ref()
3395 free(fd->ref_free); in cram_get_ref()
3396 fd->ref_free = NULL; in cram_get_ref()
3398 fd->ref = NULL; in cram_get_ref()
3399 fd->ref_id = id; in cram_get_ref()
3400 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3401 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3406 if (strcmp(fd->refs->fn, r->fn) || fd->refs->fp == NULL) { in cram_get_ref()
3407 if (fd->refs->fp) in cram_get_ref()
3408 bzi_close(fd->refs->fp); in cram_get_ref()
3409 fd->refs->fn = r->fn; in cram_get_ref()
3410 if (!(fd->refs->fp = bzi_open(fd->refs->fn, "r"))) { in cram_get_ref()
3411 perror(fd->refs->fn); in cram_get_ref()
3412 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3413 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3418 if (!(fd->ref = load_ref_portion(fd->refs->fp, r, start, end))) { in cram_get_ref()
3419 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3420 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3424 if (fd->ref_free) in cram_get_ref()
3425 free(fd->ref_free); in cram_get_ref()
3427 fd->ref_id = id; in cram_get_ref()
3428 fd->ref_start = start; in cram_get_ref()
3429 fd->ref_end = end; in cram_get_ref()
3430 fd->ref_free = fd->ref; in cram_get_ref()
3431 seq = fd->ref; in cram_get_ref()
3433 pthread_mutex_unlock(&fd->refs->lock); in cram_get_ref()
3434 if (fd->ref_lock) pthread_mutex_unlock(fd->ref_lock); in cram_get_ref()
3444 int cram_load_reference(cram_fd *fd, char *fn) { in cram_load_reference() argument
3448 fd->refs = refs_load_fai(fd->refs, fn, in cram_load_reference()
3449 !(fd->embed_ref && fd->mode == 'r')); in cram_load_reference()
3450 fn = fd->refs ? fd->refs->fn : NULL; in cram_load_reference()
3453 sanitise_SQ_lines(fd); in cram_load_reference()
3455 fd->ref_fn = fn; in cram_load_reference()
3457 if (!fd->refs && fd->header) { in cram_load_reference()
3458 if (!(fd->refs = refs_create())) in cram_load_reference()
3460 if (-1 == refs_from_header(fd->refs, fd, fd->header)) in cram_load_reference()
3464 if (-1 == refs2id(fd->refs, fd->header)) in cram_load_reference()
3595 cram_container *cram_read_container(cram_fd *fd) { in cram_read_container() argument
3601 fd->err = 0; in cram_read_container()
3602 fd->eof = 0; in cram_read_container()
3605 if (IS_CRAM_1_VERS(fd)) { in cram_read_container()
3606 if ((s = itf8_decode_crc(fd, &c2.length, &crc)) == -1) { in cram_read_container()
3607 fd->eof = 1; in cram_read_container()
3614 if ((s = int32_decode(fd, &c2.length)) == -1) { in cram_read_container()
3615 if (CRAM_MAJOR_VERS(fd->version) == 2 && in cram_read_container()
3616 CRAM_MINOR_VERS(fd->version) == 0) in cram_read_container()
3617 fd->eof = 1; // EOF blocks arrived in v2.1 in cram_read_container()
3619 fd->eof = fd->empty_container ? 1 : 2; in cram_read_container()
3627 if ((s = itf8_decode_crc(fd, &c2.ref_seq_id, &crc)) == -1) return NULL; else rd+=s; in cram_read_container()
3628 if (CRAM_MAJOR_VERS(fd->version) >= 4) { in cram_read_container()
3630 if ((s = ltf8_decode_crc(fd, &i64, &crc))== -1) return NULL; else rd+=s; in cram_read_container()
3632 if ((s = ltf8_decode_crc(fd, &i64, &crc)) == -1) return NULL; else rd+=s; in cram_read_container()
3636 if ((s = itf8_decode_crc(fd, &i32, &crc))== -1) return NULL; else rd+=s; in cram_read_container()
3638 if ((s = itf8_decode_crc(fd, &i32, &crc)) == -1) return NULL; else rd+=s; in cram_read_container()
3641 if ((s = itf8_decode_crc(fd, &c2.num_records, &crc)) == -1) return NULL; else rd+=s; in cram_read_container()
3643 if (IS_CRAM_1_VERS(fd)) { in cram_read_container()
3647 if (IS_CRAM_3_VERS(fd)) { in cram_read_container()
3648 if ((s = ltf8_decode_crc(fd, &c2.record_counter, &crc)) == -1) in cram_read_container()
3654 if ((s = itf8_decode_crc(fd, &i32, &crc)) == -1) in cram_read_container()
3661 if ((s = ltf8_decode_crc(fd, &c2.num_bases, &crc))== -1) in cram_read_container()
3666 if ((s = itf8_decode_crc(fd, &c2.num_blocks, &crc)) == -1) return NULL; else rd+=s; in cram_read_container()
3667 if ((s = itf8_decode_crc(fd, &c2.num_landmarks, &crc))== -1) return NULL; else rd+=s; in cram_read_container()
3676 fd->err = errno; in cram_read_container()
3681 if ((s = itf8_decode_crc(fd, &c->landmark[i], &crc)) == -1) { in cram_read_container()
3689 if (IS_CRAM_3_VERS(fd)) { in cram_read_container()
3690 if (-1 == int32_decode(fd, (int32_t *)&c->crc32)) in cram_read_container()
3695 if (!fd->ignore_md5 && crc != c->crc32) { in cram_read_container()
3712 fd->multi_seq = 1; in cram_read_container()
3715 fd->empty_container = in cram_read_container()
3729 int cram_write_container(cram_fd *fd, cram_container *c) { in cram_write_container() argument
3747 if (CRAM_MAJOR_VERS(fd->version) >= 4) { in cram_write_container()
3756 if (IS_CRAM_3_VERS(fd)) in cram_write_container()
3766 if (IS_CRAM_3_VERS(fd)) { in cram_write_container()
3775 if (cp-buf != CRAM_IO_WRITE(buf, 1, cp-buf, fd)) { in cram_write_container()
3788 static int cram_flush_container2(cram_fd *fd, cram_container *c) { in cram_flush_container2() argument
3797 if (0 != cram_write_container(fd, c)) in cram_flush_container2()
3801 if (0 != cram_write_block(fd, c->comp_hdr_block)) in cram_flush_container2()
3808 if (0 != cram_write_block(fd, s->hdr_block)) in cram_flush_container2()
3812 if (0 != cram_write_block(fd, s->block[j])) in cram_flush_container2()
3817 return CRAM_IO_FLUSH(fd) == 0 ? 0 : -1; in cram_flush_container2()
3828 int cram_flush_container(cram_fd *fd, cram_container *c) { in cram_flush_container() argument
3830 if (0 != cram_encode_container(fd, c)) in cram_flush_container()
3833 return cram_flush_container2(fd, c); in cram_flush_container()
3837 cram_fd *fd; member
3845 if (0 != cram_encode_container(j->fd, j->c)) { in cram_flush_thread()
3853 static int cram_flush_result(cram_fd *fd) { in cram_flush_result() argument
3861 while ((r = t_pool_next_result(fd->rqueue))) { in cram_flush_result()
3870 fd = j->fd; in cram_flush_result()
3873 if (fd->mode == 'w') in cram_flush_result()
3874 if (0 != cram_flush_container2(fd, c)) in cram_flush_result()
3893 if (fd->ctr == lc) in cram_flush_result()
3894 fd->ctr = NULL; in cram_flush_result()
3895 if (fd->ctr_mt == lc) in cram_flush_result()
3896 fd->ctr_mt = NULL; in cram_flush_result()
3901 ret |= CRAM_IO_FLUSH(fd) == 0 ? 0 : -1; in cram_flush_result()
3907 if (fd->ctr == lc) in cram_flush_result()
3908 fd->ctr = NULL; in cram_flush_result()
3909 if (fd->ctr_mt == lc) in cram_flush_result()
3910 fd->ctr_mt = NULL; in cram_flush_result()
3916 int cram_flush_container_mt(cram_fd *fd, cram_container *c) { in cram_flush_container_mt() argument
3919 if (!fd->pool) in cram_flush_container_mt()
3920 return cram_flush_container(fd, c); in cram_flush_container_mt()
3924 j->fd = fd; in cram_flush_container_mt()
3927 t_pool_dispatch(fd->pool, fd->rqueue, cram_flush_thread, j); in cram_flush_container_mt()
3929 return cram_flush_result(fd); in cram_flush_container_mt()
4177 cram_slice *cram_read_slice(cram_fd *fd) { in cram_read_slice() argument
4178 cram_block *b = cram_read_block(fd); in cram_read_slice()
4189 if (!(s->hdr = cram_decode_slice_header(fd, b))) in cram_read_slice()
4209 if (!(s->block[i] = cram_read_block(fd))) in cram_read_slice()
4246 s->decode_md = fd->decode_md; in cram_read_slice()
4270 cram_file_def *cram_read_file_def(cram_fd *fd) { in cram_read_file_def() argument
4275 if (26 != CRAM_IO_READ(&def->magic[0], 1, 26, fd)) { in cram_read_file_def()
4293 fd->first_container += 26; in cram_read_file_def()
4294 fd->last_slice = 0; in cram_read_file_def()
4304 int cram_write_file_def(cram_fd *fd, cram_file_def *def) { in cram_write_file_def() argument
4305 return (CRAM_IO_WRITE(&def->magic[0], 1, 26, fd) == 26) ? 0 : -1; in cram_write_file_def()
4325 SAM_hdr *cram_read_SAM_hdr(cram_fd *fd) { in cram_read_SAM_hdr() argument
4331 if (IS_CRAM_1_VERS(fd)) { in cram_read_SAM_hdr()
4333 if (-1 == int32_decode(fd, &header_len)) in cram_read_SAM_hdr()
4340 if (header_len != CRAM_IO_READ(header, 1, header_len, fd)) in cram_read_SAM_hdr()
4344 fd->first_container += 4 + header_len; in cram_read_SAM_hdr()
4346 cram_container *c = cram_read_container(fd); in cram_read_SAM_hdr()
4353 fd->first_container += c->length + c->offset; in cram_read_SAM_hdr()
4360 if (!(b = cram_read_block(fd))) { in cram_read_SAM_hdr()
4370 len = b->comp_size + 2 + 4*IS_CRAM_3_VERS(fd) + in cram_read_SAM_hdr()
4394 if (!(b = cram_read_block(fd))) { in cram_read_SAM_hdr()
4398 len += b->comp_size + 2 + 4*IS_CRAM_3_VERS(fd) + in cram_read_SAM_hdr()
4413 if (c->length - len != CRAM_IO_READ(pads, 1, c->length - len, fd)) { in cram_read_SAM_hdr()
4464 int cram_write_SAM_hdr(cram_fd *fd, SAM_hdr *hdr) { in cram_write_SAM_hdr() argument
4466 int blank_block = (CRAM_MAJOR_VERS(fd->version) >= 3); in cram_write_SAM_hdr()
4469 if (fd->refs && !fd->no_ref) { in cram_write_SAM_hdr()
4483 if (!fd->refs->ref_id || !fd->refs->ref_id[i]) in cram_write_SAM_hdr()
4486 rlen = fd->refs->ref_id[i]->length; in cram_write_SAM_hdr()
4488 ref = cram_get_ref(fd, i, 1, rlen); in cram_write_SAM_hdr()
4490 rlen = fd->refs->ref_id[i]->length; /* In case it just loaded */ in cram_write_SAM_hdr()
4493 cram_ref_decr(fd->refs, i); in cram_write_SAM_hdr()
4504 if (fd->ref_fn) { in cram_write_SAM_hdr()
4506 full_path(ref_fn, fd->ref_fn); in cram_write_SAM_hdr()
4536 if (CRAM_MAJOR_VERS(fd->version) >= 3 && fd->level > 0) { in cram_write_SAM_hdr()
4538 if (fd->use_bz2) in cram_write_SAM_hdr()
4540 if (fd->use_bsc) in cram_write_SAM_hdr()
4542 if (fd->use_fqz) in cram_write_SAM_hdr()
4544 if (fd->use_lzma) in cram_write_SAM_hdr()
4546 cram_compress_block(fd, NULL, b, NULL, method, fd->level); in cram_write_SAM_hdr()
4550 c->length = b->comp_size + 2 + 4*IS_CRAM_3_VERS(fd) + in cram_write_SAM_hdr()
4567 c->length += padded_length + 2 + 4*IS_CRAM_3_VERS(fd) + in cram_write_SAM_hdr()
4581 2 + 4*IS_CRAM_3_VERS(fd) + in cram_write_SAM_hdr()
4596 if (-1 == cram_write_container(fd, c)) { in cram_write_SAM_hdr()
4602 if (-1 == cram_write_block(fd, b)) { in cram_write_SAM_hdr()
4615 if (-1 == cram_write_block(fd, b)) { in cram_write_SAM_hdr()
4625 if (-1 == refs_from_header(fd->refs, fd, fd->header)) in cram_write_SAM_hdr()
4627 if (-1 == refs2id(fd->refs, fd->header)) in cram_write_SAM_hdr()
4630 CRAM_IO_FLUSH(fd); in cram_write_SAM_hdr()
4646 static void cram_init_tables(cram_fd *fd) { in cram_init_tables() argument
4649 memset(fd->L1, 4, 256); in cram_init_tables()
4650 fd->L1['A'] = 0; fd->L1['a'] = 0; in cram_init_tables()
4651 fd->L1['C'] = 1; fd->L1['c'] = 1; in cram_init_tables()
4652 fd->L1['G'] = 2; fd->L1['g'] = 2; in cram_init_tables()
4653 fd->L1['T'] = 3; fd->L1['t'] = 3; in cram_init_tables()
4655 memset(fd->L2, 5, 256); in cram_init_tables()
4656 fd->L2['A'] = 0; fd->L2['a'] = 0; in cram_init_tables()
4657 fd->L2['C'] = 1; fd->L2['c'] = 1; in cram_init_tables()
4658 fd->L2['G'] = 2; fd->L2['g'] = 2; in cram_init_tables()
4659 fd->L2['T'] = 3; fd->L2['t'] = 3; in cram_init_tables()
4660 fd->L2['N'] = 4; fd->L2['n'] = 4; in cram_init_tables()
4662 if (IS_CRAM_1_VERS(fd)) { in cram_init_tables()
4676 fd->bam_flag_swap[i] = f; in cram_init_tables()
4692 fd->cram_flag_swap[i] = g; in cram_init_tables()
4697 fd->bam_flag_swap[i] = i; in cram_init_tables()
4699 fd->cram_flag_swap[i] = i; in cram_init_tables()
4702 memset(fd->cram_sub_matrix, 4, 32*32); in cram_init_tables()
4704 fd->cram_sub_matrix[i]['A'&0x1f]=0; in cram_init_tables()
4705 fd->cram_sub_matrix[i]['C'&0x1f]=1; in cram_init_tables()
4706 fd->cram_sub_matrix[i]['G'&0x1f]=2; in cram_init_tables()
4707 fd->cram_sub_matrix[i]['T'&0x1f]=3; in cram_init_tables()
4708 fd->cram_sub_matrix[i]['N'&0x1f]=4; in cram_init_tables()
4713 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][j]=3; in cram_init_tables()
4714 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][j]=3; in cram_init_tables()
4715 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][j]=3; in cram_init_tables()
4716 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][j]=3; in cram_init_tables()
4718 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][CRAM_SUBST_MATRIX[i+0]&0x1f]=0; in cram_init_tables()
4719 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][CRAM_SUBST_MATRIX[i+1]&0x1f]=1; in cram_init_tables()
4720 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][CRAM_SUBST_MATRIX[i+2]&0x1f]=2; in cram_init_tables()
4721 fd->cram_sub_matrix["ACGTN"[i>>2]&0x1f][CRAM_SUBST_MATRIX[i+3]&0x1f]=3; in cram_init_tables()
4733 cram_fd * cram_io_close(cram_fd * fd, int * fclose_result) in cram_io_close() argument
4735 if ( fd ) { in cram_io_close()
4736 if ( fd->fp_in ) { in cram_io_close()
4737 fclose(fd->fp_in); in cram_io_close()
4738 fd->fp_in = NULL; in cram_io_close()
4740 if ( fd->fp_out ) { in cram_io_close()
4741 int const r = paranoid_fclose(fd->fp_out); in cram_io_close()
4744 fd->fp_out = NULL; in cram_io_close()
4748 if ( fd->fp_in_callbacks ) { in cram_io_close()
4749 fd->fp_in_callbacks = fd->fp_in_callback_deallocate_function(fd->fp_in_callbacks); in cram_io_close()
4751 if ( fd->fp_in_buffer ) { in cram_io_close()
4752 fd->fp_in_buffer = cram_io_deallocate_input_buffer(fd->fp_in_buffer); in cram_io_close()
4754 if ( fd->fp_out_callbacks ) { in cram_io_close()
4755 fd->fp_out_callbacks = fd->fp_out_callback_deallocate_function(fd->fp_out_callbacks); in cram_io_close()
4757 if ( fd->fp_out_buffer ) { in cram_io_close()
4758 fd->fp_out_buffer = cram_io_deallocate_output_buffer(fd->fp_out_buffer); in cram_io_close()
4762 free(fd); in cram_io_close()
4763 fd = NULL; in cram_io_close()
4765 return fd; in cram_io_close()
4777 cram_fd * fd = (cram_fd *)malloc(sizeof(cram_fd)); in cram_io_open_by_callbacks() local
4779 if ( ! fd ) in cram_io_open_by_callbacks()
4780 return cram_io_close(fd,0); in cram_io_open_by_callbacks()
4782 memset(fd,0,sizeof(cram_fd)); in cram_io_open_by_callbacks()
4784 fd->fp_in_callback_allocate_function = callback_allocate_function; in cram_io_open_by_callbacks()
4785 fd->fp_in_callback_deallocate_function = callback_deallocate_function; in cram_io_open_by_callbacks()
4787 fd->fp_in_callbacks = in cram_io_open_by_callbacks()
4788 fd->fp_in_callback_allocate_function(filename,decompress); in cram_io_open_by_callbacks()
4790 if ( ! fd->fp_in_callbacks ) in cram_io_open_by_callbacks()
4791 return cram_io_close(fd,0); in cram_io_open_by_callbacks()
4793 fd->fp_in_buffer = cram_io_allocate_input_buffer(bufsize); in cram_io_open_by_callbacks()
4794 if ( ! fd->fp_in_buffer ) { in cram_io_open_by_callbacks()
4795 return cram_io_close(fd,0); in cram_io_open_by_callbacks()
4798 return fd; in cram_io_open_by_callbacks()
4809 cram_fd * fd = (cram_fd *)malloc(sizeof(cram_fd)); in cram_io_openw_by_callbacks() local
4811 if ( ! fd ) in cram_io_openw_by_callbacks()
4812 return cram_io_close(fd,0); in cram_io_openw_by_callbacks()
4814 memset(fd,0,sizeof(cram_fd)); in cram_io_openw_by_callbacks()
4816 fd->fp_out_callback_allocate_function = callback_allocate_function; in cram_io_openw_by_callbacks()
4817 fd->fp_out_callback_deallocate_function = callback_deallocate_function; in cram_io_openw_by_callbacks()
4819 fd->fp_out_callbacks = in cram_io_openw_by_callbacks()
4820 fd->fp_out_callback_allocate_function(filename); in cram_io_openw_by_callbacks()
4822 if ( ! fd->fp_out_callbacks ) in cram_io_openw_by_callbacks()
4823 return cram_io_close(fd,0); in cram_io_openw_by_callbacks()
4825 fd->fp_out_buffer = cram_io_allocate_output_buffer(bufsize); in cram_io_openw_by_callbacks()
4826 if ( ! fd->fp_out_buffer ) { in cram_io_openw_by_callbacks()
4827 return cram_io_close(fd,0); in cram_io_openw_by_callbacks()
4830 return fd; in cram_io_openw_by_callbacks()
4840 cram_fd * fd = (cram_fd *)malloc(sizeof(cram_fd)); in cram_io_open() local
4841 if ( ! fd ) in cram_io_open()
4842 return cram_io_close(fd,0); in cram_io_open()
4844 memset(fd,0,sizeof(cram_fd)); in cram_io_open()
4847 fd->fp_in_callback_allocate_function = NULL; in cram_io_open()
4848 fd->fp_in_callback_deallocate_function = cram_IO_deallocate_cram_io_input; in cram_io_open()
4849 fd->fp_out_callback_allocate_function = NULL; in cram_io_open()
4850 fd->fp_out_callback_deallocate_function = cram_IO_deallocate_cram_io_output; in cram_io_open()
4860 fd->fp_in = stdin; in cram_io_open()
4863 fd->fp_in = fopen(filename, fmode); in cram_io_open()
4866 if ( ! fd->fp_in ) in cram_io_open()
4867 return cram_io_close(fd,0); in cram_io_open()
4875 int const filedesc = fileno(fd->fp_in); in cram_io_open()
4885 int const c = fgetc(fd->fp_in); in cram_io_open()
4890 bufsize = __fbufsize(fd->fp_in); in cram_io_open()
4894 cc = ungetc(c,fd->fp_in); in cram_io_open()
4897 return cram_io_close(fd,0); in cram_io_open()
4903 fd->fp_in_callbacks = cram_IO_allocate_cram_io_input_from_C_FILE(fd->fp_in); in cram_io_open()
4904 if ( ! fd->fp_in_callbacks ) in cram_io_open()
4905 return cram_io_close(fd,0); in cram_io_open()
4911 fd->fp_in_buffer = cram_io_allocate_input_buffer(bufsize); in cram_io_open()
4912 if ( ! fd->fp_in_buffer ) { in cram_io_open()
4913 return cram_io_close(fd,0); in cram_io_open()
4916 setvbuf(fd->fp_in, NULL, _IONBF, 0); in cram_io_open()
4924 fd->fp_out = stdout; in cram_io_open()
4926 fd->fp_out = fopen(filename, fmode); in cram_io_open()
4929 if ( ! fd->fp_out ) in cram_io_open()
4930 return cram_io_close(fd,0); in cram_io_open()
4933 fd->fp_out = NULL; in cram_io_open()
4937 fd->fp_out_callbacks in cram_io_open()
4938 = cram_IO_allocate_cram_io_output_from_C_FILE(fd->fp_out); in cram_io_open()
4940 if ( ! fd->fp_out_callbacks ) in cram_io_open()
4941 return cram_io_close(fd,0); in cram_io_open()
4944 fd->fp_out_buffer = cram_io_allocate_output_buffer(bufsize); in cram_io_open()
4945 if ( ! fd->fp_out_buffer ) { in cram_io_open()
4946 return cram_io_close(fd,0); in cram_io_open()
4947 } else if (fd->fp_out) { in cram_io_open()
4948 setvbuf(fd->fp_out, NULL, _IONBF, 0); in cram_io_open()
4955 return fd; in cram_io_open()
4969 cram_fd *fd = NULL; in cram_open() local
4975 fd = cram_io_open(filename,mode,fmode); in cram_open()
4976 if (!fd) in cram_open()
4977 return cram_io_close(fd,0); in cram_open()
4979 fd->level = 5; in cram_open()
4981 fd->level = mode[2] - '0'; in cram_open()
4983 fd->mode = *mode; in cram_open()
4984 fd->first_container = 0; in cram_open()
4986 if (fd->mode == 'r') { in cram_open()
4989 if (!(fd->file_def = cram_read_file_def(fd))) in cram_open()
4992 fd->version = fd->file_def->major_version * 256 + in cram_open()
4993 fd->file_def->minor_version; in cram_open()
4995 if (!(fd->header = cram_read_SAM_hdr(fd))) { in cram_open()
4996 cram_free_file_def(fd->file_def); in cram_open()
5017 if (0 != cram_write_file_def(fd, &def)) in cram_open()
5020 fd->version = def.major_version * 256 + def.minor_version; in cram_open()
5025 cram_init_tables(fd); in cram_open()
5027 fd->prefix = strdup((cp = strrchr(filename, '/')) ? cp+1 : filename); in cram_open()
5028 if (!fd->prefix) in cram_open()
5030 fd->first_base = fd->last_base = -1; in cram_open()
5031 fd->record_counter = 0; in cram_open()
5033 fd->ctr = NULL; in cram_open()
5034 fd->ctr_mt = NULL; in cram_open()
5035 fd->refs = refs_create(); in cram_open()
5036 if (!fd->refs) in cram_open()
5038 fd->ref_id = -2; in cram_open()
5039 fd->ref = NULL; in cram_open()
5041 fd->decode_md = 0; in cram_open()
5042 fd->verbose = 0; in cram_open()
5043 fd->seqs_per_slice = SEQS_PER_SLICE; in cram_open()
5044 fd->bases_per_slice = BASES_PER_SLICE; in cram_open()
5045 fd->slices_per_container = SLICE_PER_CNT; in cram_open()
5046 fd->embed_ref = 0; in cram_open()
5047 fd->no_ref = 0; in cram_open()
5048 fd->ignore_md5 = 0; in cram_open()
5049 fd->ignore_chksum = 1; // Some disagreement in the specification of these in cram_open()
5050 fd->lossy_read_names = 0; in cram_open()
5051 fd->use_bz2 = 0; in cram_open()
5052 fd->use_rans = IS_CRAM_3_VERS(fd); in cram_open()
5053 fd->use_bsc = 0; in cram_open()
5054 fd->use_lzma = 0; in cram_open()
5055 fd->multi_seq = 0; in cram_open()
5056 fd->unsorted = 0; in cram_open()
5057 fd->shared_ref = 0; in cram_open()
5059 fd->index = NULL; in cram_open()
5060 fd->own_pool = 0; in cram_open()
5061 fd->pool = NULL; in cram_open()
5062 fd->rqueue = NULL; in cram_open()
5063 fd->job_pending = NULL; in cram_open()
5064 fd->ooc = 0; in cram_open()
5065 fd->binning = BINNING_NONE; in cram_open()
5066 fd->required_fields = INT_MAX; in cram_open()
5069 fd->m[i] = cram_new_metrics(); in cram_open()
5071 if (!(fd->tags_used = HashTableCreate(16, HASH_DYNAMIC_SIZE))) in cram_open()
5074 fd->range.refid = -2; // no ref. in cram_open()
5075 fd->eof = 1; in cram_open()
5076 fd->ref_fn = NULL; in cram_open()
5078 fd->bl = NULL; in cram_open()
5081 if (-1 == refs_from_header(fd->refs, fd, fd->header)) in cram_open()
5084 return fd; in cram_open()
5087 fd = cram_io_close(fd,0); in cram_open()
5107 cram_fd *fd = NULL; in cram_open_by_callbacks() local
5109 fd = cram_io_open_by_callbacks(filename, in cram_open_by_callbacks()
5114 if (!fd) in cram_open_by_callbacks()
5115 return cram_io_close(fd,0); in cram_open_by_callbacks()
5117 fd->level = 5; in cram_open_by_callbacks()
5119 fd->mode = 'r'; in cram_open_by_callbacks()
5120 fd->first_container = 0; in cram_open_by_callbacks()
5123 if (!(fd->file_def = cram_read_file_def(fd))) in cram_open_by_callbacks()
5126 fd->version = fd->file_def->major_version * 256 + in cram_open_by_callbacks()
5127 fd->file_def->minor_version; in cram_open_by_callbacks()
5129 if (!(fd->header = cram_read_SAM_hdr(fd))) in cram_open_by_callbacks()
5132 cram_init_tables(fd); in cram_open_by_callbacks()
5134 fd->prefix = strdup((cp = strrchr(filename, '/')) ? cp+1 : filename); in cram_open_by_callbacks()
5135 if (!fd->prefix) in cram_open_by_callbacks()
5137 fd->first_base = fd->last_base = -1; in cram_open_by_callbacks()
5138 fd->record_counter = 0; in cram_open_by_callbacks()
5140 fd->ctr = NULL; in cram_open_by_callbacks()
5141 fd->ctr_mt = NULL; in cram_open_by_callbacks()
5142 fd->refs = refs_create(); in cram_open_by_callbacks()
5143 if (!fd->refs) in cram_open_by_callbacks()
5145 fd->ref_id = -2; in cram_open_by_callbacks()
5146 fd->ref = NULL; in cram_open_by_callbacks()
5148 fd->decode_md = 0; in cram_open_by_callbacks()
5149 fd->verbose = 0; in cram_open_by_callbacks()
5150 fd->seqs_per_slice = SEQS_PER_SLICE; in cram_open_by_callbacks()
5151 fd->bases_per_slice = BASES_PER_SLICE; in cram_open_by_callbacks()
5152 fd->slices_per_container = SLICE_PER_CNT; in cram_open_by_callbacks()
5153 fd->embed_ref = 0; in cram_open_by_callbacks()
5154 fd->no_ref = 0; in cram_open_by_callbacks()
5155 fd->ignore_md5 = 0; in cram_open_by_callbacks()
5156 fd->ignore_chksum = 1; // Some disagreement in the specification of these in cram_open_by_callbacks()
5157 fd->lossy_read_names = 0; in cram_open_by_callbacks()
5158 fd->use_bz2 = 0; in cram_open_by_callbacks()
5159 fd->use_rans = IS_CRAM_3_VERS(fd); in cram_open_by_callbacks()
5160 fd->use_bsc = 0; in cram_open_by_callbacks()
5161 fd->use_lzma = 0; in cram_open_by_callbacks()
5162 fd->multi_seq = 0; in cram_open_by_callbacks()
5163 fd->unsorted = 0; in cram_open_by_callbacks()
5164 fd->shared_ref = 0; in cram_open_by_callbacks()
5166 fd->index = NULL; in cram_open_by_callbacks()
5167 fd->own_pool = 0; in cram_open_by_callbacks()
5168 fd->pool = NULL; in cram_open_by_callbacks()
5169 fd->rqueue = NULL; in cram_open_by_callbacks()
5170 fd->job_pending = NULL; in cram_open_by_callbacks()
5171 fd->ooc = 0; in cram_open_by_callbacks()
5172 fd->binning = BINNING_NONE; in cram_open_by_callbacks()
5173 fd->required_fields = INT_MAX; in cram_open_by_callbacks()
5176 fd->m[i] = cram_new_metrics(); in cram_open_by_callbacks()
5178 if (!(fd->tags_used = HashTableCreate(16, HASH_DYNAMIC_SIZE))) in cram_open_by_callbacks()
5181 fd->range.refid = -2; // no ref. in cram_open_by_callbacks()
5182 fd->eof = 1; in cram_open_by_callbacks()
5183 fd->ref_fn = NULL; in cram_open_by_callbacks()
5185 fd->bl = NULL; in cram_open_by_callbacks()
5188 if (-1 == refs_from_header(fd->refs, fd, fd->header)) in cram_open_by_callbacks()
5191 return fd; in cram_open_by_callbacks()
5194 fd = cram_io_close(fd,0); in cram_open_by_callbacks()
5215 cram_fd *fd = NULL; in cram_openw_by_callbacks() local
5217 fd = cram_io_openw_by_callbacks(filename, in cram_openw_by_callbacks()
5221 if (!fd) in cram_openw_by_callbacks()
5222 return cram_io_close(fd,0); in cram_openw_by_callbacks()
5224 fd->level = 5; in cram_openw_by_callbacks()
5226 fd->mode = 'w'; in cram_openw_by_callbacks()
5227 fd->first_container = 0; in cram_openw_by_callbacks()
5247 if (0 != cram_write_file_def(fd, &def)) in cram_openw_by_callbacks()
5250 fd->version = def.major_version * 256 + def.minor_version; in cram_openw_by_callbacks()
5255 cram_init_tables(fd); in cram_openw_by_callbacks()
5258 fd->prefix = strdup((cp = strrchr(filename, '/')) ? cp+1 : filename); in cram_openw_by_callbacks()
5259 if (!fd->prefix) in cram_openw_by_callbacks()
5262 fd->prefix = strdup(""); in cram_openw_by_callbacks()
5264 fd->first_base = fd->last_base = -1; in cram_openw_by_callbacks()
5265 fd->record_counter = 0; in cram_openw_by_callbacks()
5267 fd->ctr = NULL; in cram_openw_by_callbacks()
5268 fd->refs = refs_create(); in cram_openw_by_callbacks()
5269 if (!fd->refs) in cram_openw_by_callbacks()
5271 fd->ref_id = -2; in cram_openw_by_callbacks()
5272 fd->ref = NULL; in cram_openw_by_callbacks()
5274 fd->decode_md = 0; in cram_openw_by_callbacks()
5275 fd->verbose = 0; in cram_openw_by_callbacks()
5276 fd->seqs_per_slice = SEQS_PER_SLICE; in cram_openw_by_callbacks()
5277 fd->bases_per_slice = BASES_PER_SLICE; in cram_openw_by_callbacks()
5278 fd->slices_per_container = SLICE_PER_CNT; in cram_openw_by_callbacks()
5279 fd->embed_ref = 0; in cram_openw_by_callbacks()
5280 fd->no_ref = 0; in cram_openw_by_callbacks()
5281 fd->ignore_md5 = 0; in cram_openw_by_callbacks()
5282 fd->use_bz2 = 0; in cram_openw_by_callbacks()
5283 fd->use_rans = IS_CRAM_3_VERS(fd); in cram_openw_by_callbacks()
5284 fd->use_bsc = 0; in cram_openw_by_callbacks()
5285 fd->use_lzma = 0; in cram_openw_by_callbacks()
5286 fd->multi_seq = 0; in cram_openw_by_callbacks()
5287 fd->unsorted = 0; in cram_openw_by_callbacks()
5288 fd->shared_ref = 0; in cram_openw_by_callbacks()
5290 fd->index = NULL; in cram_openw_by_callbacks()
5291 fd->own_pool = 0; in cram_openw_by_callbacks()
5292 fd->pool = NULL; in cram_openw_by_callbacks()
5293 fd->rqueue = NULL; in cram_openw_by_callbacks()
5294 fd->job_pending = NULL; in cram_openw_by_callbacks()
5295 fd->ooc = 0; in cram_openw_by_callbacks()
5296 fd->binning = BINNING_NONE; in cram_openw_by_callbacks()
5297 fd->required_fields = INT_MAX; in cram_openw_by_callbacks()
5300 fd->m[i] = cram_new_metrics(); in cram_openw_by_callbacks()
5302 if (!(fd->tags_used = HashTableCreate(16, HASH_DYNAMIC_SIZE))) in cram_openw_by_callbacks()
5305 fd->range.refid = -2; // no ref. in cram_openw_by_callbacks()
5306 fd->eof = 1; in cram_openw_by_callbacks()
5307 fd->ref_fn = NULL; in cram_openw_by_callbacks()
5309 fd->bl = NULL; in cram_openw_by_callbacks()
5312 if (-1 == refs_from_header(fd->refs, fd, fd->header)) in cram_openw_by_callbacks()
5315 return fd; in cram_openw_by_callbacks()
5318 fd = cram_io_close(fd,0); in cram_openw_by_callbacks()
5331 int cram_flush(cram_fd *fd) { in cram_flush() argument
5332 if (!fd) in cram_flush()
5335 if (fd->mode == 'w' && fd->ctr) { in cram_flush()
5336 if(fd->ctr->slice) in cram_flush()
5337 cram_update_curr_slice(fd->ctr); in cram_flush()
5339 if (-1 == cram_flush_container_mt(fd, fd->ctr)) in cram_flush()
5352 int cram_write_eof_block(cram_fd *fd) { in cram_write_eof_block() argument
5384 if (IS_CRAM_3_VERS(fd)) { in cram_write_eof_block()
5395 38, 1, fd)) { in cram_write_eof_block()
5396 fd = cram_io_close(fd,0); in cram_write_eof_block()
5403 "\x01\x00\x01\x00\x01\x00", 30, 1, fd)) { in cram_write_eof_block()
5404 fd = cram_io_close(fd,0); in cram_write_eof_block()
5410 return cram_io_flush_output_buffer(fd); in cram_write_eof_block()
5422 int cram_close(cram_fd *fd) { in cram_close() argument
5427 if (!fd) { in cram_close()
5428 fd = cram_io_close(fd,0); in cram_close()
5432 if (fd->mode == 'w' && fd->ctr) { in cram_close()
5433 if(fd->ctr->slice) in cram_close()
5434 cram_update_curr_slice(fd->ctr); in cram_close()
5436 if (-1 == cram_flush_container_mt(fd, fd->ctr)) { in cram_close()
5437 fd = cram_io_close(fd,0); in cram_close()
5442 if (fd->pool && fd->eof >= 0) { in cram_close()
5443 t_pool_flush(fd->pool); in cram_close()
5445 if (0 != cram_flush_result(fd)) { in cram_close()
5446 fd = cram_io_close(fd,0); in cram_close()
5450 pthread_mutex_destroy(fd->metrics_lock); in cram_close()
5451 pthread_mutex_destroy(fd->ref_lock); in cram_close()
5452 pthread_mutex_destroy(fd->bam_list_lock); in cram_close()
5453 free(fd->metrics_lock); in cram_close()
5454 free(fd->ref_lock); in cram_close()
5455 free(fd->bam_list_lock); in cram_close()
5457 if (fd->mode == 'w') in cram_close()
5458 fd->ctr = NULL; // prevent double freeing in cram_close()
5462 t_results_queue_destroy(fd->rqueue); in cram_close()
5465 if (fd->mode == 'w') { in cram_close()
5467 if (0 != cram_write_eof_block(fd)) in cram_close()
5476 for (bl = fd->bl; bl; bl = next) { in cram_close()
5477 int i, max_rec = fd->seqs_per_slice * fd->slices_per_container; in cram_close()
5488 if (fd->file_def) in cram_close()
5489 cram_free_file_def(fd->file_def); in cram_close()
5491 if (fd->header) in cram_close()
5492 sam_hdr_free(fd->header); in cram_close()
5494 free(fd->prefix); in cram_close()
5496 if (fd->ctr) in cram_close()
5497 cram_free_container(fd->ctr); in cram_close()
5499 if (fd->ctr_mt && fd->ctr_mt != fd->ctr) in cram_close()
5500 cram_free_container(fd->ctr_mt); in cram_close()
5502 if (fd->refs) in cram_close()
5503 refs_free(fd->refs); in cram_close()
5504 if (fd->ref_free) in cram_close()
5505 free(fd->ref_free); in cram_close()
5508 if (fd->m[i]) in cram_close()
5509 free(fd->m[i]); in cram_close()
5511 if (fd->tags_used) in cram_close()
5512 HashTableDestroy(fd->tags_used, 1); in cram_close()
5514 if (fd->index) in cram_close()
5515 cram_index_free(fd); in cram_close()
5517 if (fd->own_pool && fd->pool) in cram_close()
5518 t_pool_destroy(fd->pool, 0); in cram_close()
5521 fd = cram_io_close(fd, &rclose); in cram_close()
5530 int cram_eof(cram_fd *fd) { in cram_eof() argument
5531 return fd->eof; in cram_eof()
5542 int cram_set_option(cram_fd *fd, enum cram_option opt, ...) { in cram_set_option() argument
5547 r = cram_set_voption(fd, opt, args); in cram_set_option()
5560 int cram_set_voption(cram_fd *fd, enum cram_option opt, va_list args) { in cram_set_voption() argument
5565 fd->decode_md = va_arg(args, int); in cram_set_voption()
5569 if (fd->prefix) in cram_set_voption()
5570 free(fd->prefix); in cram_set_voption()
5571 if (!(fd->prefix = strdup(va_arg(args, char *)))) in cram_set_voption()
5576 fd->verbose = va_arg(args, int); in cram_set_voption()
5580 fd->seqs_per_slice = va_arg(args, int); in cram_set_voption()
5584 fd->bases_per_slice = va_arg(args, int); in cram_set_voption()
5588 fd->slices_per_container = va_arg(args, int); in cram_set_voption()
5592 fd->embed_ref = va_arg(args, int); in cram_set_voption()
5596 fd->no_ref = va_arg(args, int); in cram_set_voption()
5600 fd->ignore_md5 = va_arg(args, int); in cram_set_voption()
5604 fd->ignore_chksum = va_arg(args, int); in cram_set_voption()
5608 fd->lossy_read_names = va_arg(args, int); in cram_set_voption()
5612 fd->use_bz2 = va_arg(args, int); in cram_set_voption()
5617 fd->use_rans = va_arg(args, int); in cram_set_voption()
5621 fd->use_bsc = va_arg(args, int); in cram_set_voption()
5625 fd->use_fqz = va_arg(args, int); in cram_set_voption()
5629 fd->use_lzma = va_arg(args, int); in cram_set_voption()
5633 fd->shared_ref = 1; in cram_set_voption()
5635 if (refs != fd->refs) { in cram_set_voption()
5636 if (fd->refs) in cram_set_voption()
5637 refs_free(fd->refs); in cram_set_voption()
5638 fd->refs = refs; in cram_set_voption()
5639 fd->refs->count++; in cram_set_voption()
5644 int r = cram_seek_to_refpos(fd, va_arg(args, cram_range *)); in cram_set_voption()
5645 if (fd->range.refid != -2) in cram_set_voption()
5646 fd->required_fields |= SAM_POS; in cram_set_voption()
5651 return cram_load_reference(fd, va_arg(args, char *)); in cram_set_voption()
5670 if (major == 1 && minor == 0 && fd && fd->mode != 'r') { in cram_set_voption()
5680 fd->multi_seq = va_arg(args, int); in cram_set_voption()
5686 if (!(fd->pool = t_pool_init(nthreads*2, nthreads))) in cram_set_voption()
5689 fd->rqueue = t_results_queue_init(); in cram_set_voption()
5690 fd->metrics_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5691 fd->ref_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5692 fd->bam_list_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5693 pthread_mutex_init(fd->metrics_lock, NULL); in cram_set_voption()
5694 pthread_mutex_init(fd->ref_lock, NULL); in cram_set_voption()
5695 pthread_mutex_init(fd->bam_list_lock, NULL); in cram_set_voption()
5696 fd->shared_ref = 1; in cram_set_voption()
5697 fd->own_pool = 1; in cram_set_voption()
5703 fd->pool = va_arg(args, t_pool *); in cram_set_voption()
5704 if (fd->pool) { in cram_set_voption()
5705 fd->rqueue = t_results_queue_init(); in cram_set_voption()
5706 fd->metrics_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5707 fd->ref_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5708 fd->bam_list_lock = malloc(sizeof(pthread_mutex_t)); in cram_set_voption()
5709 pthread_mutex_init(fd->metrics_lock, NULL); in cram_set_voption()
5710 pthread_mutex_init(fd->ref_lock, NULL); in cram_set_voption()
5711 pthread_mutex_init(fd->bam_list_lock, NULL); in cram_set_voption()
5713 fd->shared_ref = 1; // Needed to avoid clobbering ref between threads in cram_set_voption()
5714 fd->own_pool = 0; in cram_set_voption()
5722 fd->binning = va_arg(args, int); in cram_set_voption()
5726 fd->required_fields = va_arg(args, int); in cram_set_voption()
5727 if (fd->range.refid != -2) in cram_set_voption()
5728 fd->required_fields |= SAM_POS; in cram_set_voption()
5732 fd->preserve_aux_order = va_arg(args, int); in cram_set_voption()
5736 fd->preserve_aux_size = va_arg(args, int); in cram_set_voption()