void FASTAReader::add_char_to_id(char ch) { (*this->seqs_ids)[current_seq].push_back(ch); current = fgetc_unlocked(file_); }
static int snappy_in_java_uncompress(FILE *infp, FILE *outfp) { snappy_in_java_header_t header; work_buffer_t wb; int err = 1; int outfd; wb.c = NULL; wb.uc = NULL; /* read header */ if (fread(&header, sizeof(header), 1, infp) != 1) { print_error("Failed to read a file: %s\n", strerror(errno)); goto cleanup; } /* check header */ if (memcmp(header.magic, SNAPPY_IN_JAVA_MAGIC, SNAPPY_IN_JAVA_MAGIC_LEN) != 0) { print_error("This is not a snappy-java file.\n"); goto cleanup; } /* Use a file descriptor 'outfd' instead of the stdio file pointer 'outfp' * to reduce the number of write system calls. */ fflush(outfp); outfd = fileno(outfp); /* read body */ work_buffer_init(&wb, MAX_BLOCK_SIZE); for (;;) { int compressed_flag; size_t length = 0; unsigned int crc32c = 0; /* read compressed flag */ compressed_flag = fgetc_unlocked(infp); switch (compressed_flag) { case EOF: /* read all blocks */ err = 0; goto cleanup; case COMPRESSED_FLAG: case UNCOMPRESSED_FLAG: /* pass */ break; default: print_error("Unknown compressed flag 0x%02x\n", compressed_flag); goto cleanup; } /* read data length. */ length |= (fgetc_unlocked(infp) << 8); length |= (fgetc_unlocked(infp) << 0); /* read crc32c. */ crc32c |= (fgetc_unlocked(infp) << 24); crc32c |= (fgetc_unlocked(infp) << 16); crc32c |= (fgetc_unlocked(infp) << 8); crc32c |= (fgetc_unlocked(infp) << 0); /* check read error */ if (feof(infp)) { print_error("Unexpected end of file.\n"); goto cleanup; } else if (ferror(infp)) { print_error("Failed to read a file: %s\n", strerror(errno)); goto cleanup; } /* read data */ if (fread(wb.c, length, 1, infp) != 1) { if (feof(infp)) { print_error("Unexpected end of file\n"); } else { print_error("Failed to read a file: %s\n", strerror(errno)); } goto cleanup; } trace("read %ld bytes.\n", (long)(length)); if (compressed_flag == COMPRESSED_FLAG) { /* check the uncompressed length */ size_t uncompressed_length; err = snappy_uncompressed_length(wb.c, length, &uncompressed_length); if (err != 0) { print_error("Invalid data: GetUncompressedLength failed %d\n", err); goto cleanup; } err = 1; if (uncompressed_length > wb.uclen) { print_error("Invalid data: too long uncompressed length\n"); goto cleanup; } /* uncompress and write */ if (snappy_uncompress(wb.c, length, wb.uc, &uncompressed_length)) { print_error("Invalid data: RawUncompress failed\n"); goto cleanup; } if (check_and_write_block(outfd, wb.uc, uncompressed_length, 1, crc32c)) { goto cleanup; } } else { if (check_and_write_block(outfd, wb.c, length, 1, crc32c)) { goto cleanup; } } } cleanup: work_buffer_free(&wb); return err; }
FASTAReader::FASTAReader(std::string filename) : file_(fopen(filename.c_str(), "r")), seq_sizes(VSIZE) { current = fgetc_unlocked(file_); }
FASTAReader::FASTAReader(char* filename) : file_(fopen(filename, "r")), seq_sizes(VSIZE) { current = fgetc_unlocked(file_); }
static int snappy_java_uncompress(FILE *infp, FILE *outfp) { snappy_java_header_t header; work_buffer_t wb; int err = 1; int outfd; wb.c = NULL; wb.uc = NULL; /* read header */ if (fread(&header, sizeof(header), 1, infp) != 1) { print_error("Failed to read a file: %s\n", strerror(errno)); goto cleanup; } /* check header */ if (memcmp(header.magic, SNAPPY_JAVA_MAGIC, SNAPPY_JAVA_MAGIC_LEN) != 0) { print_error("This is not a snappy-java file.\n"); goto cleanup; } header.version = ntohl(header.version); if (header.version != SNAPPY_JAVA_FILE_VERSION) { print_error("Unknown snappy-java version %d\n", header.version); goto cleanup; } header.compatible_version = ntohl(header.compatible_version); if (header.compatible_version != SNAPPY_JAVA_FILE_VERSION) { print_error("Unknown snappy-java compatible version %d\n", header.compatible_version); goto cleanup; } /* Use a file descriptor 'outfd' instead of the stdio file pointer 'outfp' * to reduce the number of write system calls. */ fflush(outfp); outfd = fileno(outfp); /* read body */ work_buffer_init(&wb, DEFAULT_BLOCK_SIZE); for (;;) { /* read the compressed length in a block */ size_t compressed_length = 0; size_t uncompressed_length = wb.uclen; int idx; for (idx = 3; idx >= 0; idx--) { int chr = fgetc_unlocked(infp); if (chr == -1) { if (idx == 3) { /* read all blocks */ err = 0; goto cleanup; } print_error("Unexpected end of file.\n"); goto cleanup; } compressed_length |= (chr << (idx * 8)); } trace("read 4 bytes (compressed_length = %ld)\n", (long)compressed_length); if (compressed_length == 0) { print_error("Invalid compressed length %ld\n", (long)compressed_length); goto cleanup; } if (compressed_length > wb.clen) { work_buffer_resize(&wb, compressed_length, 0); } /* read the compressed data */ if (fread(wb.c, compressed_length, 1, infp) != 1) { if (feof(infp)) { print_error("Unexpected end of file\n"); } else { print_error("Failed to read a file: %s\n", strerror(errno)); } goto cleanup; } trace("read %ld bytes.\n", (long)(compressed_length)); /* check the uncompressed length */ err = snappy_uncompressed_length(wb.c, compressed_length, &uncompressed_length); if (err != 0) { print_error("Invalid data: GetUncompressedLength failed %d\n", err); goto cleanup; } err = 1; if (uncompressed_length > wb.uclen) { work_buffer_resize(&wb, 0, uncompressed_length); } /* uncompress and write */ if (snappy_uncompress(wb.c, compressed_length, wb.uc, &uncompressed_length)) { print_error("Invalid data: RawUncompress failed\n"); goto cleanup; } if (write_full(outfd, wb.uc, uncompressed_length) != uncompressed_length) { print_error("Failed to write a file: %s\n", strerror(errno)); goto cleanup; } trace("write %ld bytes\n", (long)uncompressed_length); } cleanup: work_buffer_free(&wb); return err; }
int __fgetc_unlocked(FILE *f) { return fgetc_unlocked(f); }
static int do_test (void) { const char blah[] = "BLAH"; char buf[strlen (blah) + 1]; FILE *fp, *f; const char *cp; char *wp; if ((fp = fdopen (fd, "w+")) == NULL) exit (1); flockfile (fp); f = fp; cp = blah; /* These tests deliberately use fwrite_unlocked with the size argument specified as 0, which results in "division by zero" warnings from the expansion of that macro (in code that is not evaluated for a size of 0). This applies to the tests of fread_unlocked below as well. */ DIAG_PUSH_NEEDS_COMMENT; DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdiv-by-zero"); if (ftello (fp) != 0 || fwrite_unlocked (blah, blah - blah, strlen (blah), f++) != 0 || f != fp + 1 || fwrite_unlocked ("", 5.0, 0, --f) != 0 || f != fp || fwrite_unlocked (cp++, 16, 0.25, fp) != 0 || cp != blah + 1 || fwrite_unlocked (--cp, 0.25, 16, fp) != 0 || cp != blah || fwrite_unlocked (blah, 0, -0.0, fp) != 0 || ftello (fp) != 0) { puts ("One of fwrite_unlocked tests failed"); exit (1); } DIAG_POP_NEEDS_COMMENT; if (fwrite_unlocked (blah, 1, strlen (blah) - 2, fp) != strlen (blah) - 2) { puts ("Could not write string into file"); exit (1); } if (putc_unlocked ('A' + 0x1000000, fp) != 'A') { puts ("putc_unlocked failed"); exit (1); } f = fp; cp = blah + strlen (blah) - 1; if (putc_unlocked (*cp++, f++) != 'H' || f != fp + 1 || cp != strchr (blah, '\0')) { puts ("fputc_unlocked failed"); exit (1); } if (ftello (fp) != (off_t) strlen (blah)) { printf ("Failed to write %zd bytes to temporary file", strlen (blah)); exit (1); } rewind (fp); f = fp; wp = buf; memset (buf, ' ', sizeof (buf)); /* See explanation above. */ DIAG_PUSH_NEEDS_COMMENT; DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdiv-by-zero"); if (ftello (fp) != 0 || fread_unlocked (buf, buf - buf, strlen (blah), f++) != 0 || f != fp + 1 || fread_unlocked (buf, 5.0, 0, --f) != 0 || f != fp || fread_unlocked (wp++, 16, 0.25, fp) != 0 || wp != buf + 1 || fread_unlocked (--wp, 0.25, 16, fp) != 0 || wp != buf || fread_unlocked (buf, 0, -0.0, fp) != 0 || ftello (fp) != 0 || memcmp (buf, " ", sizeof (buf)) != 0) { puts ("One of fread_unlocked tests failed"); exit (1); } DIAG_POP_NEEDS_COMMENT; if (fread_unlocked (buf, 1, strlen (blah) - 2, fp) != strlen (blah) - 2) { puts ("Could not read string from file"); exit (1); } if (getc_unlocked (fp) != 'A') { puts ("getc_unlocked failed"); exit (1); } f = fp; if (fgetc_unlocked (f++) != 'H' || f != fp + 1 || fgetc_unlocked (--f) != EOF || f != fp) { puts ("fgetc_unlocked failed"); exit (1); } if (ftello (fp) != (off_t) strlen (blah)) { printf ("Failed to read %zd bytes from temporary file", strlen (blah)); exit (1); } funlockfile (fp); fclose (fp); return 0; }