static void die2x(int e, char *x1, char *x2) { bio_put_str(bio_1, x1); bio_put_str(bio_1, x2); bio_put_str(bio_1, "\n"); bio_flush(bio_1); _exit(e); }
ssize_t flushread(int fd, char *buf, int len) { int j; for (j = 0; j < cnum; ++j) bio_flush(&c[j].ss); if (flagforcerotate) { for (j = 0; j < cnum; ++j) if (c[j].bytes > 0) fullcurrent(&c[j]); flagforcerotate = 0; } if (!len) return 0; if (flagexitasap) { if (flagnewline) return 0; len = 1; } sig_unblock(SIGTERM); sig_unblock(SIGALRM); len = read(fd, buf, len); sig_block(SIGTERM); sig_block(SIGALRM); if (len <= 0) return len; flagnewline = (buf[len - 1] == '\n'); return len; }
int main(int argc, char **argv, char **envp) { uint8_t buf[1024]; cdb_t cdb; char *key; uint32_t len; uint32_t r; uint32_t pos; uint32_t skip = 0; char *skip_str; if (!*argv || !*++argv) usage(); key = *argv; skip_str = *++argv; if (skip_str) { if (sscanf(skip_str, "%" PRIu32, &skip) != strlen(skip_str)) usage(); } /* Initialize the cdb struct using stdin as it's file descriptor. */ if (cdb_init(&cdb, 0) == -1) strerr_die2x(111, FATAL, "failed to initialize cdb"); for (;;) { r = cdb_find_next(&cdb, key, strlen(key)); if (r == -1) strerr_die2sys(111, FATAL, "unable to read input: "); if (!r) _exit(100); if (!skip) break; skip--; } /* If there's a record in the cdb file, then the cdb structs dlen property * will be set to a non-zero value and it's position will be set to the * offset in the file containing the data. Read the data in chunks and send * it to stdout. */ len = cdb.dlen; pos = cdb.dpos; while (len > 0) { r = sizeof(buf); if (r > len) r = len; if (cdb_read(buf, r, &cdb, pos) == -1) strerr_die2sys(111, FATAL, "unable to read input: "); if (bio_put(bio_1, buf, r) == -1) strerr_die2sys(111, FATAL, "unable to write output: "); pos += r; len -= r; } if (bio_flush(bio_1) == -1) strerr_die2sys(111, FATAL, "unable to write output: "); cdb_free(&cdb); return 0; }
int main(int argc, char **argv) { int opt; while ((opt = sgetopt(argc, argv, "ab:")) != -1) { switch (opt) { case 'a': bio_put_str(bio_1, "a\n"); break; case 'b': bio_put_str(bio_1, soptarg); bio_put_str(bio_1, "\n"); break; default: break; } } bio_flush(bio_1); return 0; }
int main() { array_t array = ARRAY_INIT(1); char buf[FMT_ULONG_MAX + 1]; int r; for (;;) { array_reset(&array); r = bio_get_line(&array, bio_0); if (r <= 0) break; buf[fmt_ulong(buf, r)] = 0; array_append_null(&array); bio_put_str(bio_1, buf); bio_put_str(bio_1, " - "); bio_put_str(bio_1, array_start(&array)); bio_put_str(bio_1, "\n"); bio_flush(bio_1); } return 0; }
static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_codestream_info_t *cstr_info, int tileno) { int bandno, cblkno; unsigned char *c = dest; int compno = pi->compno; /* component value */ int resno = pi->resno; /* resolution level value */ int precno = pi->precno; /* precinct value */ int layno = pi->layno; /* quality layer value */ opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; opj_tcd_resolution_t *res = &tilec->resolutions[resno]; opj_bio_t *bio = NULL; /* BIO component */ /* <SOP 0xff91> */ if (tcp->csty & J2K_CP_CSTY_SOP) { c[0] = 255; c[1] = 145; c[2] = 0; c[3] = 4; c[4] = (unsigned char)((tile->packno % 65536) / 256); c[5] = (unsigned char)((tile->packno % 65536) % 256); c += 6; } /* </SOP> */ if (!layno) { for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; tgt_reset(prc->incltree); tgt_reset(prc->imsbtree); for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; cblk->numpasses = 0; tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps); } } } bio = bio_create(); bio_init_enc(bio, c, length); bio_write(bio, 1, 1); /* Empty header bit */ /* Writing Packet header */ for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!cblk->numpasses && layer->numpasses) { tgt_setvalue(prc->incltree, cblkno, layno); } } for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; int increment = 0; int nump = 0; int len = 0, passno; /* cblk inclusion bits */ if (!cblk->numpasses) { tgt_encode(bio, prc->incltree, cblkno, layno + 1); } else { bio_write(bio, layer->numpasses != 0, 1); } /* if cblk not included, go to the next cblk */ if (!layer->numpasses) { continue; } /* if first instance of cblk --> zero bit-planes information */ if (!cblk->numpasses) { cblk->numlenbits = 3; tgt_encode(bio, prc->imsbtree, cblkno, 999); } /* number of coding passes included */ t2_putnumpasses(bio, layer->numpasses); /* computation of the increase of the length indicator and insertion in the header */ for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { opj_tcd_pass_t *pass = &cblk->passes[passno]; nump++; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); len = 0; nump = 0; } } t2_putcommacode(bio, increment); /* computation of the new Length indicator */ cblk->numlenbits += increment; /* insertion of the codeword segment length */ for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { opj_tcd_pass_t *pass = &cblk->passes[passno]; nump++; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); len = 0; nump = 0; } } } } if (bio_flush(bio)) { bio_destroy(bio); return -999; /* modified to eliminate longjmp !! */ } c += bio_numbytes(bio); bio_destroy(bio); /* <EPH 0xff92> */ if (tcp->csty & J2K_CP_CSTY_EPH) { c[0] = 255; c[1] = 146; c += 2; } /* </EPH> */ /* << INDEX */ /* End of packet header position. Currently only represents the distance to start of packet // Will be updated later by incrementing with packet start value */ if(cstr_info && cstr_info->index_write) { opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; info_PK->end_ph_pos = (int)(c - dest); } /* INDEX >> */ /* Writing the packet body */ for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!layer->numpasses) { continue; } if (c + layer->len > dest + length) { return -999; } memcpy(c, layer->data, layer->len); cblk->numpasses += layer->numpasses; c += layer->len; /* << INDEX */ if(cstr_info && cstr_info->index_write) { opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; info_PK->disto += layer->disto; if (cstr_info->D_max < info_PK->disto) { cstr_info->D_max = info_PK->disto; } } /* INDEX >> */ } } return (c - dest); }
int main(int argc, char **argv, char **envp) { array_t array; bio_t bin; char bin_data[8192]; bio_t *bio; int fd; char *name; int opt; ssize_t r; struct stat st; char *type = 0; while ((opt = sgetopt(argc, argv, "t:")) != -1) { switch (opt) { case '?': usage(); case 't': type = soptarg; break; } } argv += soptind; if (!type) usage(); array_init(&array, 1); /* Set the initial buffered io pointer to use stdin and set the default name * to '-'. */ bio = bio_0; name = "-"; for (;;) { if (*argv) { /* If a path was given then check to see if it's a directory and skip * over it if it is. */ if (stat(*argv, &st)) err(1, "fatal"); if (S_ISDIR(st.st_mode)) { errno = EISDIR; warn(*argv); argv++; continue; } /* Open the file for reading and construct our own buffered io struct to * use for reading in the file and hashing it. Also set the default * buffered io pointer to our own and update the name to reflect the * current file. */ fd = open_read(*argv); if (fd == -1) err(1, "fatal"); bio_init(&bin, read, fd, bin_data, sizeof(bin_data)); bio = &bin; name = *argv; } /* If there's no more arguments passed on the command line and the default * buffered io pointer doesn't point to stdin then that means all of the * files have been hashed and it's time to exit. */ else if ((bio != bio_0)) break; if (!strcmp(type, "md4")) handle_md4(&array, bio); else if (!strcmp(type, "md5")) handle_md5(&array, bio); else if (!strcmp(type, "sha1")) handle_sha1(&array, bio); else if (!strcmp(type, "sha256")) handle_sha256(&array, bio); else if (!strcmp(type, "sha512")) handle_sha512(&array, bio); else errx(1, "fatal: %s", "unknown type"); bio_put_str(bio_1, array_start(&array)); bio_put_str(bio_1, " "); bio_put_str(bio_1, name); bio_put_str(bio_1, "\n"); bio_flush(bio_1); array_trunc(&array); if (*argv) close(fd); if ((!*argv) || (!*++argv)) break; } return 0; }
static bool t2_encode_packet( OPJ_UINT32 tileno, opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, OPJ_BYTE *dest, OPJ_UINT32 * p_data_written, OPJ_UINT32 length, opj_codestream_info_t *cstr_info) { OPJ_UINT32 bandno, cblkno; OPJ_BYTE *c = dest; OPJ_UINT32 l_nb_bytes; OPJ_UINT32 compno = pi->compno; /* component value */ OPJ_UINT32 resno = pi->resno; /* resolution level value */ OPJ_UINT32 precno = pi->precno; /* precinct value */ OPJ_UINT32 layno = pi->layno; /* quality layer value */ OPJ_UINT32 l_nb_blocks; opj_tcd_band_t *band = 00; opj_tcd_cblk_enc_t* cblk = 00; opj_tcd_pass_t *pass = 00; opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; opj_tcd_resolution_t *res = &tilec->resolutions[resno]; opj_bio_t *bio = 00; /* BIO component */ /* <SOP 0xff91> */ if (tcp->csty & J2K_CP_CSTY_SOP) { c[0] = 255; c[1] = 145; c[2] = 0; c[3] = 4; c[4] = (tile->packno % 65536) / 256; c[5] = (tile->packno % 65536) % 256; c += 6; length -= 6; } /* </SOP> */ if (!layno) { band = res->bands; for (bandno = 0; bandno < res->numbands; ++bandno) { opj_tcd_precinct_t *prc = &band->precincts[precno]; tgt_reset(prc->incltree); tgt_reset(prc->imsbtree); l_nb_blocks = prc->cw * prc->ch; for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) { opj_tcd_cblk_enc_t* cblk_v = &prc->cblks.enc[cblkno]; cblk_v->numpasses = 0; tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk_v->numbps); } ++band; } } bio = bio_create(); bio_init_enc(bio, c, length); bio_write(bio, 1, 1); /* Empty header bit */ /* Writing Packet header */ band = res->bands; for (bandno = 0; bandno < res->numbands; ++bandno) { opj_tcd_precinct_t *prc = &band->precincts[precno]; l_nb_blocks = prc->cw * prc->ch; cblk = prc->cblks.enc; for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) { opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!cblk->numpasses && layer->numpasses) { tgt_setvalue(prc->incltree, cblkno, layno); } ++cblk; } cblk = prc->cblks.enc; for (cblkno = 0; cblkno < l_nb_blocks; cblkno++) { opj_tcd_layer_t *layer = &cblk->layers[layno]; OPJ_UINT32 increment = 0; OPJ_UINT32 nump = 0; OPJ_UINT32 len = 0, passno; OPJ_UINT32 l_nb_passes; /* cblk inclusion bits */ if (!cblk->numpasses) { tgt_encode(bio, prc->incltree, cblkno, layno + 1); } else { bio_write(bio, layer->numpasses != 0, 1); } /* if cblk not included, go to the next cblk */ if (!layer->numpasses) { ++cblk; continue; } /* if first instance of cblk --> zero bit-planes information */ if (!cblk->numpasses) { cblk->numlenbits = 3; tgt_encode(bio, prc->imsbtree, cblkno, 999); } /* number of coding passes included */ t2_putnumpasses(bio, layer->numpasses); l_nb_passes = cblk->numpasses + layer->numpasses; pass = cblk->passes + cblk->numpasses; /* computation of the increase of the length indicator and insertion in the header */ for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) { ++nump; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); len = 0; nump = 0; } ++pass; } t2_putcommacode(bio, increment); /* computation of the new Length indicator */ cblk->numlenbits += increment; pass = cblk->passes + cblk->numpasses; /* insertion of the codeword segment length */ for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) { nump++; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); len = 0; nump = 0; } ++pass; } ++cblk; } ++band; } if (bio_flush(bio)) { bio_destroy(bio); return false; /* modified to eliminate longjmp !! */ } l_nb_bytes = bio_numbytes(bio); c += l_nb_bytes; length -= l_nb_bytes; bio_destroy(bio); /* <EPH 0xff92> */ if (tcp->csty & J2K_CP_CSTY_EPH) { c[0] = 255; c[1] = 146; c += 2; length -= 2; } /* </EPH> */ /* << INDEX */ // End of packet header position. Currently only represents the distance to start of packet // Will be updated later by incrementing with packet start value if(cstr_info && cstr_info->index_write) { opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; info_PK->end_ph_pos = (OPJ_INT32)(c - dest); } /* INDEX >> */ /* Writing the packet body */ band = res->bands; for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_precinct_t *prc = &band->precincts[precno]; l_nb_blocks = prc->cw * prc->ch; cblk = prc->cblks.enc; for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) { opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!layer->numpasses) { ++cblk; continue; } if (layer->len > length) { return false; } memcpy(c, layer->data, layer->len); cblk->numpasses += layer->numpasses; c += layer->len; length -= layer->len; /* << INDEX */ if(cstr_info && cstr_info->index_write) { opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno]; info_PK->disto += layer->disto; if (cstr_info->D_max < info_PK->disto) { cstr_info->D_max = info_PK->disto; } } ++cblk; /* INDEX >> */ } ++band; } * p_data_written += (c - dest); return true; }
static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_image_info_t * image_info, int tileno) { int bandno, cblkno; unsigned char *sop = 0, *eph = 0; unsigned char *c = dest; int compno = pi->compno; /* component value */ int resno = pi->resno; /* resolution level value */ int precno = pi->precno; /* precinct value */ int layno = pi->layno; /* quality layer value */ opj_tcd_tilecomp_t *tilec = &tile->comps[compno]; opj_tcd_resolution_t *res = &tilec->resolutions[resno]; opj_bio_t *bio = NULL; /* BIO component */ /* <SOP 0xff91> */ if (tcp->csty & J2K_CP_CSTY_SOP) { sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char)); sop[0] = 255; sop[1] = 145; sop[2] = 0; sop[3] = 4; sop[4] = (image_info->num % 65536) / 256; sop[5] = (image_info->num % 65536) % 256; memcpy(c, sop, 6); opj_free(sop); c += 6; } /* </SOP> */ if (!layno) { for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; tgt_reset(prc->incltree); tgt_reset(prc->imsbtree); for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; cblk->numpasses = 0; tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps); } } } bio = bio_create(); bio_init_enc(bio, c, length); bio_write(bio, 1, 1); /* Empty header bit */ /* Writing Packet header */ for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!cblk->numpasses && layer->numpasses) { tgt_setvalue(prc->incltree, cblkno, layno); } } for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; int increment = 0; int nump = 0; int len = 0, passno; /* cblk inclusion bits */ if (!cblk->numpasses) { tgt_encode(bio, prc->incltree, cblkno, layno + 1); } else { bio_write(bio, layer->numpasses != 0, 1); } /* if cblk not included, go to the next cblk */ if (!layer->numpasses) { continue; } /* if first instance of cblk --> zero bit-planes information */ if (!cblk->numpasses) { cblk->numlenbits = 3; tgt_encode(bio, prc->imsbtree, cblkno, 999); } /* number of coding passes included */ t2_putnumpasses(bio, layer->numpasses); /* computation of the increase of the length indicator and insertion in the header */ for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { opj_tcd_pass_t *pass = &cblk->passes[passno]; nump++; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump))); len = 0; nump = 0; } } t2_putcommacode(bio, increment); /* computation of the new Length indicator */ cblk->numlenbits += increment; /* insertion of the codeword segment length */ for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) { opj_tcd_pass_t *pass = &cblk->passes[passno]; nump++; len += pass->len; if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) { bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump)); len = 0; nump = 0; } } } } if (bio_flush(bio)) { return -999; /* modified to eliminate longjmp !! */ } c += bio_numbytes(bio); bio_destroy(bio); /* <EPH 0xff92> */ if (tcp->csty & J2K_CP_CSTY_EPH) { eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char)); eph[0] = 255; eph[1] = 146; memcpy(c, eph, 2); opj_free(eph); c += 2; } /* </EPH> */ /* Writing the packet body */ for (bandno = 0; bandno < res->numbands; bandno++) { opj_tcd_band_t *band = &res->bands[bandno]; opj_tcd_precinct_t *prc = &band->precincts[precno]; for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) { opj_tcd_cblk_t *cblk = &prc->cblks[cblkno]; opj_tcd_layer_t *layer = &cblk->layers[layno]; if (!layer->numpasses) { continue; } if (c + layer->len > dest + length) { return -999; } memcpy(c, layer->data, layer->len); cblk->numpasses += layer->numpasses; c += layer->len; /* ADD for index Cfr. Marcela --> delta disto by packet */ if(image_info && image_info->index_write && image_info->index_on) { opj_tile_info_t *info_TL = &image_info->tile[tileno]; opj_packet_info_t *info_PK = &info_TL->packet[image_info->num]; info_PK->disto += layer->disto; if (image_info->D_max < info_PK->disto) { image_info->D_max = info_PK->disto; } } /* </ADD> */ } } return (c - dest); }
int main() { bio_stream(bio_1, bio_0, 5); bio_flush(bio_1); return 0; }
int t2_encode_packet(tcd_tile_t *tile, j2k_tcp_t *tcp, int compno, int resno, int precno, int layno, unsigned char *dest, int len) { int bandno, cblkno; tcd_tilecomp_t *tilec=&tile->comps[compno]; tcd_resolution_t *res=&tilec->resolutions[resno]; unsigned char *c=dest; if (!layno) { for (bandno=0; bandno<res->numbands; bandno++) { tcd_band_t *band=&res->bands[bandno]; tcd_precinct_t *prc=&band->precincts[precno]; tgt_reset(prc->incltree); tgt_reset(prc->imsbtree); for (cblkno=0; cblkno<prc->cw*prc->ch; cblkno++) { tcd_cblk_t *cblk=&prc->cblks[cblkno]; cblk->numpasses=0; tgt_setvalue(prc->imsbtree, cblkno, band->numbps-cblk->numbps); } } } bio_init_enc(c, len); bio_write(1, 1); for (bandno=0; bandno<res->numbands; bandno++) { tcd_band_t *band=&res->bands[bandno]; tcd_precinct_t *prc=&band->precincts[precno]; for (cblkno=0; cblkno<prc->cw*prc->ch; cblkno++) { tcd_cblk_t *cblk=&prc->cblks[cblkno]; tcd_layer_t *layer=&cblk->layers[layno]; if (!cblk->numpasses && layer->numpasses) { tgt_setvalue(prc->incltree, cblkno, layno); } } for (cblkno=0; cblkno<prc->cw*prc->ch; cblkno++) { tcd_cblk_t *cblk=&prc->cblks[cblkno]; tcd_layer_t *layer=&cblk->layers[layno]; int increment; if (!cblk->numpasses) { tgt_encode(prc->incltree, cblkno, layno+1); } else { bio_write(layer->numpasses!=0, 1); } if (!layer->numpasses) { continue; } if (!cblk->numpasses) { cblk->numlenbits=3; tgt_encode(prc->imsbtree, cblkno, 999); } t2_putnumpasses(layer->numpasses); increment=int_max(0, int_floorlog2(layer->len)+1-(cblk->numlenbits+int_floorlog2(layer->numpasses))); t2_putcommacode(increment); cblk->numlenbits+=increment; bio_write(layer->len, cblk->numlenbits+int_floorlog2(layer->numpasses)); } } bio_flush(); c+=bio_numbytes(); for (bandno=0; bandno<res->numbands; bandno++) { tcd_band_t *band=&res->bands[bandno]; tcd_precinct_t *prc=&band->precincts[precno]; for (cblkno=0; cblkno<prc->cw*prc->ch; cblkno++) { tcd_cblk_t *cblk=&prc->cblks[cblkno]; tcd_layer_t *layer=&cblk->layers[layno]; if (!layer->numpasses) continue; if (c+layer->len>dest+len) { longjmp(j2k_error, 1); } memcpy(c, layer->data, layer->len); cblk->numpasses+=layer->numpasses; c+=layer->len; } } return c-dest; }