1.1 --- a/src/gdrom/nrg.c Tue May 02 14:09:11 2006 +0000
1.2 +++ b/src/gdrom/nrg.c Fri Dec 15 10:18:39 2006 +0000
1.5 - * $Id: nrg.c,v 1.2 2006-05-02 14:09:11 nkeynes Exp $
1.6 + * $Id: nrg.c,v 1.3 2006-06-26 10:30:42 nkeynes Exp $
1.8 * Nero (NRG) CD file format. File information stolen shamelessly from
1.11 #include "gdrom/gdrom.h"
1.14 +static gboolean nrg_image_is_valid( FILE *f );
1.15 +static gdrom_disc_t nrg_image_open( const gchar *filename, FILE *f );
1.17 +struct gdrom_image_class nrg_image_class = { "Nero", "nrg",
1.18 + nrg_image_is_valid, nrg_image_open };
1.20 #define NERO_V55_ID 0x4e455235
1.21 #define NERO_V50_ID 0x4e45524f
1.23 @@ -131,9 +137,21 @@
1.27 -gdrom_disc_t nrg_image_open( const gchar *filename )
1.28 +static gboolean nrg_image_is_valid( FILE *f )
1.30 - FILE *f = fopen( filename, "ro" );
1.31 + union nrg_footer footer;
1.33 + fseek( f, -12, SEEK_END );
1.34 + fread( &footer, sizeof(footer), 1, f );
1.35 + if( ntohl(footer.v50.id) == NERO_V50_ID ) {
1.42 +static gdrom_disc_t nrg_image_open( const gchar *filename, FILE *f )
1.44 union nrg_footer footer;
1.45 struct nrg_chunk chunk;
1.46 struct nrg_daoi *dao;
1.47 @@ -145,11 +163,6 @@
1.48 int cue_track_id = 0, cue_track_count = 0;
1.52 - ERROR( "Unable to open file '%s': %s", filename, strerror(errno) );
1.56 fseek( f, -12, SEEK_END );
1.57 fread( &footer, sizeof(footer), 1, f );
1.58 if( ntohl(footer.v50.id) == NERO_V50_ID ) {
1.59 @@ -159,14 +172,13 @@
1.60 INFO( "Loading Nero 5.5+ image" );
1.61 fseek( f, ntohl(footer.v55.offset), SEEK_SET );
1.63 - ERROR("Unable to understand file '%s' as a Nero image", filename );
1.64 + /* Not a (recognized) Nero image */
1.68 disc = gdrom_image_new(f);
1.69 if( disc == NULL ) {
1.70 ERROR("Unable to allocate memory!");