コード例 #1
0
ファイル: iso9660_fs.c プロジェクト: AaronDnz/xbmc
/*!
  Open an ISO 9660 image for reading. Maybe in the future we will have
  a mode. NULL is returned on error.
*/
iso9660_t *
iso9660_open_ext (const char *pathname,
		  iso_extension_mask_t iso_extension_mask)
{
  iso9660_t *p_iso = (iso9660_t *) _cdio_malloc(sizeof(struct _iso9660)) ;

  if (NULL == p_iso) return NULL;
  
  p_iso->stream = cdio_stdio_new( pathname );
  if (NULL == p_iso->stream) 
    goto error;
  
  if ( !iso9660_ifs_read_superblock(p_iso, iso_extension_mask) )
    goto error;
  
  /* Determine if image has XA attributes. */
  
  p_iso->b_xa = !strncmp ((char *) &(p_iso->pvd) + ISO_XA_MARKER_OFFSET, 
			  ISO_XA_MARKER_STRING, 
			  strlen (ISO_XA_MARKER_STRING));
  p_iso->iso_extension_mask = iso_extension_mask;
  return p_iso;

 error:
  free(p_iso);
  return NULL;
}
コード例 #2
0
ファイル: iso9660_fs.c プロジェクト: flyingtime/boxee
/*!
  Open an ISO 9660 image for reading in either fuzzy mode or not.
*/
static iso9660_t *
iso9660_open_ext_private (const char *psz_path,
			  iso_extension_mask_t iso_extension_mask,
			  uint16_t i_fuzz, bool b_fuzzy)
{
  iso9660_t *p_iso = (iso9660_t *) calloc(1, sizeof(iso9660_t)) ;
  bool b_have_superblock;

  if (!p_iso) return NULL;
  
  p_iso->stream = cdio_stdio_new( psz_path );
  if (NULL == p_iso->stream) 
    goto error;

  p_iso->i_framesize = ISO_BLOCKSIZE;

  b_have_superblock = (b_fuzzy) 
    ? iso9660_ifs_fuzzy_read_superblock(p_iso, iso_extension_mask, i_fuzz)
    : iso9660_ifs_read_superblock(p_iso, iso_extension_mask) ;

  if ( ! b_have_superblock ) goto error;
  
  /* Determine if image has XA attributes. */
  
  p_iso->b_xa = strncmp ((char *) &(p_iso->pvd) + ISO_XA_MARKER_OFFSET, 
			 ISO_XA_MARKER_STRING,
			 sizeof (ISO_XA_MARKER_STRING)) 
    ? nope : yep;
  
  p_iso->iso_extension_mask = iso_extension_mask;
  return p_iso;

 error:
  if (p_iso && p_iso->stream) {
    cdio_stdio_destroy(p_iso->stream);
    free(p_iso);
  }
  return NULL;
}