Add some trivial routines to get volumeid, volumeset id, application id

and system id. Moved over from vcdimager.

Thanks to Stephan (mephisto..@...) for the suggestion.
This commit is contained in:
rocky
2004-06-18 23:00:05 +00:00
parent bc484f1719
commit b2f2e45d8c
2 changed files with 168 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
/* /*
$Id: iso9660.h,v 1.40 2004/05/04 01:32:49 rocky Exp $ $Id: iso9660.h,v 1.41 2004/06/18 23:00:05 rocky Exp $
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -61,6 +61,24 @@
#define MAX_ISOPATHNAME 255 #define MAX_ISOPATHNAME 255
/*! \def Max # characters in an perparer id. */
#define ISO_MAX_PREPARER_ID 128
/*! \def Max # characters in an publisher id. */
#define ISO_MAX_PUBLISHER_ID 128
/*! \def Max # characters in an application id. */
#define ISO_MAX_APPLICATION_ID 128
/*! \def Max # characters in an system id. */
#define ISO_MAX_SYSTEM_ID 32
/*! \def Max # characters in an volume id. */
#define ISO_MAX_VOLUME_ID 32
/*! \def Max # characters in an volumeset id. */
#define ISO_MAX_VOLUMESET_ID 128
/* /*
* ISO 9660 directory flags. * ISO 9660 directory flags.
*/ */
@@ -152,8 +170,8 @@ struct iso9660_pvd {
char id[5]; char id[5];
uint8_t version; /**< 711 encoded */ uint8_t version; /**< 711 encoded */
char unused1[1]; char unused1[1];
char system_id[32]; /**< each char is an achar */ char system_id[ISO_MAX_SYSTEM_ID]; /**< each char is an achar */
char volume_id[32]; /**< each char is a dchar */ char volume_id[ISO_MAX_VOLUME_ID]; /**< each char is a dchar */
char unused2[8]; char unused2[8];
uint64_t volume_space_size; /**< 733 encoded */ uint64_t volume_space_size; /**< 733 encoded */
char escape_sequences[32]; char escape_sequences[32];
@@ -167,10 +185,10 @@ struct iso9660_pvd {
uint32_t opt_type_m_path_table; /**< 732 encoded */ uint32_t opt_type_m_path_table; /**< 732 encoded */
char root_directory_record[34]; /**< See section 9.1 of char root_directory_record[34]; /**< See section 9.1 of
ISO 9660 spec. */ ISO 9660 spec. */
char volume_set_id[128]; /**< dchars */ char volume_set_id[ISO_MAX_VOLUMESET_ID]; /**< dchars */
char publisher_id[128]; /**< achars */ char publisher_id[ISO_MAX_PUBLISHER_ID]; /**< achars */
char preparer_id[128]; /**< achars */ char preparer_id[ISO_MAX_PREPARER_ID]; /**< achars */
char application_id[128]; /**< achars */ char application_id[ISO_MAX_APPLICATION_ID]; /**< achars */
char copyright_file_id[37]; /**< See section 7.5 of char copyright_file_id[37]; /**< See section 7.5 of
ISO 9660 spec. Each char is ISO 9660 spec. Each char is
a dchar */ a dchar */
@@ -468,6 +486,13 @@ void * iso9660_fs_readdir (const CdIo *obj, const char pathname[], bool mode2);
*/ */
void * iso9660_ifs_readdir (iso9660_t *iso, const char pathname[]); void * iso9660_ifs_readdir (iso9660_t *iso, const char pathname[]);
/*!
Return the PVD's application ID.
NULL is returned if there is some problem in getting this.
*/
const char * iso9660_get_application_id(const iso9660_pvd_t *pvd);
uint8_t iso9660_get_dir_len(const iso9660_dir_t *idr); uint8_t iso9660_get_dir_len(const iso9660_dir_t *idr);
#if FIXME #if FIXME
@@ -483,6 +508,18 @@ lsn_t iso9660_get_dir_extent(const iso9660_dir_t *idr);
*/ */
char * iso9660_dir_to_name (const iso9660_dir_t *iso9660_dir); char * iso9660_dir_to_name (const iso9660_dir_t *iso9660_dir);
/*!
Return a string containing the preparer id with trailing
blanks removed.
*/
const char *iso9660_get_preparer_id(const iso9660_pvd_t *pvd);
/*!
Return a string containing the PVD's publisher id with trailing
blanks removed.
*/
const char *iso9660_get_publisher_id(const iso9660_pvd_t *pvd);
uint8_t iso9660_get_pvd_type(const iso9660_pvd_t *pvd); uint8_t iso9660_get_pvd_type(const iso9660_pvd_t *pvd);
const char * iso9660_get_pvd_id(const iso9660_pvd_t *pvd); const char * iso9660_get_pvd_id(const iso9660_pvd_t *pvd);
@@ -496,11 +533,29 @@ int iso9660_get_pvd_block_size(const iso9660_pvd_t *pvd) ;
*/ */
int iso9660_get_pvd_version(const iso9660_pvd_t *pvd) ; int iso9660_get_pvd_version(const iso9660_pvd_t *pvd) ;
/*!
Return a string containing the PVD's system id with trailing
blanks removed.
*/
const char *iso9660_get_system_id(const iso9660_pvd_t *pvd);
/*! Return the LSN of the root directory for pvd. /*! Return the LSN of the root directory for pvd.
If there is an error CDIO_INVALID_LSN is returned. If there is an error CDIO_INVALID_LSN is returned.
*/ */
lsn_t iso9660_get_root_lsn(const iso9660_pvd_t *pvd); lsn_t iso9660_get_root_lsn(const iso9660_pvd_t *pvd);
/*!
Return the PVD's volume ID.
*/
const char *iso9660_get_volume_id(const iso9660_pvd_t *pvd);
/*!
Return the PVD's volumeset ID.
NULL is returned if there is some problem in getting this.
*/
const char *iso9660_get_volumeset_id(const iso9660_pvd_t *pvd);
/* pathtable */ /* pathtable */
/*! Zero's out pathable. Do this first. */ /*! Zero's out pathable. Do this first. */

View File

@@ -1,5 +1,5 @@
/* /*
$Id: iso9660.c,v 1.15 2003/09/21 07:43:39 rocky Exp $ $Id: iso9660.c,v 1.16 2004/06/18 23:00:06 rocky Exp $
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
@@ -37,12 +37,38 @@
#include <stdio.h> #include <stdio.h>
#endif #endif
static const char _rcsid[] = "$Id: iso9660.c,v 1.15 2003/09/21 07:43:39 rocky Exp $"; static const char _rcsid[] = "$Id: iso9660.c,v 1.16 2004/06/18 23:00:06 rocky Exp $";
/* some parameters... */ /* some parameters... */
#define SYSTEM_ID "CD-RTOS CD-BRIDGE" #define SYSTEM_ID "CD-RTOS CD-BRIDGE"
#define VOLUME_SET_ID "" #define VOLUME_SET_ID ""
/*!
Change trailing blanks in str to nulls. Str has a maximum size of
n characters.
*/
static const char *
strip_trail (const char str[], size_t n)
{
static char buf[1024];
int j;
cdio_assert (n < 1024);
strncpy (buf, str, n);
buf[n] = '\0';
for (j = strlen (buf) - 1; j >= 0; j--)
{
if (buf[j] != ' ')
break;
buf[j] = '\0';
}
return buf;
}
static void static void
pathtable_get_size_and_entries(const void *pt, unsigned int *size, pathtable_get_size_and_entries(const void *pt, unsigned int *size,
unsigned int *entries); unsigned int *entries);
@@ -797,6 +823,17 @@ iso9660_pathname_isofy (const char pathname[], uint16_t version)
return strdup (tmpbuf); return strdup (tmpbuf);
} }
/*!
Return the PVD's application ID.
NULL is returned if there is some problem in getting this.
*/
const char *
iso9660_get_application_id(const iso9660_pvd_t *pvd)
{
if (NULL==pvd) return NULL;
return(strip_trail(pvd->application_id, ISO_MAX_APPLICATION_ID));
}
#if FIXME #if FIXME
lsn_t lsn_t
iso9660_get_dir_extent(const iso9660_dir_t *idr) iso9660_get_dir_extent(const iso9660_dir_t *idr)
@@ -875,6 +912,60 @@ iso9660_get_root_lsn(const iso9660_pvd_t *pvd)
} }
} }
/*!
Return a string containing the preparer id with trailing
blanks removed.
*/
const char *
iso9660_get_preparer_id(const iso9660_pvd_t *pvd)
{
if (NULL==pvd) return NULL;
return(strip_trail(pvd->preparer_id, ISO_MAX_PREPARER_ID));
}
/*!
Return a string containing the publisher id with trailing
blanks removed.
*/
const char *
iso9660_get_publisher_id(const iso9660_pvd_t *pvd)
{
if (NULL==pvd) return NULL;
return(strip_trail(pvd->publisher_id, ISO_MAX_PUBLISHER_ID));
}
/*!
Return a string containing the PVD's system id with trailing
blanks removed.
*/
const char *
iso9660_get_system_id(const iso9660_pvd_t *pvd)
{
if (NULL==pvd) return NULL;
return(strip_trail(pvd->system_id, ISO_MAX_SYSTEM_ID));
}
/*!
Return the PVD's volume ID.
*/
const char *
iso9660_get_volume_id(const iso9660_pvd_t *pvd)
{
if (NULL == pvd) return NULL;
return(strip_trail(pvd->volume_id, ISO_MAX_VOLUME_ID));
}
/*!
Return the PVD's volumeset ID.
NULL is returned if there is some problem in getting this.
*/
const char *
iso9660_get_volumeset_id(const iso9660_pvd_t *pvd)
{
if ( NULL == pvd ) return NULL;
return strip_trail(pvd->volume_set_id, ISO_MAX_VOLUMESET_ID);
}
/* /*
* Local variables: * Local variables: