void test_mgr::initialize_jrnls() { _ji_list.clear(); for (unsigned i=0; i<_args.num_jrnls; i++) { std::ostringstream jid; jid << std::hex << std::setfill('0'); jid << "test_" << std::setw(4) << std::hex << i; std::ostringstream jdir; jdir << _args.journal_dir << "/" << jid.str(); jrnl_init_params::shared_ptr jpp(new jrnl_init_params(jid.str(), jdir.str(), jid.str())); jrnl_instance::shared_ptr jip(new jrnl_instance(jpp)); _ji_list.push_back(jip); } }
int jpeg_info(jpeginfo_t *ji, jpegreader_t *reader, void *handle, int flags, const uint8_t *buf, size_t len, char *errbuf, size_t errlen) { uint16_t marker; uint16_t mlen; void *loadbuf = NULL; int offset = 0; jiparser_t *jip; memset(ji, 0, sizeof(jpeginfo_t)); ji->ji_width = -1; ji->ji_height = -1; jpegpriv_t jp = {0}; jp.jp_readhandle = handle; jp.jp_reader = reader; if(len < 2 || buf[0] != 0xff || buf[1] != 0xd8) { snprintf(errbuf, errlen, "Invalid JPEG header"); return -1; } len -= 2; buf += 2; offset += 2; while(len >= 4) { marker = (buf[0] << 8) | buf[1]; mlen = (buf[2] << 8) | buf[3]; len -= 4; buf += 4; offset += 4; mlen -= 2; jip = NULL; switch(marker) { case 0xffda: // SOS free(loadbuf); free(jp.jp_readbuf); return 0; case 0xffc0: // SOF0 case 0xffc1: // SOF1 case 0xffc2: // SOF2 case 0xffc3: // SOF3 if(flags & JPEG_INFO_DIMENSIONS) jip = parse_sof; break; case 0xffe1: // APP1 if(flags & (JPEG_INFO_THUMBNAIL | JPEG_INFO_ORIENTATION | JPEG_INFO_METADATA)) jip = parse_app1; break; } if(jip) { int ll = mlen + 4; free(loadbuf); buf = loadbuf = malloc(ll); if(jpeg_read(&jp, loadbuf, offset, ll) != ll) { snprintf(errbuf, errlen, "Read error"); break; } if(jip(ji, loadbuf, ll - 4, flags)) { snprintf(errbuf, errlen, "Error while processing section 0x%04x", marker); break; } // Continue with bytes after section buf = loadbuf + mlen; len = 4; offset += mlen; } else { free(loadbuf); buf = loadbuf = malloc(4); offset += mlen; if(jpeg_read(&jp, loadbuf, offset, 4) != 4) { snprintf(errbuf, errlen, "Read error"); break; } len = 4; } } free(loadbuf); free(jp.jp_readbuf); return -1; }