Add more C++ ISO 9660 methods and some classes (for C structs).

This commit is contained in:
rocky
2006-03-05 08:31:03 +00:00
parent 66d6e093aa
commit 129e141493
2 changed files with 155 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
/* -*- C++ -*-
$Id: iso9660.hpp,v 1.1 2006/03/05 06:52:15 rocky Exp $
$Id: iso9660.hpp,v 1.2 2006/03/05 08:31:03 rocky Exp $
Copyright (C) 2006 Rocky Bernstein <rocky@panix.com>
@@ -28,6 +28,7 @@
#define __ISO9660_HPP__
#include <cdio/iso9660.h>
#include <string.h>
/** ISO 9660 class.
*/
@@ -36,9 +37,32 @@ class ISO9660
public:
class PVD
{
PVD(iso9660_pvd_t *p_new_pvd)
{
p_pvd = p_new_pvd;
};
private:
iso9660_pvd_t *p_pvd;
};
class Stat
{
public:
Stat(iso9660_stat_t *p_new_stat)
{
p_stat = p_new_stat;
};
private:
iso9660_stat_t * p_stat;
};
class IFS
{
public:
IFS()
{
p_iso9660=NULL;
@@ -65,6 +89,89 @@ public:
return true;
};
/*!
Given a directory pointer, find the filesystem entry that contains
lsn and return information about it.
Returns stat_t of entry if we found lsn, or NULL otherwise.
*/
Stat *find_lsn(lsn_t i_lsn)
{
iso9660_stat_t *p_stat = iso9660_find_ifs_lsn(p_iso9660, i_lsn);
if (!p_stat) return (Stat *) NULL;
return new Stat(p_stat);
};
/*!
Get the application ID. psz_app_id is set to NULL if there
is some problem in getting this and false is returned.
*/
bool get_application_id(/*out*/ char * &psz_app_id)
{
return iso9660_ifs_get_application_id(p_iso9660, &psz_app_id);
};
/*!
Return the Joliet level recognized.
*/
uint8_t get_joliet_level()
{
return iso9660_ifs_get_joliet_level(p_iso9660);
};
/*!
Get the preparer ID. psz_preparer_id is set to NULL if there
is some problem in getting this and false is returned.
*/
bool get_preparer_id(/*out*/ char * &psz_preparer_id)
{
return iso9660_ifs_get_preparer_id(p_iso9660, &psz_preparer_id);
};
/*!
Get the publisher ID. psz_publisher_id is set to NULL if there
is some problem in getting this and false is returned.
*/
bool get_publisher_id(/*out*/ char * &psz_publisher_id)
{
return iso9660_ifs_get_publisher_id(p_iso9660, &psz_publisher_id);
};
/*!
Get the system ID. psz_system_id is set to NULL if there
is some problem in getting this and false is returned.
*/
bool get_system_id(/*out*/ char * &psz_system_id)
{
return iso9660_ifs_get_system_id(p_iso9660, &psz_system_id);
};
/*! Return the volume ID in the PVD. psz_volume_id is set to
NULL if there is some problem in getting this and false is
returned.
*/
bool get_volume_id(/*out*/ char * &psz_volume_id)
{
return iso9660_ifs_get_volume_id(p_iso9660, &psz_volume_id);
};
/*! Return the volumeset ID in the PVD. psz_volumeset_id is set to
NULL if there is some problem in getting this and false is
returned.
*/
bool get_volumeset_id(/*out*/ char * &psz_volumeset_id)
{
return iso9660_ifs_get_volumeset_id(p_iso9660, &psz_volumeset_id);
};
/*!
Return true if ISO 9660 image has extended attrributes (XA).
*/
bool is_xa ()
{
return iso9660_ifs_is_xa (p_iso9660);
};
/*! Open an ISO 9660 image for reading. Maybe in the future we will
have a mode. NULL is returned on error. An open routine should be
called before using any read routine. If device object was
@@ -113,9 +220,28 @@ public:
and datastart and a possible additional offset. Generally here we are
not reading an ISO 9660 image but a CD-Image which contains an ISO 9660
filesystem.
@see read_superblock
*/
bool
fuzzy_read_superblock (iso_extension_mask_t iso_extension_mask=
read_superblock (iso_extension_mask_t iso_extension_mask=
ISO_EXTENSION_NONE,
uint16_t i_fuzz=20)
{
return iso9660_ifs_read_superblock (p_iso9660, iso_extension_mask);
};
/*!
Read the Super block of an ISO 9660 image but determine framesize
and datastart and a possible additional offset. Generally here we are
not reading an ISO 9660 image but a CD-Image which contains an ISO 9660
filesystem.
@see read_superblock
*/
bool
read_superblock_fuzzy (iso_extension_mask_t iso_extension_mask=
ISO_EXTENSION_NONE,
uint16_t i_fuzz=20)
{
@@ -132,10 +258,25 @@ public:
return iso9660_iso_seek_read (p_iso9660, ptr, start, i_size);
};
/*!
Return file status for pathname. NULL is returned on error.
*/
Stat *stat (const char psz_path[], bool b_translate=false)
{
iso9660_stat_t *p_stat;
if (b_translate)
p_stat = iso9660_ifs_stat_translate (p_iso9660, psz_path);
else
p_stat = iso9660_ifs_stat (p_iso9660, psz_path);
if (!p_stat) return (Stat *) NULL;
return new Stat(p_stat);
}
private:
iso9660_t *p_iso9660;
};
};