Blame include/cdio++/read.hpp

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
    This program is free software: you can redistribute it and/or modify
Packit dd8086
    it under the terms of the GNU General Public License as published by
Packit dd8086
    the Free Software Foundation, either version 3 of the License, or
Packit dd8086
    (at your option) any later version.
Packit dd8086
Packit dd8086
    This program is distributed in the hope that it will be useful,
Packit dd8086
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
    GNU General Public License for more details.
Packit dd8086
Packit dd8086
    You should have received a copy of the GNU General Public License
Packit dd8086
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/** \file read.hpp
Packit dd8086
 *
Packit dd8086
 *  \brief methods relating to reading blocks of Compact Discs. This file
Packit dd8086
 *  should not be #included directly.
Packit dd8086
 */
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Reposition read offset
Packit dd8086
  Similar to (if not the same as) libc's lseek()
Packit dd8086
  
Packit dd8086
  @param offset amount to seek
Packit dd8086
  @param whence  like corresponding parameter in libc's lseek, e.g. 
Packit dd8086
  SEEK_SET or SEEK_END.
Packit dd8086
  @return (off_t) -1 on error. 
Packit dd8086
*/
Packit dd8086
Packit dd8086
off_t lseek(off_t offset, int whence) 
Packit dd8086
{
Packit dd8086
  return cdio_lseek(p_cdio, offset, whence);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Reads into buf the next size bytes.
Packit dd8086
  Similar to (if not the same as) libc's read()
Packit dd8086
  
Packit dd8086
  @param p_buf place to read data into. The caller should make sure
Packit dd8086
  this location can store at least i_size bytes.
Packit dd8086
  @param i_size number of bytes to read
Packit dd8086
  
Packit dd8086
  @return (ssize_t) -1 on error. 
Packit dd8086
*/
Packit dd8086
ssize_t read(void *p_buf, size_t i_size) 
Packit dd8086
{
Packit dd8086
  return cdio_read(p_cdio, p_buf, i_size);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Reads a number of sectors (AKA blocks).
Packit dd8086
  
Packit dd8086
  @param p_buf place to read data into. The caller should make sure
Packit dd8086
  this location is large enough. See below for size information.
Packit dd8086
  @param read_mode the kind of "mode" to use in reading.
Packit dd8086
  @param i_lsn sector to read
Packit dd8086
  @param i_blocks number of sectors to read
Packit dd8086
Packit dd8086
  If read_mode is CDIO_MODE_AUDIO,
Packit dd8086
    *p_buf should hold at least CDIO_FRAMESIZE_RAW * i_blocks bytes.
Packit dd8086
Packit dd8086
  If read_mode is CDIO_MODE_DATA,
Packit dd8086
    *p_buf should hold at least i_blocks times either ISO_BLOCKSIZE, 
Packit dd8086
    M1RAW_SECTOR_SIZE or M2F2_SECTOR_SIZE depending on the kind of 
Packit dd8086
    sector getting read. If you don't know whether you have a Mode 1/2, 
Packit dd8086
    Form 1/ Form 2/Formless sector best to reserve space for the maximum
Packit dd8086
    which is M2RAW_SECTOR_SIZE.
Packit dd8086
Packit dd8086
  If read_mode is CDIO_MODE_M2F1,
Packit dd8086
    *p_buf should hold at least M2RAW_SECTOR_SIZE * i_blocks bytes.
Packit dd8086
Packit dd8086
  If read_mode is CDIO_MODE_M2F2,
Packit dd8086
    *p_buf should hold at least CDIO_CD_FRAMESIZE * i_blocks bytes.
Packit dd8086
Packit dd8086
  A DriverOpException is raised on error.
Packit dd8086
*/
Packit dd8086
Packit dd8086
void readSectors(void *p_buf, lsn_t i_lsn, cdio_read_mode_t read_mode, 
Packit dd8086
		 uint32_t i_blocks=1)
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_read_sectors(p_cdio, p_buf, i_lsn, read_mode,
Packit dd8086
					       i_blocks);
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Reads a number of data sectors (AKA blocks).
Packit dd8086
  
Packit dd8086
  @param p_buf place to read data into. The caller should make sure
Packit dd8086
  this location is large enough. See below for size information.
Packit dd8086
Packit dd8086
  *p_buf should hold at least i_blocks times either ISO_BLOCKSIZE, 
Packit dd8086
  M1RAW_SECTOR_SIZE or M2F2_SECTOR_SIZE depending on the kind of 
Packit dd8086
  sector getting read. If you don't know whether you have a Mode 1/2, 
Packit dd8086
  Form 1/ Form 2/Formless sector best to reserve space for the maximum
Packit dd8086
  which is M2RAW_SECTOR_SIZE.
Packit dd8086
Packit dd8086
  @param i_lsn sector to read
Packit dd8086
Packit dd8086
  @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, 
Packit dd8086
  M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf.
Packit dd8086
Packit dd8086
  @param i_blocks number of sectors to read
Packit dd8086
Packit dd8086
  A DriverOpException is raised on error.
Packit dd8086
  
Packit dd8086
*/
Packit dd8086
Packit dd8086
void readDataBlocks(void *p_buf, lsn_t i_lsn, uint16_t i_blocksize, 
Packit dd8086
		    uint32_t i_blocks=1) 
Packit dd8086
{
Packit dd8086
  driver_return_code_t drc = cdio_read_data_sectors (p_cdio, p_buf, i_lsn, 
Packit dd8086
						     i_blocksize, i_blocks);
Packit dd8086
  possible_throw_device_exception(drc);
Packit dd8086
}