Blame lib/driver/disc.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012, 2014
Packit dd8086
   Rocky Bernstein <rocky@gnu.org>
Packit dd8086
  Copyright (C) 2001 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
#ifdef HAVE_CONFIG_H
Packit dd8086
# include "config.h"
Packit dd8086
# define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDBOOL_H
Packit dd8086
# include <stdbool.h>
Packit dd8086
#endif 
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include "cdio_private.h"
Packit dd8086
Packit dd8086
/* Must match discmode enumeration */
Packit dd8086
const char *discmode2str[] = {
Packit dd8086
  "CD-DA", 
Packit dd8086
  "CD-DATA (Mode 1)", 
Packit dd8086
  "CD DATA (Mode 2)", 
Packit dd8086
  "CD-ROM Mixed",
Packit dd8086
  "DVD-ROM", 
Packit dd8086
  "DVD-RAM", 
Packit dd8086
  "DVD-R", 
Packit dd8086
  "DVD-RW", 
Packit dd8086
  "HD DVD ROM",
Packit dd8086
  "HD_DVD RAM", 
Packit dd8086
  "HD DVD-R", 
Packit dd8086
  "DVD+R",
Packit dd8086
  "DVD+RW", 
Packit dd8086
  "DVD+RW DL", 
Packit dd8086
  "DVD+R DL", 
Packit dd8086
  "Unknown/unclassified DVD", 
Packit dd8086
  "No information",
Packit dd8086
  "Error in getting information",
Packit dd8086
  "CD-i" 
Packit dd8086
};
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get cdtext information for a CdIo object .
Packit dd8086
  
Packit dd8086
  @param obj the CD object that may contain CD-TEXT information.
Packit dd8086
  @return the CD-TEXT object or NULL if obj is NULL
Packit dd8086
  or CD-TEXT information does not exist.
Packit dd8086
*/
Packit dd8086
cdtext_t *
Packit dd8086
cdio_get_cdtext (CdIo *obj)
Packit dd8086
{
Packit dd8086
  if (obj == NULL) return NULL;
Packit dd8086
  
Packit dd8086
  if (NULL != obj->op.get_cdtext) {
Packit dd8086
    return obj->op.get_cdtext (obj->env);
Packit dd8086
  } else {
Packit dd8086
    return NULL;
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get binary cdtext information for a CdIo object .
Packit dd8086
  
Packit dd8086
  @param obj the CD object that may contain CD-TEXT information.
Packit dd8086
  @return pointer to allocated memory area holding the raw CD-TEXT
Packit dd8086
  or NULL if obj is NULL or CD-TEXT does not exist. Return value
Packit dd8086
  must be freed with cdio_free() when done with it and not NULL.
Packit dd8086
*/
Packit dd8086
uint8_t *
Packit dd8086
cdio_get_cdtext_raw (CdIo *obj)
Packit dd8086
{
Packit dd8086
  if (obj == NULL) return NULL;
Packit dd8086
Packit dd8086
  if (NULL != obj->op.get_cdtext_raw) {
Packit dd8086
    return obj->op.get_cdtext_raw (obj->env);
Packit dd8086
  } else {
Packit dd8086
    return NULL;
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get the size of the CD in logical block address (LBA) units.
Packit dd8086
  
Packit dd8086
  @param p_cdio the CD object queried
Packit dd8086
  @return the lsn. On error 0 or CDIO_INVALD_LSN.
Packit dd8086
*/
Packit dd8086
lsn_t 
Packit dd8086
cdio_get_disc_last_lsn(const CdIo_t *p_cdio)
Packit dd8086
{
Packit dd8086
  if (!p_cdio) return CDIO_INVALID_LSN;
Packit dd8086
  return p_cdio->op.get_disc_last_lsn (p_cdio->env);
Packit dd8086
}
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get medium associated with cd_obj.
Packit dd8086
*/
Packit dd8086
discmode_t
Packit dd8086
cdio_get_discmode (CdIo_t *cd_obj)
Packit dd8086
{
Packit dd8086
  if (!cd_obj) return CDIO_DISC_MODE_ERROR;
Packit dd8086
  
Packit dd8086
  if (cd_obj->op.get_discmode) {
Packit dd8086
    return cd_obj->op.get_discmode (cd_obj->env);
Packit dd8086
  } else {
Packit dd8086
    return CDIO_DISC_MODE_NO_INFO;
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Return a string containing the name of the driver in use.
Packit dd8086
  if CdIo is NULL (we haven't initialized a specific device driver), 
Packit dd8086
  then return NULL.
Packit dd8086
*/
Packit dd8086
char *
Packit dd8086
cdio_get_mcn (const CdIo_t *p_cdio) 
Packit dd8086
{
Packit dd8086
  if (p_cdio && p_cdio->op.get_mcn) {
Packit dd8086
    return p_cdio->op.get_mcn (p_cdio->env);
Packit dd8086
  } else {
Packit dd8086
    return NULL;
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
bool
Packit dd8086
cdio_is_discmode_cdrom(discmode_t discmode) 
Packit dd8086
{
Packit dd8086
  switch (discmode) {
Packit dd8086
  case CDIO_DISC_MODE_CD_DA:
Packit dd8086
  case CDIO_DISC_MODE_CD_DATA:
Packit dd8086
  case CDIO_DISC_MODE_CD_XA:
Packit dd8086
  case CDIO_DISC_MODE_CD_MIXED:
Packit dd8086
  case CDIO_DISC_MODE_NO_INFO:
Packit dd8086
    return true;
Packit dd8086
  default:
Packit dd8086
    return false;
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
bool
Packit dd8086
cdio_is_discmode_dvd(discmode_t discmode) 
Packit dd8086
{
Packit dd8086
  switch (discmode) {
Packit dd8086
    case CDIO_DISC_MODE_DVD_ROM:
Packit dd8086
    case CDIO_DISC_MODE_DVD_RAM:
Packit dd8086
    case CDIO_DISC_MODE_DVD_R:
Packit dd8086
    case CDIO_DISC_MODE_DVD_RW:
Packit dd8086
    case CDIO_DISC_MODE_DVD_PR:
Packit dd8086
    case CDIO_DISC_MODE_DVD_PRW:
Packit dd8086
    case CDIO_DISC_MODE_DVD_OTHER:
Packit dd8086
      return true;
Packit dd8086
    default:
Packit dd8086
      return false;
Packit dd8086
  }
Packit dd8086
}