Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
}