mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[iso] update libcdio to v0.93
* Also fix a memory leak introduced vy v0.93 in cdio_free()
This commit is contained in:
parent
7090a0371a
commit
ea817cbc2c
29 changed files with 305 additions and 164 deletions
|
@ -1,5 +1,6 @@
|
||||||
/* -*- c -*-
|
/* -*- c -*-
|
||||||
Copyright (C) 2003, 2004, 2005, 2008, 2009 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2003, 2004, 2005, 2008, 2009, 2014
|
||||||
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -45,8 +46,6 @@ extern "C" {
|
||||||
/** This is an opaque structure for the CD object. */
|
/** This is an opaque structure for the CD object. */
|
||||||
typedef struct _CdIo CdIo_t;
|
typedef struct _CdIo CdIo_t;
|
||||||
|
|
||||||
typedef struct cdtext_s cdtext_t;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@ -70,4 +69,7 @@ extern "C" {
|
||||||
/* Track-related functions. */
|
/* Track-related functions. */
|
||||||
#include <cdio/track.h>
|
#include <cdio/track.h>
|
||||||
|
|
||||||
|
/* Memory management functions. */
|
||||||
|
#include <cdio/memory.h>
|
||||||
|
|
||||||
#endif /* __CDIO_H__ */
|
#endif /* __CDIO_H__ */
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
/* Empty placeholder */
|
/* Placeholder */
|
||||||
|
typedef struct cdtext_s cdtext_t;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* -*- c -*-
|
/* -*- c -*-
|
||||||
|
|
||||||
Copyright (C) 2004, 2005, 2006, 2008, 2010, 2012 Rocky Bernstein
|
Copyright (C) 2004, 2005, 2006, 2008, 2010, 2012, 2014
|
||||||
<rocky@gnu.org>
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -61,9 +61,9 @@ extern "C" {
|
||||||
Get binary CD-Text information for a CdIo_t object.
|
Get binary CD-Text information for a CdIo_t object.
|
||||||
|
|
||||||
@param p_cdio the CD object that may contain CD-Text information.
|
@param p_cdio the CD object that may contain CD-Text information.
|
||||||
@return malloc'd pointer to raw CD-Text data as stored on the disc
|
@return malloc'd pointer to raw CD-Text data as stored on the disc or
|
||||||
or NULL if p_cdio is NULL or CD-Text information does not exist.
|
NULL if p_cdio is NULL or CD-Text information does not exist. Return
|
||||||
Return value should be freed when done with it and not NULL.
|
value must be freed with cdio_free() when done with it and not NULL.
|
||||||
*/
|
*/
|
||||||
uint8_t * cdio_get_cdtext_raw (CdIo_t *p_cdio);
|
uint8_t * cdio_get_cdtext_raw (CdIo_t *p_cdio);
|
||||||
|
|
||||||
|
@ -101,8 +101,8 @@ extern "C" {
|
||||||
@return the media catalog number or NULL if there is none or we
|
@return the media catalog number or NULL if there is none or we
|
||||||
don't have the ability to get it.
|
don't have the ability to get it.
|
||||||
|
|
||||||
Note: string is malloc'd so caller has to free() the returned
|
Note: The caller must free the returned string with cdio_free()
|
||||||
string when done with it.
|
when done with it.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
char * cdio_get_mcn (const CdIo_t *p_cdio);
|
char * cdio_get_mcn (const CdIo_t *p_cdio);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2012
|
Copyright (C) 2003-2008, 2012-2013
|
||||||
Rocky Bernstein <rocky@gnu.org>
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
|
@ -859,7 +859,7 @@ iso9660_dir_calc_record_size (unsigned int namelen, unsigned int su_len);
|
||||||
lsn and return information about it.
|
lsn and return information about it.
|
||||||
|
|
||||||
@return stat_t of entry if we found lsn, or NULL otherwise.
|
@return stat_t of entry if we found lsn, or NULL otherwise.
|
||||||
Caller must free return value.
|
Caller must free return value using iso9660_stat_free().
|
||||||
*/
|
*/
|
||||||
#define iso9660_fs_find_lsn iso9660_find_fs_lsn
|
#define iso9660_fs_find_lsn iso9660_find_fs_lsn
|
||||||
iso9660_stat_t *iso9660_fs_find_lsn(CdIo_t *p_cdio, lsn_t i_lsn);
|
iso9660_stat_t *iso9660_fs_find_lsn(CdIo_t *p_cdio, lsn_t i_lsn);
|
||||||
|
@ -870,7 +870,7 @@ iso9660_stat_t *iso9660_fs_find_lsn(CdIo_t *p_cdio, lsn_t i_lsn);
|
||||||
lsn and return information about it.
|
lsn and return information about it.
|
||||||
|
|
||||||
@return stat_t of entry if we found lsn, or NULL otherwise.
|
@return stat_t of entry if we found lsn, or NULL otherwise.
|
||||||
Caller must free return value.
|
Caller must free return value using iso9660_stat_free().
|
||||||
*/
|
*/
|
||||||
iso9660_stat_t *iso9660_fs_find_lsn_with_path(CdIo_t *p_cdio, lsn_t i_lsn,
|
iso9660_stat_t *iso9660_fs_find_lsn_with_path(CdIo_t *p_cdio, lsn_t i_lsn,
|
||||||
/*out*/ char **ppsz_path);
|
/*out*/ char **ppsz_path);
|
||||||
|
@ -880,7 +880,7 @@ iso9660_stat_t *iso9660_fs_find_lsn_with_path(CdIo_t *p_cdio, lsn_t i_lsn,
|
||||||
lsn and return information about it.
|
lsn and return information about it.
|
||||||
|
|
||||||
@return stat_t of entry if we found lsn, or NULL otherwise.
|
@return stat_t of entry if we found lsn, or NULL otherwise.
|
||||||
Caller must free return value.
|
Caller must free return value using iso9660_stat_free().
|
||||||
*/
|
*/
|
||||||
iso9660_stat_t *iso9660_ifs_find_lsn(iso9660_t *p_iso, lsn_t i_lsn);
|
iso9660_stat_t *iso9660_ifs_find_lsn(iso9660_t *p_iso, lsn_t i_lsn);
|
||||||
|
|
||||||
|
@ -897,12 +897,16 @@ iso9660_stat_t *iso9660_ifs_find_lsn(iso9660_t *p_iso, lsn_t i_lsn);
|
||||||
*ppsz_path when you are done using it.
|
*ppsz_path when you are done using it.
|
||||||
|
|
||||||
@return stat_t of entry if we found lsn, or NULL otherwise.
|
@return stat_t of entry if we found lsn, or NULL otherwise.
|
||||||
Caller must free return value.
|
Caller must free return value using iso9660_stat_free().
|
||||||
*/
|
*/
|
||||||
iso9660_stat_t *iso9660_ifs_find_lsn_with_path(iso9660_t *p_iso,
|
iso9660_stat_t *iso9660_ifs_find_lsn_with_path(iso9660_t *p_iso,
|
||||||
lsn_t i_lsn,
|
lsn_t i_lsn,
|
||||||
/*out*/ char **ppsz_path);
|
/*out*/ char **ppsz_path);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Free the passed iso9660_stat_t structure.
|
||||||
|
*/
|
||||||
|
void iso9660_stat_free(iso9660_stat_t *p_stat);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return file status for psz_path. NULL is returned on error.
|
Return file status for psz_path. NULL is returned on error.
|
||||||
|
@ -951,7 +955,7 @@ iso9660_stat_t *iso9660_ifs_stat_translate (iso9660_t *p_iso,
|
||||||
|
|
||||||
/*! Read psz_path (a directory) and return a list of iso9660_stat_t
|
/*! Read psz_path (a directory) and return a list of iso9660_stat_t
|
||||||
pointers for the files inside that directory. The caller must free the
|
pointers for the files inside that directory. The caller must free the
|
||||||
returned result.
|
returned result using _cdio_list_free().
|
||||||
|
|
||||||
b_mode2 is historical. It is not used.
|
b_mode2 is historical. It is not used.
|
||||||
*/
|
*/
|
||||||
|
@ -960,7 +964,7 @@ CdioList_t * iso9660_fs_readdir (CdIo_t *p_cdio, const char psz_path[],
|
||||||
|
|
||||||
/*! Read psz_path (a directory) and return a list of iso9660_stat_t
|
/*! Read psz_path (a directory) and return a list of iso9660_stat_t
|
||||||
pointers for the files inside that directory. The caller must free
|
pointers for the files inside that directory. The caller must free
|
||||||
the returned result.
|
the returned result using _cdio_list_free().
|
||||||
*/
|
*/
|
||||||
CdioList_t * iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[]);
|
CdioList_t * iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[]);
|
||||||
|
|
||||||
|
|
|
@ -97,11 +97,7 @@ cdio_log_handler_t cdio_log_set_handler (cdio_log_handler_t new_handler);
|
||||||
*/
|
*/
|
||||||
void cdio_log (cdio_log_level_t level,
|
void cdio_log (cdio_log_level_t level,
|
||||||
const char format[], ...) GNUC_PRINTF(2, 3);
|
const char format[], ...) GNUC_PRINTF(2, 3);
|
||||||
#if defined(__GNUC__)
|
|
||||||
/* See http://clang-analyzer.llvm.org/annotations.html#custom_assertions */
|
|
||||||
void cdio_assert_log (const char format[], ...)
|
|
||||||
GNUC_PRINTF(1, 2) __attribute__((__noreturn__));
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* Handle a debugging message.
|
* Handle a debugging message.
|
||||||
*
|
*
|
||||||
|
|
41
src/libcdio/cdio/memory.h
Normal file
41
src/libcdio/cdio/memory.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file memory.h
|
||||||
|
*
|
||||||
|
* \brief memory management utility functions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CDIO_MEMORY_H_
|
||||||
|
#define CDIO_MEMORY_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Free the passed pointer.
|
||||||
|
*/
|
||||||
|
void cdio_free(void *p_memory);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* CDIO_MEMORY_H_ */
|
|
@ -211,8 +211,8 @@ extern "C" {
|
||||||
@return the International Standard Recording Code (ISRC) or NULL
|
@return the International Standard Recording Code (ISRC) or NULL
|
||||||
if there is none or we don't have the ability to get it.
|
if there is none or we don't have the ability to get it.
|
||||||
|
|
||||||
Note: string is malloc'd so caller has to free() the returned
|
Note: The caller must free the returned string with cdio_free()
|
||||||
string when done with it.
|
when done with it.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track);
|
char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2008, 2012 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2008, 2012, 2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2006 Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
Copyright (C) 2006 Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -52,7 +52,7 @@ void cdio_charset_converter_destroy(cdio_charset_coverter_t*cnv);
|
||||||
* \param dst_len If non NULL, returns the length of the destination string
|
* \param dst_len If non NULL, returns the length of the destination string
|
||||||
* \returns true if conversion was sucessful, false else.
|
* \returns true if conversion was sucessful, false else.
|
||||||
*
|
*
|
||||||
* The destination string must be freed by the caller with free().
|
* The destination string must be freed by the caller with cdio_free().
|
||||||
* If you pass -1 for src_len, strlen() will be used.
|
* If you pass -1 for src_len, strlen() will be used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -69,6 +69,8 @@ bool cdio_charset_convert(cdio_charset_coverter_t*cnv,
|
||||||
*
|
*
|
||||||
* This is a convenience function, which creates a charset converter,
|
* This is a convenience function, which creates a charset converter,
|
||||||
* converts one string and destroys the charset converter.
|
* converts one string and destroys the charset converter.
|
||||||
|
*
|
||||||
|
* The destination string must be freed by the caller with cdio_free().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,8 +85,10 @@ bool cdio_charset_from_utf8(cdio_utf8_t * src, char ** dst,
|
||||||
* \returns true if conversion was sucessful, false else.
|
* \returns true if conversion was sucessful, false else.
|
||||||
*
|
*
|
||||||
* This is a convenience function, which creates a charset converter,
|
* This is a convenience function, which creates a charset converter,
|
||||||
* converts one string and destroys the charset converter. If you pass -1
|
* converts one string and destroys the charset converter.
|
||||||
* for src_len, strlen() will be used.
|
*
|
||||||
|
* The destination string must be freed by the caller with cdio_free().
|
||||||
|
* If you pass -1 for src_len, strlen() will be used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,7 +99,7 @@ bool cdio_charset_to_utf8(const char *src, size_t src_len, cdio_utf8_t **dst,
|
||||||
/** \brief Convert an UTF8 string to UTF-16 (allocate returned string)
|
/** \brief Convert an UTF8 string to UTF-16 (allocate returned string)
|
||||||
* \param str Source string
|
* \param str Source string
|
||||||
* \returns NULL if the conversion was unsuccesful. Caller must free the
|
* \returns NULL if the conversion was unsuccesful. Caller must free the
|
||||||
* returned string.
|
* returned string with cdio_free().
|
||||||
* This is a convenience function available on Windows platforms only.
|
* This is a convenience function available on Windows platforms only.
|
||||||
*/
|
*/
|
||||||
wchar_t* cdio_utf8_to_wchar(const char* str);
|
wchar_t* cdio_utf8_to_wchar(const char* str);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2004, 2005, 2006, 2008, 2010, 2012
|
Copyright (C) 2004, 2005, 2006, 2008, 2010, 2012, 2014
|
||||||
Rocky Bernstein <rocky@gnu.org>
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
|
@ -101,7 +101,8 @@ _cdio_strdup_upper (const char str[]);
|
||||||
|
|
||||||
/* Duplicate path and make it platform compliant. Typically needed for
|
/* Duplicate path and make it platform compliant. Typically needed for
|
||||||
MinGW/MSYS where a "/c/..." path must be translated to "c:/..." for
|
MinGW/MSYS where a "/c/..." path must be translated to "c:/..." for
|
||||||
use with fopen(), etc. Returned string must be freed by the caller. */
|
use with fopen(), etc. Returned string must be freed by the caller
|
||||||
|
using cdio_free(). */
|
||||||
char *
|
char *
|
||||||
_cdio_strdup_fixpath (const char path[]);
|
_cdio_strdup_fixpath (const char path[]);
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
/*! CDIO_VERSION is a C-Preprocessor macro of a string that shows what
|
/*! CDIO_VERSION is a C-Preprocessor macro of a string that shows what
|
||||||
version is used. cdio_version_string has the same value, but it is a
|
version is used. cdio_version_string has the same value, but it is a
|
||||||
constant variable that can be accessed at run time. */
|
constant variable that can be accessed at run time. */
|
||||||
#define CDIO_VERSION "0.90 i686-pc-mingw32"
|
#define CDIO_VERSION "0.93 i686-pc-mingw32"
|
||||||
extern const char *cdio_version_string; /**< = CDIO_VERSION */
|
extern const char *cdio_version_string; /**< = CDIO_VERSION */
|
||||||
|
|
||||||
/*! LIBCDIO_VERSION_NUM is a C-Preprocessor macro that can be used for
|
/*! LIBCDIO_VERSION_NUM is a C-Preprocessor macro that can be used for
|
||||||
testing in the C preprocessor. libcdio_version_num has the same
|
testing in the C preprocessor. libcdio_version_num has the same
|
||||||
value, but it is a constant variable that can be accessed at run
|
value, but it is a constant variable that can be accessed at run
|
||||||
time. */
|
time. */
|
||||||
#define LIBCDIO_VERSION_NUM 90
|
#define LIBCDIO_VERSION_NUM 93
|
||||||
|
|
||||||
extern const unsigned int libcdio_version_num; /**< = LIBCDIO_VERSION_NUM */
|
extern const unsigned int libcdio_version_num; /**< = LIBCDIO_VERSION_NUM */
|
||||||
|
|
|
@ -146,7 +146,7 @@ iso9660_get_xa_attr_str (uint16_t xa_attr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Allocates and initalizes a new iso9600_xa_t variable and returns
|
Allocates and initalizes a new iso9600_xa_t variable and returns
|
||||||
it. The caller should free the returned result.
|
it. The caller must free the returned result using iso9660_xa_free().
|
||||||
|
|
||||||
@see iso9660_xa
|
@see iso9660_xa
|
||||||
*/
|
*/
|
||||||
|
@ -154,6 +154,14 @@ iso9660_xa_t *
|
||||||
iso9660_xa_init (iso9660_xa_t *_xa, uint16_t uid, uint16_t gid, uint16_t attr,
|
iso9660_xa_init (iso9660_xa_t *_xa, uint16_t uid, uint16_t gid, uint16_t attr,
|
||||||
uint8_t filenum);
|
uint8_t filenum);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Frees the passed iso9600_xa_t structure.
|
||||||
|
|
||||||
|
@see iso9660_xa
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
iso9660_xa_free (iso9660_xa_t *_xa);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
<ClCompile Include="..\disc.c" />
|
<ClCompile Include="..\disc.c" />
|
||||||
<ClCompile Include="..\ds.c" />
|
<ClCompile Include="..\ds.c" />
|
||||||
<ClCompile Include="..\logging.c" />
|
<ClCompile Include="..\logging.c" />
|
||||||
|
<ClCompile Include="..\memory.c" />
|
||||||
<ClCompile Include="..\read.c" />
|
<ClCompile Include="..\read.c" />
|
||||||
<ClCompile Include="..\sector.c" />
|
<ClCompile Include="..\sector.c" />
|
||||||
<ClCompile Include="..\track.c" />
|
<ClCompile Include="..\track.c" />
|
||||||
|
@ -34,6 +35,7 @@
|
||||||
<ClInclude Include="..\..\cdio\cdio.h" />
|
<ClInclude Include="..\..\cdio\cdio.h" />
|
||||||
<ClInclude Include="..\..\cdio\ds.h" />
|
<ClInclude Include="..\..\cdio\ds.h" />
|
||||||
<ClInclude Include="..\..\cdio\logging.h" />
|
<ClInclude Include="..\..\cdio\logging.h" />
|
||||||
|
<ClInclude Include="..\..\cdio\memory.h" />
|
||||||
<ClInclude Include="..\..\cdio\sector.h" />
|
<ClInclude Include="..\..\cdio\sector.h" />
|
||||||
<ClInclude Include="..\..\cdio\types.h" />
|
<ClInclude Include="..\..\cdio\types.h" />
|
||||||
<ClInclude Include="..\..\cdio\util.h" />
|
<ClInclude Include="..\..\cdio\util.h" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Source Files">
|
<Filter Include="Source Files">
|
||||||
|
@ -41,6 +41,9 @@
|
||||||
<ClCompile Include="..\utf8.c">
|
<ClCompile Include="..\utf8.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\memory.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\_cdio_stdio.h">
|
<ClInclude Include="..\_cdio_stdio.h">
|
||||||
|
@ -85,5 +88,8 @@
|
||||||
<ClInclude Include="..\..\cdio\version.h">
|
<ClInclude Include="..\..\cdio\version.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\cdio\memory.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -73,7 +73,7 @@ static inline int _stati64_utf8(const char *path, struct _stati64 *buffer) {
|
||||||
int ret;
|
int ret;
|
||||||
wchar_t* wpath = cdio_utf8_to_wchar(path);
|
wchar_t* wpath = cdio_utf8_to_wchar(path);
|
||||||
ret = _wstati64(wpath, buffer);
|
ret = _wstati64(wpath, buffer);
|
||||||
free(wpath);
|
cdio_free(wpath);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#define CDIO_STAT_CALL _stati64_utf8
|
#define CDIO_STAT_CALL _stati64_utf8
|
||||||
|
@ -262,7 +262,7 @@ cdio_stdio_new(const char pathname[])
|
||||||
{
|
{
|
||||||
cdio_warn ("could not retrieve file info for `%s': %s",
|
cdio_warn ("could not retrieve file info for `%s': %s",
|
||||||
pathdup, strerror (errno));
|
pathdup, strerror (errno));
|
||||||
free(pathdup);
|
cdio_free(pathdup);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,19 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
extern const char * cdio_dirname(const char *fname);
|
/*!
|
||||||
extern const char *cdio_abspath(const char *cwd, const char *fname);
|
Get directory name from file name.
|
||||||
|
|
||||||
|
Callers must free return value after use.
|
||||||
|
*/
|
||||||
|
extern char *cdio_dirname(const char *fname);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Construct an absolute file name from path and file name.
|
||||||
|
|
||||||
|
Callers must free return value after use.
|
||||||
|
*/
|
||||||
|
extern char *cdio_abspath(const char *cwd, const char *fname);
|
||||||
|
|
||||||
/* Opaque type */
|
/* Opaque type */
|
||||||
typedef struct _CdioDataSource CdioDataSource_t;
|
typedef struct _CdioDataSource CdioDataSource_t;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012
|
Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012, 2014
|
||||||
Rocky Bernstein <rocky@gnu.org>
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
|
@ -77,8 +77,8 @@ cdio_get_cdtext (CdIo *obj)
|
||||||
|
|
||||||
@param obj the CD object that may contain CD-TEXT information.
|
@param obj the CD object that may contain CD-TEXT information.
|
||||||
@return pointer to allocated memory area holding the raw CD-TEXT
|
@return pointer to allocated memory area holding the raw CD-TEXT
|
||||||
or NULL if obj is NULL or CD-TEXT does not exist.
|
or NULL if obj is NULL or CD-TEXT does not exist. Return value
|
||||||
free() when done.
|
must be freed with cdio_free() when done with it and not NULL.
|
||||||
*/
|
*/
|
||||||
uint8_t *
|
uint8_t *
|
||||||
cdio_get_cdtext_raw (CdIo *obj)
|
cdio_get_cdtext_raw (CdIo *obj)
|
||||||
|
|
42
src/libcdio/driver/memory.c
Normal file
42
src/libcdio/driver/memory.c
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
# define __CDIO_CONFIG_H__ 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cdio/memory.h>
|
||||||
|
#include <cdio/types.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Free the passed pointer.
|
||||||
|
|
||||||
|
@param p_memory a pointer to memory allocated by a libcdio funtion.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
cdio_free (void *p_memory)
|
||||||
|
{
|
||||||
|
if (p_memory == NULL) return;
|
||||||
|
|
||||||
|
free(p_memory);
|
||||||
|
}
|
|
@ -1,20 +1,19 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2004, 2005, 2011, 2012 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2004, 2005, 2011, 2012, 2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
|
@ -81,9 +80,9 @@ cdio_lsn_to_msf (lsn_t lsn, msf_t *msf)
|
||||||
f = lsn + CDIO_CD_MAX_LSN;
|
f = lsn + CDIO_CD_MAX_LSN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m > 6) {
|
if (m > 99) {
|
||||||
cdio_warn ("number of minutes (%d) truncated to 99.", m);
|
cdio_warn ("number of minutes (%d) truncated to 99.", m);
|
||||||
m = 6;
|
m = 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
msf->m = cdio_to_bcd8 (m);
|
msf->m = cdio_to_bcd8 (m);
|
||||||
|
|
|
@ -294,8 +294,8 @@ cdio_get_track_lsn(const CdIo_t *p_cdio, track_t u_track)
|
||||||
Return the International Standard Recording Code (ISRC) for track number
|
Return the International Standard Recording Code (ISRC) for track number
|
||||||
u_track in p_cdio. Track numbers start at 1.
|
u_track in p_cdio. Track numbers start at 1.
|
||||||
|
|
||||||
Note: string is malloc'd so caller has to free() the returned
|
Note: The caller must free the returned string with cdio_free()
|
||||||
string when done with it.
|
when done with it.
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
cdio_get_track_isrc (const CdIo_t *p_cdio, track_t u_track)
|
cdio_get_track_isrc (const CdIo_t *p_cdio, track_t u_track)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006, 2008 Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
Copyright (C) 2006, 2008 Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
||||||
Copyright (C) 2011 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2011, 2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2012 Pete Batard <pete@akeo.ie>
|
Copyright (C) 2012 Pete Batard <pete@akeo.ie>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include <cdio/utf8.h>
|
#include <cdio/utf8.h>
|
||||||
#include <cdio/logging.h>
|
#include <cdio/logging.h>
|
||||||
|
#include <cdio/memory.h>
|
||||||
|
|
||||||
/* Windows requires some basic UTF-8 support outside of Joliet */
|
/* Windows requires some basic UTF-8 support outside of Joliet */
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
@ -107,8 +108,8 @@ FILE* fopen_utf8(const char* filename, const char* mode)
|
||||||
wchar_t* wfilename = cdio_utf8_to_wchar(filename);
|
wchar_t* wfilename = cdio_utf8_to_wchar(filename);
|
||||||
wchar_t* wmode = cdio_utf8_to_wchar(mode);
|
wchar_t* wmode = cdio_utf8_to_wchar(mode);
|
||||||
ret = _wfopen(wfilename, wmode);
|
ret = _wfopen(wfilename, wmode);
|
||||||
free(wfilename);
|
cdio_free(wfilename);
|
||||||
free(wmode);
|
cdio_free(wmode);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -136,7 +137,7 @@ static void bgav_hexdump(uint8_t * data, int len, int linebreak)
|
||||||
int i;
|
int i;
|
||||||
int bytes_written = 0;
|
int bytes_written = 0;
|
||||||
int imax;
|
int imax;
|
||||||
|
|
||||||
while(bytes_written < len)
|
while(bytes_written < len)
|
||||||
{
|
{
|
||||||
imax = (bytes_written + linebreak > len) ? len - bytes_written : linebreak;
|
imax = (bytes_written + linebreak > len) ? len - bytes_written : linebreak;
|
||||||
|
@ -183,11 +184,11 @@ do_convert(iconv_t cd, const char * src, int src_len,
|
||||||
#if 0
|
#if 0
|
||||||
fprintf(stderr, "Converting:\n");
|
fprintf(stderr, "Converting:\n");
|
||||||
bgav_hexdump(src, src_len, 16);
|
bgav_hexdump(src, src_len, 16);
|
||||||
#endif
|
#endif
|
||||||
alloc_size = src_len + BYTES_INCREMENT;
|
alloc_size = src_len + BYTES_INCREMENT;
|
||||||
|
|
||||||
inbytesleft = src_len;
|
inbytesleft = src_len;
|
||||||
|
|
||||||
/* We reserve space here to add a final '\0' */
|
/* We reserve space here to add a final '\0' */
|
||||||
outbytesleft = alloc_size-1;
|
outbytesleft = alloc_size-1;
|
||||||
|
|
||||||
|
@ -195,10 +196,10 @@ do_convert(iconv_t cd, const char * src, int src_len,
|
||||||
|
|
||||||
inbuf = (char *)src;
|
inbuf = (char *)src;
|
||||||
outbuf = ret;
|
outbuf = ret;
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(iconv(cd, (ICONV_CONST char **)&inbuf, &inbytesleft,
|
if(iconv(cd, (ICONV_CONST char **)&inbuf, &inbytesleft,
|
||||||
&outbuf, &outbytesleft) == (size_t)-1)
|
&outbuf, &outbytesleft) == (size_t)-1)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +242,7 @@ do_convert(iconv_t cd, const char * src, int src_len,
|
||||||
bgav_hexdump(src, src_len, 16);
|
bgav_hexdump(src, src_len, 16);
|
||||||
fprintf(stderr, "dst:\n");
|
fprintf(stderr, "dst:\n");
|
||||||
bgav_hexdump((uint8_t*)(ret), (int)(outbuf - ret), 16);
|
bgav_hexdump((uint8_t*)(ret), (int)(outbuf - ret), 16);
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +293,7 @@ bool cdio_charset_from_utf8(cdio_utf8_t * src, char ** dst,
|
||||||
/* Eliminate empty strings */
|
/* Eliminate empty strings */
|
||||||
le_dst = cdio_utf8_to_wchar(src);
|
le_dst = cdio_utf8_to_wchar(src);
|
||||||
if ((le_dst == NULL) || (le_dst[0] == 0)) {
|
if ((le_dst == NULL) || (le_dst[0] == 0)) {
|
||||||
free(le_dst);
|
cdio_free(le_dst);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,8 @@ _cdio_strdup_upper (const char str[])
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert MinGW/MSYS paths that start in "/c/..." to "c:/..."
|
/* Convert MinGW/MSYS paths that start in "/c/..." to "c:/..."
|
||||||
so that they can be used with fopen(), stat(), etc. */
|
so that they can be used with fopen(), stat(), etc.
|
||||||
|
Returned string must be freed by the caller using cdio_free().*/
|
||||||
char *
|
char *
|
||||||
_cdio_strdup_fixpath (const char path[])
|
_cdio_strdup_fixpath (const char path[])
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\cdio\bytesex.h" />
|
<ClInclude Include="..\..\cdio\bytesex.h" />
|
||||||
<ClInclude Include="..\..\cdio\cdio.h" />
|
<ClInclude Include="..\..\cdio\cdio.h" />
|
||||||
|
<ClInclude Include="..\..\cdio\cdtext.h" />
|
||||||
<ClInclude Include="..\..\cdio\iso9660.h" />
|
<ClInclude Include="..\..\cdio\iso9660.h" />
|
||||||
<ClInclude Include="..\..\cdio\logging.h" />
|
<ClInclude Include="..\..\cdio\logging.h" />
|
||||||
<ClInclude Include="..\..\cdio\utf8.h" />
|
<ClInclude Include="..\..\cdio\utf8.h" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Source Files">
|
<Filter Include="Source Files">
|
||||||
|
@ -47,6 +47,9 @@
|
||||||
<ClInclude Include="..\..\driver\filemode.h">
|
<ClInclude Include="..\..\driver\filemode.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\cdio\cdtext.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\iso9660_fs.c">
|
<ClCompile Include="..\iso9660_fs.c">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2003-2009, 2013 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2003-2009, 2013-2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -360,7 +360,7 @@ iso9660_set_ltime_with_timezone(const struct tm *p_tm,
|
||||||
{
|
{
|
||||||
char *_pvd_date = (char *) pvd_date;
|
char *_pvd_date = (char *) pvd_date;
|
||||||
|
|
||||||
memset (_pvd_date, '0', 16);
|
memset (_pvd_date, (int) '0', 16);
|
||||||
pvd_date->lt_gmtoff = (iso712_t) 0; /* Start out with time zone GMT. */
|
pvd_date->lt_gmtoff = (iso712_t) 0; /* Start out with time zone GMT. */
|
||||||
|
|
||||||
if (!p_tm) return;
|
if (!p_tm) return;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2003-2008, 2011-2013 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2003-2008, 2011-2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -754,6 +754,7 @@ _iso9660_dir_to_statbuf (iso9660_dir_t *p_iso9660_dir, bool_3way_t b_xa,
|
||||||
if (!p_stat_new)
|
if (!p_stat_new)
|
||||||
{
|
{
|
||||||
cdio_warn("Couldn't calloc(1, %d)", (int)(sizeof(iso9660_stat_t)+i_rr_fname+2));
|
cdio_warn("Couldn't calloc(1, %d)", (int)(sizeof(iso9660_stat_t)+i_rr_fname+2));
|
||||||
|
free(p_stat);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memcpy(p_stat_new, p_stat, stat_len);
|
memcpy(p_stat_new, p_stat, stat_len);
|
||||||
|
@ -1270,12 +1271,15 @@ iso9660_fs_readdir (CdIo_t *p_cdio, const char psz_path[], bool b_mode2)
|
||||||
if (!_dirbuf)
|
if (!_dirbuf)
|
||||||
{
|
{
|
||||||
cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE);
|
cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE);
|
||||||
|
_cdio_list_free (retval, true);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cdio_read_data_sectors (p_cdio, _dirbuf, p_stat->lsn,
|
if (cdio_read_data_sectors (p_cdio, _dirbuf, p_stat->lsn,
|
||||||
ISO_BLOCKSIZE, p_stat->secsize))
|
ISO_BLOCKSIZE, p_stat->secsize)) {
|
||||||
return NULL;
|
_cdio_list_free (retval, true);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
while (offset < (p_stat->secsize * ISO_BLOCKSIZE))
|
while (offset < (p_stat->secsize * ISO_BLOCKSIZE))
|
||||||
{
|
{
|
||||||
|
@ -1334,12 +1338,14 @@ iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[])
|
||||||
if (!_dirbuf)
|
if (!_dirbuf)
|
||||||
{
|
{
|
||||||
cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE);
|
cdio_warn("Couldn't calloc(1, %d)", p_stat->secsize * ISO_BLOCKSIZE);
|
||||||
|
_cdio_list_free (retval, true);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = iso9660_iso_seek_read (p_iso, _dirbuf, p_stat->lsn, p_stat->secsize);
|
ret = iso9660_iso_seek_read (p_iso, _dirbuf, p_stat->lsn, p_stat->secsize);
|
||||||
if (ret != ISO_BLOCKSIZE*p_stat->secsize)
|
if (ret != ISO_BLOCKSIZE*p_stat->secsize)
|
||||||
{
|
{
|
||||||
|
_cdio_list_free (retval, true);
|
||||||
free (_dirbuf);
|
free (_dirbuf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1415,8 +1421,9 @@ find_lsn_recurse (void *p_image, iso9660_readdir_t iso9660_readdir,
|
||||||
iso9660_stat_t *ret_stat = calloc(1, len2);
|
iso9660_stat_t *ret_stat = calloc(1, len2);
|
||||||
if (!ret_stat)
|
if (!ret_stat)
|
||||||
{
|
{
|
||||||
cdio_warn("Couldn't calloc(1, %d)", len2);
|
_cdio_list_free (dirlist, true);
|
||||||
return NULL;
|
cdio_warn("Couldn't calloc(1, %d)", len2);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
memcpy(ret_stat, statbuf, len2);
|
memcpy(ret_stat, statbuf, len2);
|
||||||
_cdio_list_free (entlist, true);
|
_cdio_list_free (entlist, true);
|
||||||
|
@ -1510,6 +1517,16 @@ iso9660_ifs_find_lsn_with_path(iso9660_t *p_iso, lsn_t i_lsn,
|
||||||
"/", i_lsn, ppsz_full_filename);
|
"/", i_lsn, ppsz_full_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Free the passed iso9660_stat_t structure.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
iso9660_stat_free(iso9660_stat_t *p_stat)
|
||||||
|
{
|
||||||
|
if (p_stat != NULL)
|
||||||
|
free(p_stat);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return true if ISO 9660 image has extended attrributes (XA).
|
Return true if ISO 9660 image has extended attrributes (XA).
|
||||||
*/
|
*/
|
||||||
|
@ -1563,11 +1580,11 @@ iso_have_rr_traverse (iso9660_t *p_iso, const iso9660_stat_t *_root,
|
||||||
if ( have_rr != yep) {
|
if ( have_rr != yep) {
|
||||||
have_rr = iso_have_rr_traverse (p_iso, p_stat, &splitpath[1], pu_file_limit);
|
have_rr = iso_have_rr_traverse (p_iso, p_stat, &splitpath[1], pu_file_limit);
|
||||||
}
|
}
|
||||||
|
free(p_stat);
|
||||||
if (have_rr != nope) {
|
if (have_rr != nope) {
|
||||||
free (_dirbuf);
|
free (_dirbuf);
|
||||||
return have_rr;
|
return have_rr;
|
||||||
}
|
}
|
||||||
free(p_stat);
|
|
||||||
|
|
||||||
offset += iso9660_get_dir_len(p_iso9660_dir);
|
offset += iso9660_get_dir_len(p_iso9660_dir);
|
||||||
*pu_file_limit = (*pu_file_limit)-1;
|
*pu_file_limit = (*pu_file_limit)-1;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2005, 2008, 2010, 2011 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2005, 2008, 2010-2011, 2014 Rocky Bernstein <rocky@gnu.org>
|
||||||
Adapted from GNU/Linux fs/isofs/rock.c (C) 1992, 1993 Eric Youngdale
|
Adapted from GNU/Linux fs/isofs/rock.c (C) 1992, 1993 Eric Youngdale
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@ -51,7 +51,7 @@ iso_rock_tf_flag_t iso_rock_tf_flag;
|
||||||
valgrind complaint.
|
valgrind complaint.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
realloc_symlink(/*in/out*/ iso9660_stat_t *p_stat, uint8_t i_grow)
|
realloc_symlink(/*in/out*/ iso9660_stat_t *p_stat, uint8_t i_grow)
|
||||||
{
|
{
|
||||||
if (!p_stat->rr.i_symlink) {
|
if (!p_stat->rr.i_symlink) {
|
||||||
const uint16_t i_max = 2*i_grow+1;
|
const uint16_t i_max = 2*i_grow+1;
|
||||||
|
@ -138,15 +138,15 @@ realloc_symlink(/*in/out*/ iso9660_stat_t *p_stat, uint8_t i_grow)
|
||||||
sizeof(iso9660_dtime_t)); \
|
sizeof(iso9660_dtime_t)); \
|
||||||
cnt += sizeof(iso9660_dtime_t); \
|
cnt += sizeof(iso9660_dtime_t); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Get
|
Get
|
||||||
@return length of name field; 0: not found, -1: to be ignored
|
@return length of name field; 0: not found, -1: to be ignored
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
||||||
/*out*/ char * psz_name,
|
/*out*/ char * psz_name,
|
||||||
/*in/out*/ iso9660_stat_t *p_stat)
|
/*in/out*/ iso9660_stat_t *p_stat)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
@ -165,19 +165,19 @@ get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
||||||
iso_extension_record_t * rr;
|
iso_extension_record_t * rr;
|
||||||
int sig;
|
int sig;
|
||||||
int rootflag;
|
int rootflag;
|
||||||
|
|
||||||
while (len > 1){ /* There may be one byte for padding somewhere */
|
while (len > 1){ /* There may be one byte for padding somewhere */
|
||||||
rr = (iso_extension_record_t *) chr;
|
rr = (iso_extension_record_t *) chr;
|
||||||
if (rr->len == 0) goto out; /* Something got screwed up here */
|
if (rr->len == 0) goto out; /* Something got screwed up here */
|
||||||
sig = *chr+(*(chr+1) << 8);
|
sig = *chr+(*(chr+1) << 8);
|
||||||
chr += rr->len;
|
chr += rr->len;
|
||||||
len -= rr->len;
|
len -= rr->len;
|
||||||
|
|
||||||
switch(sig){
|
switch(sig){
|
||||||
case SIG('S','P'):
|
case SIG('S','P'):
|
||||||
CHECK_SP(goto out);
|
CHECK_SP(goto out);
|
||||||
break;
|
break;
|
||||||
case SIG('C','E'):
|
case SIG('C','E'):
|
||||||
{
|
{
|
||||||
iso711_t i_fname = from_711(p_iso9660_dir->filename.len);
|
iso711_t i_fname = from_711(p_iso9660_dir->filename.len);
|
||||||
if ('\0' == p_iso9660_dir->filename.str[1] && 1 == i_fname)
|
if ('\0' == p_iso9660_dir->filename.str[1] && 1 == i_fname)
|
||||||
|
@ -190,7 +190,7 @@ get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
||||||
case SIG('E','R'):
|
case SIG('E','R'):
|
||||||
p_stat->rr.b3_rock = yep;
|
p_stat->rr.b3_rock = yep;
|
||||||
cdio_debug("ISO 9660 Extensions: ");
|
cdio_debug("ISO 9660 Extensions: ");
|
||||||
{
|
{
|
||||||
int p;
|
int p;
|
||||||
for(p=0;p<rr->u.ER.len_id;p++) cdio_debug("%c",rr->u.ER.data[p]);
|
for(p=0;p<rr->u.ER.len_id;p++) cdio_debug("%c",rr->u.ER.data[p]);
|
||||||
}
|
}
|
||||||
|
@ -265,13 +265,13 @@ get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
||||||
slen -= p_sl->len + 2;
|
slen -= p_sl->len + 2;
|
||||||
p_oldsl = p_sl;
|
p_oldsl = p_sl;
|
||||||
p_sl = (iso_rock_sl_part_t *) (((char *) p_sl) + p_sl->len + 2);
|
p_sl = (iso_rock_sl_part_t *) (((char *) p_sl) + p_sl->len + 2);
|
||||||
|
|
||||||
if (slen < 2) {
|
if (slen < 2) {
|
||||||
if (((rr->u.SL.flags & 1) != 0) && ((p_oldsl->flags & 1) == 0))
|
if (((rr->u.SL.flags & 1) != 0) && ((p_oldsl->flags & 1) == 0))
|
||||||
p_stat->rr.i_symlink += 1;
|
p_stat->rr.i_symlink += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this component record isn't continued, then append a '/'.
|
* If this component record isn't continued, then append a '/'.
|
||||||
*/
|
*/
|
||||||
|
@ -288,7 +288,7 @@ get_rock_ridge_filename(iso9660_dir_t * p_iso9660_dir,
|
||||||
case SIG('R','E'):
|
case SIG('R','E'):
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return -1;
|
return -1;
|
||||||
case SIG('T','F'):
|
case SIG('T','F'):
|
||||||
/* Time stamp(s) for a file */
|
/* Time stamp(s) for a file */
|
||||||
{
|
{
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
@ -332,20 +332,20 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir,
|
||||||
len-=14;
|
len-=14;
|
||||||
if (len<0) len=0;
|
if (len<0) len=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* repeat:*/
|
/* repeat:*/
|
||||||
{
|
{
|
||||||
int sig;
|
int sig;
|
||||||
iso_extension_record_t * rr;
|
iso_extension_record_t * rr;
|
||||||
int rootflag;
|
int rootflag;
|
||||||
|
|
||||||
while (len > 1){ /* There may be one byte for padding somewhere */
|
while (len > 1){ /* There may be one byte for padding somewhere */
|
||||||
rr = (iso_extension_record_t *) chr;
|
rr = (iso_extension_record_t *) chr;
|
||||||
if (rr->len == 0) goto out; /* Something got screwed up here */
|
if (rr->len == 0) goto out; /* Something got screwed up here */
|
||||||
sig = from_721(*chr);
|
sig = from_721(*chr);
|
||||||
chr += rr->len;
|
chr += rr->len;
|
||||||
len -= rr->len;
|
len -= rr->len;
|
||||||
|
|
||||||
switch(sig){
|
switch(sig){
|
||||||
case SIG('S','P'):
|
case SIG('S','P'):
|
||||||
CHECK_SP(goto out);
|
CHECK_SP(goto out);
|
||||||
|
@ -385,7 +385,7 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SIG('T','F'):
|
case SIG('T','F'):
|
||||||
/* Time stamp(s) for a file */
|
/* Time stamp(s) for a file */
|
||||||
{
|
{
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
@ -437,13 +437,13 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir,
|
||||||
slen -= p_sl->len + 2;
|
slen -= p_sl->len + 2;
|
||||||
p_oldsl = p_sl;
|
p_oldsl = p_sl;
|
||||||
p_sl = (iso_rock_sl_part_t *) (((char *) p_sl) + p_sl->len + 2);
|
p_sl = (iso_rock_sl_part_t *) (((char *) p_sl) + p_sl->len + 2);
|
||||||
|
|
||||||
if (slen < 2) {
|
if (slen < 2) {
|
||||||
if (((rr->u.SL.flags & 1) != 0) && ((p_oldsl->flags & 1) == 0))
|
if (((rr->u.SL.flags & 1) != 0) && ((p_oldsl->flags & 1) == 0))
|
||||||
p_stat->rr.i_symlink += 1;
|
p_stat->rr.i_symlink += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this component record isn't continued, then append a '/'.
|
* If this component record isn't continued, then append a '/'.
|
||||||
*/
|
*/
|
||||||
|
@ -461,7 +461,7 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir,
|
||||||
cdio_warn("Attempt to read p_stat for relocated directory");
|
cdio_warn("Attempt to read p_stat for relocated directory");
|
||||||
goto out;
|
goto out;
|
||||||
#ifdef FINISHED
|
#ifdef FINISHED
|
||||||
case SIG('C','L'):
|
case SIG('C','L'):
|
||||||
{
|
{
|
||||||
iso9660_stat_t * reloc;
|
iso9660_stat_t * reloc;
|
||||||
ISOFS_I(p_stat)->i_first_extent = from_733(rr->u.CL.location);
|
ISOFS_I(p_stat)->i_first_extent = from_733(rr->u.CL.location);
|
||||||
|
@ -492,14 +492,14 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *p_iso9660_dir,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
parse_rock_ridge_stat(iso9660_dir_t *p_iso9660_dir,
|
parse_rock_ridge_stat(iso9660_dir_t *p_iso9660_dir,
|
||||||
/*out*/ iso9660_stat_t *p_stat)
|
/*out*/ iso9660_stat_t *p_stat)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if (!p_stat) return 0;
|
if (!p_stat) return 0;
|
||||||
|
|
||||||
result = parse_rock_ridge_stat_internal(p_iso9660_dir, p_stat, 0);
|
result = parse_rock_ridge_stat_internal(p_iso9660_dir, p_stat, 0);
|
||||||
/* if Rock-Ridge flag was reset and we didn't look for attributes
|
/* if Rock-Ridge flag was reset and we didn't look for attributes
|
||||||
* behind eventual XA attributes, have a look there */
|
* behind eventual XA attributes, have a look there */
|
||||||
|
@ -518,7 +518,7 @@ _getbuf (void)
|
||||||
{
|
{
|
||||||
static char _buf[BUF_COUNT][BUF_SIZE];
|
static char _buf[BUF_COUNT][BUF_SIZE];
|
||||||
static int _i = -1;
|
static int _i = -1;
|
||||||
|
|
||||||
_i++;
|
_i++;
|
||||||
_i %= BUF_COUNT;
|
_i %= BUF_COUNT;
|
||||||
|
|
||||||
|
@ -528,24 +528,24 @@ _getbuf (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns a string which interpreting the POSIX mode st_mode.
|
Returns a string which interpreting the POSIX mode st_mode.
|
||||||
For example:
|
For example:
|
||||||
\verbatim
|
\verbatim
|
||||||
drwxrws---
|
drwxrws---
|
||||||
-rw-rw-r--
|
-rw-rw-r--
|
||||||
lrwxrwxrwx
|
lrwxrwxrwx
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
A description of the characters in the string follows
|
A description of the characters in the string follows
|
||||||
The 1st character is either "b" for a block device,
|
The 1st character is either "b" for a block device,
|
||||||
"c" for a character device, "d" if the entry is a directory, "l" for
|
"c" for a character device, "d" if the entry is a directory, "l" for
|
||||||
a symbolic link, "p" for a pipe or FIFO, "s" for a "socket",
|
a symbolic link, "p" for a pipe or FIFO, "s" for a "socket",
|
||||||
or "-" if none of the these.
|
or "-" if none of the these.
|
||||||
|
|
||||||
The 2nd to 4th characters refer to permissions for a user while the
|
The 2nd to 4th characters refer to permissions for a user while the
|
||||||
the 5th to 7th characters refer to permissions for a group while, and
|
the 5th to 7th characters refer to permissions for a group while, and
|
||||||
the 8th to 10h characters refer to permissions for everyone.
|
the 8th to 10h characters refer to permissions for everyone.
|
||||||
|
|
||||||
In each of these triplets the first character (2, 5, 8) is "r" if
|
In each of these triplets the first character (2, 5, 8) is "r" if
|
||||||
the entry is allowed to be read.
|
the entry is allowed to be read.
|
||||||
|
|
||||||
|
@ -569,7 +569,7 @@ iso9660_get_rock_attr_str(posix_mode_t st_mode)
|
||||||
|
|
||||||
if (S_ISBLK(st_mode))
|
if (S_ISBLK(st_mode))
|
||||||
result[ 0] = 'b';
|
result[ 0] = 'b';
|
||||||
else if (S_ISDIR(st_mode))
|
else if (S_ISDIR(st_mode))
|
||||||
result[ 0] = 'd';
|
result[ 0] = 'd';
|
||||||
else if (S_ISCHR(st_mode))
|
else if (S_ISCHR(st_mode))
|
||||||
result[ 0] = 'c';
|
result[ 0] = 'c';
|
||||||
|
@ -577,16 +577,16 @@ iso9660_get_rock_attr_str(posix_mode_t st_mode)
|
||||||
result[ 0] = 'l';
|
result[ 0] = 'l';
|
||||||
else if (S_ISFIFO(st_mode))
|
else if (S_ISFIFO(st_mode))
|
||||||
result[ 0] = 'p';
|
result[ 0] = 'p';
|
||||||
else if (S_ISSOCK(st_mode))
|
else if (S_ISSOCK(st_mode))
|
||||||
result[ 0] = 's';
|
result[ 0] = 's';
|
||||||
/* May eventually fill in others.. */
|
/* May eventually fill in others.. */
|
||||||
else
|
else
|
||||||
result[ 0] = '-';
|
result[ 0] = '-';
|
||||||
|
|
||||||
result[ 1] = (st_mode & ISO_ROCK_IRUSR) ? 'r' : '-';
|
result[ 1] = (st_mode & ISO_ROCK_IRUSR) ? 'r' : '-';
|
||||||
result[ 2] = (st_mode & ISO_ROCK_IWUSR) ? 'w' : '-';
|
result[ 2] = (st_mode & ISO_ROCK_IWUSR) ? 'w' : '-';
|
||||||
|
|
||||||
if (st_mode & ISO_ROCK_ISUID)
|
if (st_mode & ISO_ROCK_ISUID)
|
||||||
result[ 3] = (st_mode & ISO_ROCK_IXUSR) ? 's' : 'S';
|
result[ 3] = (st_mode & ISO_ROCK_IXUSR) ? 's' : 'S';
|
||||||
else
|
else
|
||||||
result[ 3] = (st_mode & ISO_ROCK_IXUSR) ? 'x' : '-';
|
result[ 3] = (st_mode & ISO_ROCK_IXUSR) ? 'x' : '-';
|
||||||
|
@ -594,9 +594,9 @@ iso9660_get_rock_attr_str(posix_mode_t st_mode)
|
||||||
result[ 4] = (st_mode & ISO_ROCK_IRGRP) ? 'r' : '-';
|
result[ 4] = (st_mode & ISO_ROCK_IRGRP) ? 'r' : '-';
|
||||||
result[ 5] = (st_mode & ISO_ROCK_IWGRP) ? 'w' : '-';
|
result[ 5] = (st_mode & ISO_ROCK_IWGRP) ? 'w' : '-';
|
||||||
|
|
||||||
if (st_mode & ISO_ROCK_ISGID)
|
if (st_mode & ISO_ROCK_ISGID)
|
||||||
result[ 6] = (st_mode & ISO_ROCK_IXGRP) ? 's' : 'S';
|
result[ 6] = (st_mode & ISO_ROCK_IXGRP) ? 's' : 'S';
|
||||||
else
|
else
|
||||||
result[ 6] = (st_mode & ISO_ROCK_IXGRP) ? 'x' : '-';
|
result[ 6] = (st_mode & ISO_ROCK_IXGRP) ? 'x' : '-';
|
||||||
|
|
||||||
result[ 7] = (st_mode & ISO_ROCK_IROTH) ? 'r' : '-';
|
result[ 7] = (st_mode & ISO_ROCK_IROTH) ? 'r' : '-';
|
||||||
|
@ -611,10 +611,8 @@ iso9660_get_rock_attr_str(posix_mode_t st_mode)
|
||||||
/*!
|
/*!
|
||||||
Returns POSIX mode bitstring for a given file.
|
Returns POSIX mode bitstring for a given file.
|
||||||
*/
|
*/
|
||||||
mode_t
|
mode_t
|
||||||
iso9660_get_posix_filemode_from_rock(const iso_rock_statbuf_t *rr)
|
iso9660_get_posix_filemode_from_rock(const iso_rock_statbuf_t *rr)
|
||||||
{
|
{
|
||||||
return (mode_t) rr->st_mode;
|
return (mode_t) rr->st_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,13 @@ iso9660_xa_init (iso9660_xa_t *_xa, uint16_t uid, uint16_t gid, uint16_t attr,
|
||||||
return _xa;
|
return _xa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
iso9660_xa_free (iso9660_xa_t *_xa)
|
||||||
|
{
|
||||||
|
if (_xa != NULL)
|
||||||
|
free(_xa);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns POSIX mode bitstring for a given file.
|
Returns POSIX mode bitstring for a given file.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2005-2006, 2008, 2011, 2013 Rocky Bernstein <rocky@gnu.org>
|
Copyright (C) 2005-2006, 2008, 2011, 2013-2014
|
||||||
|
Rocky Bernstein <rocky@gnu.org>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -205,10 +206,9 @@ udf_get_lba(const udf_file_entry_t *p_udf_fe,
|
||||||
|
|
||||||
#define udf_PATH_DELIMITERS "/\\"
|
#define udf_PATH_DELIMITERS "/\\"
|
||||||
|
|
||||||
/* Searches p_udf_dirent a directory entry called psz_token.
|
/* Searches p_udf_dirent for a directory entry called psz_token.
|
||||||
Note p_udf_dirent is continuously updated. If the entry is
|
Note that p_udf_dirent may be replaced or freed during this call
|
||||||
not found p_udf_dirent is useless and thus the caller should
|
and only the returned udf_dirent_t must be used afterwards.
|
||||||
not use it afterwards.
|
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
udf_dirent_t *
|
udf_dirent_t *
|
||||||
|
@ -221,20 +221,21 @@ udf_ff_traverse(udf_dirent_t *p_udf_dirent, char *psz_token)
|
||||||
if (!next_tok)
|
if (!next_tok)
|
||||||
return p_udf_dirent; /* found */
|
return p_udf_dirent; /* found */
|
||||||
else if (p_udf_dirent->b_dir) {
|
else if (p_udf_dirent->b_dir) {
|
||||||
udf_dirent_t * p_udf_dirent2 = udf_opendir(p_udf_dirent);
|
udf_dirent_t * p_udf_dirent_next = udf_opendir(p_udf_dirent);
|
||||||
|
|
||||||
if (p_udf_dirent2) {
|
if (p_udf_dirent_next) {
|
||||||
udf_dirent_t * p_udf_dirent3 =
|
/* free p_udf_dirent to avoid leaking memory. */
|
||||||
udf_ff_traverse(p_udf_dirent2, next_tok);
|
udf_dirent_free(p_udf_dirent);
|
||||||
|
|
||||||
/* if p_udf_dirent3 is null p_udf_dirent2 is free'd. */
|
/* previous p_udf_dirent_next is freed by udf_ff_traverse. */
|
||||||
return p_udf_dirent3;
|
p_udf_dirent_next = udf_ff_traverse(p_udf_dirent_next, next_tok);
|
||||||
|
|
||||||
|
return p_udf_dirent_next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (p_udf_dirent)
|
|
||||||
free(p_udf_dirent->psz_name);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,20 +254,15 @@ udf_fopen(udf_dirent_t *p_udf_root, const char *psz_name)
|
||||||
/* file position must be reset when accessing a new file */
|
/* file position must be reset when accessing a new file */
|
||||||
p_udf_root->p_udf->i_position = 0;
|
p_udf_root->p_udf->i_position = 0;
|
||||||
|
|
||||||
strncpy(tokenline, psz_name, udf_MAX_PATHLEN);
|
tokenline[udf_MAX_PATHLEN-1] = '\0';
|
||||||
|
strncpy(tokenline, psz_name, udf_MAX_PATHLEN-1);
|
||||||
psz_token = strtok(tokenline, udf_PATH_DELIMITERS);
|
psz_token = strtok(tokenline, udf_PATH_DELIMITERS);
|
||||||
if (psz_token) {
|
if (psz_token) {
|
||||||
/*** FIXME??? udf_dirent can be variable size due to the
|
|
||||||
extended attributes and descriptors. Given that, is this
|
|
||||||
correct?
|
|
||||||
*/
|
|
||||||
udf_dirent_t *p_udf_dirent =
|
udf_dirent_t *p_udf_dirent =
|
||||||
udf_new_dirent(&p_udf_root->fe, p_udf_root->p_udf,
|
udf_new_dirent(&p_udf_root->fe, p_udf_root->p_udf,
|
||||||
p_udf_root->psz_name, p_udf_root->b_dir,
|
p_udf_root->psz_name, p_udf_root->b_dir,
|
||||||
p_udf_root->b_parent);
|
p_udf_root->b_parent);
|
||||||
p_udf_file = udf_ff_traverse(p_udf_dirent, psz_token);
|
p_udf_file = udf_ff_traverse(p_udf_dirent, psz_token);
|
||||||
if (p_udf_file != p_udf_dirent)
|
|
||||||
udf_dirent_free(p_udf_dirent);
|
|
||||||
}
|
}
|
||||||
else if ( 0 == strncmp("/", psz_name, sizeof("/")) ) {
|
else if ( 0 == strncmp("/", psz_name, sizeof("/")) ) {
|
||||||
return udf_new_dirent(&p_udf_root->fe, p_udf_root->p_udf,
|
return udf_new_dirent(&p_udf_root->fe, p_udf_root->p_udf,
|
||||||
|
@ -299,7 +295,7 @@ unicode16_decode(const uint8_t *data, int i_len)
|
||||||
cdio_charset_to_utf8((char*)&data[1], i_len-1, &r, "UCS-2BE");
|
cdio_charset_to_utf8((char*)&data[1], i_len-1, &r, "UCS-2BE");
|
||||||
return r;
|
return r;
|
||||||
default:
|
default:
|
||||||
/* Empty string, for calls that can't take a NULL pointer */
|
/* Empty string, as some existing sections can't take a NULL pointer */
|
||||||
r = (char*)calloc(1, 1);
|
r = (char*)calloc(1, 1);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -449,7 +445,7 @@ udf_open (const char *psz_path)
|
||||||
* returns the size of buffer needed for all data
|
* returns the size of buffer needed for all data
|
||||||
* Note: this call accepts a NULL psz_volid, to retrieve the length required.
|
* Note: this call accepts a NULL psz_volid, to retrieve the length required.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
udf_get_volume_id(udf_t *p_udf, /*out*/ char *psz_volid, unsigned int i_volid)
|
udf_get_volume_id(udf_t *p_udf, /*out*/ char *psz_volid, unsigned int i_volid)
|
||||||
{
|
{
|
||||||
uint8_t data[UDF_BLOCKSIZE];
|
uint8_t data[UDF_BLOCKSIZE];
|
||||||
|
@ -475,10 +471,10 @@ udf_get_volume_id(udf_t *p_udf, /*out*/ char *psz_volid, unsigned int i_volid)
|
||||||
if (r == NULL)
|
if (r == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
volid_len = strlen(r)+1; /* +1 for NUL terminator */
|
volid_len = strlen(r)+1; /* +1 for NUL terminator */
|
||||||
if (psz_volid != NULL) {
|
if (psz_volid != NULL) {
|
||||||
strncpy(psz_volid, r, MIN(volid_len, i_volid));
|
strncpy(psz_volid, r, MIN(volid_len, i_volid));
|
||||||
psz_volid[i_volid-1] = 0; /* strncpy does not always terminate the dest */
|
psz_volid[i_volid-1] = 0; /* strncpy does not always terminate the dest */
|
||||||
}
|
}
|
||||||
free(r);
|
free(r);
|
||||||
|
|
||||||
|
@ -534,17 +530,17 @@ udf_get_logical_volume_id(udf_t *p_udf, /*out*/ char *psz_logvolid, unsigned int
|
||||||
if (psz_logvolid != NULL)
|
if (psz_logvolid != NULL)
|
||||||
psz_logvolid[0] = 0;
|
psz_logvolid[0] = 0;
|
||||||
|
|
||||||
if (DRIVER_OP_SUCCESS != udf_read_sectors (p_udf, p_logvol, p_udf->lvd_lba, 1) )
|
if (DRIVER_OP_SUCCESS != udf_read_sectors (p_udf, p_logvol, p_udf->lvd_lba, 1) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
r = unicode16_decode((uint8_t *) p_logvol->logvol_id, p_logvol->logvol_id[127]);
|
r = unicode16_decode((uint8_t *) p_logvol->logvol_id, p_logvol->logvol_id[127]);
|
||||||
if (r == NULL)
|
if (r == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
logvolid_len = strlen(r)+1; /* +1 for NUL terminator */
|
logvolid_len = strlen(r)+1; /* +1 for NUL terminator */
|
||||||
if (psz_logvolid != NULL) {
|
if (psz_logvolid != NULL) {
|
||||||
strncpy(psz_logvolid, r, MIN(logvolid_len, i_logvolid));
|
strncpy(psz_logvolid, r, MIN(logvolid_len, i_logvolid));
|
||||||
psz_logvolid[i_logvolid-1] = 0; /* strncpy does not always terminate the dest */
|
psz_logvolid[i_logvolid-1] = 0; /* strncpy does not always terminate the dest */
|
||||||
}
|
}
|
||||||
free(r);
|
free(r);
|
||||||
|
|
||||||
|
@ -748,9 +744,9 @@ udf_readdir(udf_dirent_t *p_udf_dirent)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_and_null(p_udf_dirent->psz_name);
|
free_and_null(p_udf_dirent->psz_name);
|
||||||
p = (uint8_t*)p_udf_dirent->fid->u.imp_use.data + p_udf_dirent->fid->u.i_imp_use;
|
p = (uint8_t*)p_udf_dirent->fid->u.imp_use.data + p_udf_dirent->fid->u.i_imp_use;
|
||||||
p_udf_dirent->psz_name = unicode16_decode(p, i_len);
|
p_udf_dirent->psz_name = unicode16_decode(p, i_len);
|
||||||
}
|
}
|
||||||
return p_udf_dirent;
|
return p_udf_dirent;
|
||||||
}
|
}
|
||||||
|
|
12
src/rufus.rc
12
src/rufus.rc
|
@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Rufus 1.4.11.521"
|
CAPTION "Rufus 1.4.11.522"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
||||||
|
@ -165,7 +165,7 @@ END
|
||||||
RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||||
CAPTION "Rufus 1.4.11.521"
|
CAPTION "Rufus 1.4.11.522"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
||||||
|
@ -428,8 +428,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,4,11,521
|
FILEVERSION 1,4,11,522
|
||||||
PRODUCTVERSION 1,4,11,521
|
PRODUCTVERSION 1,4,11,522
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -446,13 +446,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "1.4.11.521"
|
VALUE "FileVersion", "1.4.11.522"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "1.4.11.521"
|
VALUE "ProductVersion", "1.4.11.522"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Reference in a new issue