Ejemplo n.º 1
0
int
main(int argc, const char *argv[])
{
  CdIo_t *cdObj;
  track_t i_track;
  lsn_t lsn;

  cdio_log_set_handler (log_handler);

  if (cdio_have_driver(DRIVER_BINCUE)) {
      cdObj = cdio_open(DATA_DIR "/cdda.cue", DRIVER_UNKNOWN);
  } else if (cdio_have_driver(DRIVER_CDRDAO)) {
      cdObj = cdio_open(DATA_DIR "/cdda.toc", DRIVER_UNKNOWN);
  } else {
    printf("-- You don't have enough drivers for this test\n");
    return 77;
  }

  i_track = cdio_get_track(cdObj, 1000);
  if (i_track != CDIO_INVALID_TRACK) {
      printf("LSN 1000 is too large should have gotten CDIO_INVALID_TRACK back\n");
      return 1;
  }

  for(lsn=0; lsn<10; lsn++) {
      i_track = cdio_get_track(cdObj, lsn);
      if (i_track != 1) {
	  printf("LSN %d should return 1. Got %d\n", lsn, i_track);
	  return 3;
      }
  }

  i_track = cdio_get_track(cdObj, 302);
  if (i_track != CDIO_CDROM_LEADOUT_TRACK) {
      printf("LSN %d should return leadout. Got %d\n", 302, i_track);
      return 4;
  }

  for(lsn=301; lsn > 300; lsn--) {
      i_track = cdio_get_track(cdObj, lsn);
      if (i_track != 1) {
	  printf("LSN %d should return 1. Got %d\n", lsn, i_track);
	  return 4;
      }
  }

  cdio_destroy(cdObj);

  return 0;
}
Ejemplo n.º 2
0
/*!
  Read a data sector
  
  @param p_cdio object to read from

  @param p_buf place to read data into.  The caller should make sure
  this location can store at least ISO_BLOCKSIZE, M2RAW_SECTOR_SIZE,
  or M2F2_SECTOR_SIZE depending on the kind of sector getting read. If
  you don't know whether you have a Mode 1/2, Form 1/ Form 2/Formless
  sector best to reserve space for the maximum, M2RAW_SECTOR_SIZE.

  @param i_lsn sector to read

  @param i_blocksize size of block. Should be either ISO_BLOCKSIZE
  M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under
  p_buf.
  */
driver_return_code_t 
read_data_sectors_image ( void *p_user_data, void *p_buf, 
			  lsn_t i_lsn,  uint16_t i_blocksize,
			  uint32_t i_blocks )
{
  const _img_private_t *p_env = p_user_data;

  if (!p_env || !p_env->gen.cdio) return DRIVER_OP_UNINIT;
  
  {
    CdIo_t *p_cdio                = p_env->gen.cdio;
    track_t i_track               = cdio_get_track(p_cdio, i_lsn);
    track_format_t e_track_format = cdio_get_track_format(p_cdio, i_track);

    switch(e_track_format) {
    case TRACK_FORMAT_PSX:
    case TRACK_FORMAT_AUDIO:
    case TRACK_FORMAT_ERROR:
      return DRIVER_OP_ERROR;
    case TRACK_FORMAT_DATA:
      return cdio_read_mode1_sectors (p_cdio, p_buf, i_lsn, false, i_blocks);
    case TRACK_FORMAT_CDI:
    case TRACK_FORMAT_XA:
      return cdio_read_mode2_sectors (p_cdio, p_buf, i_lsn, false, i_blocks);
    }
  }
  return DRIVER_OP_ERROR;
}