#ifndef UDF_H
#define UDF_H
#include <cdio/cdio.h>
#include <cdio/ecma_167.h>
#include <cdio/posix.h>
typedef uint16_t partition_num_t;
typedef struct udf_s udf_t;
typedef struct udf_file_s udf_file_t;
typedef struct udf_dirent_s {
char *psz_name;
bool b_dir;
bool b_parent;
udf_t *p_udf;
uint32_t i_part_start;
uint32_t i_loc, i_loc_end;
uint64_t dir_left;
uint8_t *sector;
udf_fileid_desc_t *fid;
udf_file_entry_t fe;
} udf_dirent_t;
typedef enum {
UDF_BLOCKSIZE = 2048
} udf_enum1_t;
extern udf_enum1_t debug_udf_enum1;
#ifdef __cplusplus
extern "C" {
#endif
bool udf_close (udf_t *p_udf);
driver_return_code_t udf_read_sectors (const udf_t *p_udf, void *ptr,
lsn_t i_start, long int i_blocks);
udf_t *udf_open (const char *psz_path);
int16_t udf_get_part_number(const udf_t *p_udf);
udf_dirent_t *udf_get_root (udf_t *p_udf, bool b_any_partition,
partition_num_t i_partition);
int udf_get_volume_id(udf_t *p_udf, char *psz_volid,
unsigned int i_volid);
int udf_get_volumeset_id(udf_t *p_udf, uint8_t *volsetid,
unsigned int i_volsetid);
int udf_get_logical_volume_id(udf_t *p_udf, char *psz_logvolid,
unsigned int i_logvolid);
udf_dirent_t *udf_fopen(udf_dirent_t *p_udf_root, const char *psz_name);
char *udf_mode_string (mode_t i_mode, char *psz_str);
bool udf_get_lba(const udf_file_entry_t *p_udf_fe,
uint32_t *start, uint32_t *end);
bool udf_setpos(udf_dirent_t* p_udf_dirent, off_t offset);
#ifdef __cplusplus
}
#endif
#include <cdio/udf_time.h>
#include <cdio/udf_file.h>
#endif