Blame lib/driver/_cdio_stream.h

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2003, 2004, 2005, 2006, 2008, 2012
Packit dd8086
  Rocky Bernstein <rocky@gnu.org>
Packit dd8086
  Copyright (C) 2000 Herbert Valerio Riedel <hvr@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
Packit dd8086
#ifndef CDIO_STREAM_H_
Packit dd8086
#define CDIO_STREAM_H_
Packit dd8086
Packit dd8086
#include <cdio/types.h>
Packit dd8086
#include "cdio_private.h"
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
extern "C" {
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
  /* typedef'ed IO functions prototypes */
Packit dd8086
  
Packit dd8086
  typedef int(*cdio_data_open_t)(void *user_data);
Packit dd8086
  
Packit dd8086
  typedef ssize_t(*cdio_data_read_t)(void *user_data, void *buf, size_t count);
Packit dd8086
  
Packit dd8086
  typedef int(*cdio_data_seek_t)(void *user_data, off_t offset,
Packit dd8086
                                                  int whence);
Packit dd8086
  
Packit dd8086
  typedef off_t(*cdio_data_stat_t)(void *user_data);
Packit dd8086
  
Packit dd8086
  typedef int(*cdio_data_close_t)(void *user_data);
Packit dd8086
  
Packit dd8086
  typedef void(*cdio_data_free_t)(void *user_data);
Packit dd8086
  
Packit dd8086
  
Packit dd8086
  /* abstract data source */
Packit dd8086
  
Packit dd8086
  typedef struct {
Packit dd8086
    cdio_data_open_t open;
Packit dd8086
    cdio_data_seek_t seek; 
Packit dd8086
    cdio_data_stat_t stat; 
Packit dd8086
    cdio_data_read_t read;
Packit dd8086
    cdio_data_close_t close;
Packit dd8086
    cdio_data_free_t free;
Packit dd8086
  } cdio_stream_io_functions;
Packit dd8086
  
Packit dd8086
  /**
Packit dd8086
     Like 3 fgetpos.
Packit dd8086
     
Packit dd8086
     This function gets the current file position indicator for the stream
Packit dd8086
     pointed to by stream.  
Packit dd8086
     
Packit dd8086
     @return unpon successful completion, return value is positive, else,
Packit dd8086
     the global variable errno is set to indicate the error.
Packit dd8086
  */
Packit dd8086
  off_t cdio_stream_getpos(CdioDataSource_t* p_obj, 
Packit dd8086
                             /*out*/ off_t *i_offset);
Packit dd8086
  
Packit dd8086
  CdioDataSource_t *
Packit dd8086
  cdio_stream_new(void *user_data, const cdio_stream_io_functions *funcs);
Packit dd8086
Packit dd8086
  /**
Packit dd8086
     Like fread(3) and in fact may be the same.
Packit dd8086
Packit dd8086
     DESCRIPTION:
Packit dd8086
     The function fread reads nmemb elements of data, each size bytes long,
Packit dd8086
     from the stream pointed to by stream, storing them at the location
Packit dd8086
     given by ptr.
Packit dd8086
Packit dd8086
     RETURN VALUE:
Packit dd8086
     return the number of items successfully read or written (i.e.,
Packit dd8086
     not the number of characters).  If an error occurs, or the
Packit dd8086
     end-of-file is reached, the return value is a short item count
Packit dd8086
     (or zero).
Packit dd8086
Packit dd8086
     We do not distinguish between end-of-file and error, and callers
Packit dd8086
     must use feof(3) and ferror(3) to determine which occurred.
Packit dd8086
  */
Packit dd8086
  ssize_t cdio_stream_read(CdioDataSource_t* p_obj, void *ptr, size_t i_size, 
Packit dd8086
                           size_t nmemb);
Packit dd8086
  
Packit dd8086
  /** 
Packit dd8086
    Like fseek(3)/fseeko(3) and in fact may be the same.
Packit dd8086
Packit dd8086
    This  function sets the file position indicator for the stream
Packit dd8086
    pointed to by stream.  The new position, measured in bytes, is obtained
Packit dd8086
    by  adding offset bytes to the position specified by whence.  If whence
Packit dd8086
    is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset  is  relative  to
Packit dd8086
    the  start of the file, the current position indicator, or end-of-file,
Packit dd8086
    respectively.  A successful call to the fseek function clears the end-
Packit dd8086
    of-file indicator for the stream and undoes any effects of the
Packit dd8086
    ungetc(3) function on the same stream.
Packit dd8086
    
Packit dd8086
    @return upon successful completion, DRIVER_OP_SUCCESS, else,
Packit dd8086
    DRIVER_OP_ERROR is returned and the global variable errno is set to
Packit dd8086
    indicate the error.
Packit dd8086
   */
Packit dd8086
  int cdio_stream_seek(CdioDataSource_t *p_obj, off_t i_offset, 
Packit dd8086
                           int whence);
Packit dd8086
  
Packit dd8086
  /**
Packit dd8086
    Return whatever size of stream reports, I guess unit size is bytes. 
Packit dd8086
    On error return -1;
Packit dd8086
  */
Packit dd8086
  off_t cdio_stream_stat(CdioDataSource_t *p_obj);
Packit dd8086
  
Packit dd8086
  /**
Packit dd8086
    Deallocate resources associated with p_obj. After this p_obj is unusable.
Packit dd8086
  */
Packit dd8086
  void cdio_stream_destroy(CdioDataSource_t *p_obj);
Packit dd8086
  
Packit dd8086
  void cdio_stream_close(CdioDataSource_t *p_obj);
Packit dd8086
  
Packit dd8086
#ifdef __cplusplus
Packit dd8086
}
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
#endif /* CDIO_STREAM_H_ */
Packit dd8086
Packit dd8086

Packit dd8086
/* 
Packit dd8086
 * Local variables:
Packit dd8086
 *  c-file-style: "gnu"
Packit dd8086
 *  tab-width: 8
Packit dd8086
 *  indent-tabs-mode: nil
Packit dd8086
 * End:
Packit dd8086
 */