mirror of
https://github.com/claunia/flac.git
synced 2025-12-16 18:54:26 +00:00
add read_only argument to simple iterator initializer
This commit is contained in:
@@ -641,7 +641,7 @@ namespace FLAC {
|
|||||||
SimpleIterator();
|
SimpleIterator();
|
||||||
virtual ~SimpleIterator();
|
virtual ~SimpleIterator();
|
||||||
|
|
||||||
bool init(const char *filename, bool preserve_file_stats = false);
|
bool init(const char *filename, bool read_only, bool preserve_file_stats);
|
||||||
|
|
||||||
bool is_valid() const;
|
bool is_valid() const;
|
||||||
Status status();
|
Status status();
|
||||||
|
|||||||
@@ -276,12 +276,17 @@ void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterat
|
|||||||
FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator);
|
FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator);
|
||||||
|
|
||||||
/** Initialize the iterator to point to the first metadata block in the
|
/** Initialize the iterator to point to the first metadata block in the
|
||||||
* given FLAC file. If \a preserve_file_stats is \c true, the owner and
|
* given FLAC file.
|
||||||
* modification time will be preserved even if the FLAC file is written.
|
|
||||||
*
|
*
|
||||||
* \param iterator A pointer to an existing iterator.
|
* \param iterator A pointer to an existing iterator.
|
||||||
* \param filename The path to the FLAC file.
|
* \param filename The path to the FLAC file.
|
||||||
* \param preserve_file_stats See above.
|
* \param read_only If \c true, the FLAC file will be opened
|
||||||
|
* in read-only mode; if \c false, the FLAC
|
||||||
|
* file will be opened for edit even if no
|
||||||
|
* edits are performed.
|
||||||
|
* \param preserve_file_stats If \c true, the owner and modification
|
||||||
|
* time will be preserved even if the FLAC
|
||||||
|
* file is written to.
|
||||||
* \assert
|
* \assert
|
||||||
* \code iterator != NULL \endcode
|
* \code iterator != NULL \endcode
|
||||||
* \code filename != NULL \endcode
|
* \code filename != NULL \endcode
|
||||||
@@ -289,7 +294,7 @@ FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__
|
|||||||
* \c false if a memory allocation error occurs, the file can't be
|
* \c false if a memory allocation error occurs, the file can't be
|
||||||
* opened, or another error occurs, else \c true.
|
* opened, or another error occurs, else \c true.
|
||||||
*/
|
*/
|
||||||
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool preserve_file_stats);
|
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats);
|
||||||
|
|
||||||
/** Returns \c true if the FLAC file is writable. If \c false, calls to
|
/** Returns \c true if the FLAC file is writable. If \c false, calls to
|
||||||
* FLAC__metadata_simple_iterator_set_block() and
|
* FLAC__metadata_simple_iterator_set_block() and
|
||||||
|
|||||||
@@ -782,11 +782,11 @@ namespace FLAC {
|
|||||||
iterator_ = 0;
|
iterator_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SimpleIterator::init(const char *filename, bool preserve_file_stats)
|
bool SimpleIterator::init(const char *filename, bool read_only, bool preserve_file_stats)
|
||||||
{
|
{
|
||||||
FLAC__ASSERT(0 != filename);
|
FLAC__ASSERT(0 != filename);
|
||||||
FLAC__ASSERT(is_valid());
|
FLAC__ASSERT(is_valid());
|
||||||
return (bool)::FLAC__metadata_simple_iterator_init(iterator_, filename, preserve_file_stats);
|
return (bool)::FLAC__metadata_simple_iterator_init(iterator_, filename, read_only, preserve_file_stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SimpleIterator::is_valid() const
|
bool SimpleIterator::is_valid() const
|
||||||
|
|||||||
@@ -297,18 +297,17 @@ FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FLAC__bool simple_iterator_prime_input_(FLAC__Metadata_SimpleIterator *iterator)
|
static FLAC__bool simple_iterator_prime_input_(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool read_only)
|
||||||
{
|
{
|
||||||
unsigned ret;
|
unsigned ret;
|
||||||
|
|
||||||
FLAC__ASSERT(0 != iterator);
|
FLAC__ASSERT(0 != iterator);
|
||||||
|
|
||||||
|
if(read_only || 0 == (iterator->file = fopen(iterator->filename, "r+b"))) {
|
||||||
iterator->is_writable = false;
|
iterator->is_writable = false;
|
||||||
|
|
||||||
if(0 == (iterator->file = fopen(iterator->filename, "r+b"))) {
|
|
||||||
#if !defined _MSC_VER && !defined __MINGW32__
|
#if !defined _MSC_VER && !defined __MINGW32__
|
||||||
/*@@@ don't know how to resolve errno without using LIBC.LIB; must use MSVCRT.LIB only for plugins */
|
/*@@@ don't know how to resolve errno without using LIBC.LIB; must use MSVCRT.LIB only for plugins */
|
||||||
if(errno == EACCES) {
|
if(read_only || errno == EACCES) {
|
||||||
#endif
|
#endif
|
||||||
if(0 == (iterator->file = fopen(iterator->filename, "rb"))) {
|
if(0 == (iterator->file = fopen(iterator->filename, "rb"))) {
|
||||||
iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE;
|
iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE;
|
||||||
@@ -362,7 +361,7 @@ static FLAC__bool simple_iterator_prime_input_(FLAC__Metadata_SimpleIterator *it
|
|||||||
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool preserve_file_stats, const char *tempfile_path_prefix);
|
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool preserve_file_stats, const char *tempfile_path_prefix);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool preserve_file_stats)
|
FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats)
|
||||||
{
|
{
|
||||||
const char *tempfile_path_prefix = 0; /*@@@ search for comments near 'rename(...)' for what it will take to finish implementing this */
|
const char *tempfile_path_prefix = 0; /*@@@ search for comments near 'rename(...)' for what it will take to finish implementing this */
|
||||||
|
|
||||||
@@ -371,7 +370,7 @@ FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *it
|
|||||||
|
|
||||||
simple_iterator_free_guts_(iterator);
|
simple_iterator_free_guts_(iterator);
|
||||||
|
|
||||||
if(preserve_file_stats)
|
if(!read_only && preserve_file_stats)
|
||||||
iterator->has_stats = get_file_stats_(filename, &iterator->stats);
|
iterator->has_stats = get_file_stats_(filename, &iterator->stats);
|
||||||
|
|
||||||
if(0 == (iterator->filename = strdup(filename))) {
|
if(0 == (iterator->filename = strdup(filename))) {
|
||||||
@@ -383,7 +382,7 @@ FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *it
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return simple_iterator_prime_input_(iterator);
|
return simple_iterator_prime_input_(iterator, read_only);
|
||||||
}
|
}
|
||||||
|
|
||||||
FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator)
|
FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator)
|
||||||
@@ -949,7 +948,7 @@ FLAC__bool FLAC__metadata_chain_read(FLAC__Metadata_Chain *chain, const char *fi
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!FLAC__metadata_simple_iterator_init(iterator, filename, /*preserve_file_stats=*/false)) {
|
if(!FLAC__metadata_simple_iterator_init(iterator, filename, /*read_only=*/true, /*preserve_file_stats=*/false)) {
|
||||||
chain->status = get_equivalent_status_(iterator->status);
|
chain->status = get_equivalent_status_(iterator->status);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -2071,7 +2070,7 @@ FLAC__bool simple_iterator_copy_file_postfix_(FLAC__Metadata_SimpleIterator *ite
|
|||||||
if(iterator->has_stats)
|
if(iterator->has_stats)
|
||||||
set_file_stats_(iterator->filename, &iterator->stats);
|
set_file_stats_(iterator->filename, &iterator->stats);
|
||||||
|
|
||||||
if(!simple_iterator_prime_input_(iterator))
|
if(!simple_iterator_prime_input_(iterator, !iterator->is_writable))
|
||||||
return false;
|
return false;
|
||||||
if(backup) {
|
if(backup) {
|
||||||
while(iterator->offset[iterator->depth] + (long)FLAC__STREAM_METADATA_HEADER_LENGTH + (long)iterator->length < save_offset)
|
while(iterator->offset[iterator->depth] + (long)FLAC__STREAM_METADATA_HEADER_LENGTH + (long)iterator->length < save_offset)
|
||||||
|
|||||||
@@ -441,7 +441,7 @@ static bool test_level_1_()
|
|||||||
if(!iterator.is_valid())
|
if(!iterator.is_valid())
|
||||||
return die_("iterator.is_valid() returned false");
|
return die_("iterator.is_valid() returned false");
|
||||||
|
|
||||||
if(!iterator.init(flacfile_, false))
|
if(!iterator.init(flacfile_, /*read_only=*/false, /*preserve_file_stats=*/false))
|
||||||
return die_("iterator.init() returned false");
|
return die_("iterator.init() returned false");
|
||||||
|
|
||||||
printf("is writable = %u\n", (unsigned)iterator.is_writable());
|
printf("is writable = %u\n", (unsigned)iterator.is_writable());
|
||||||
@@ -537,7 +537,7 @@ static bool test_level_1_()
|
|||||||
if(!iterator.is_valid())
|
if(!iterator.is_valid())
|
||||||
return die_("iterator.is_valid() returned false");
|
return die_("iterator.is_valid() returned false");
|
||||||
|
|
||||||
if(!iterator.init(flacfile_, /*preserve_file_stats=*/false))
|
if(!iterator.init(flacfile_, /*read_only=*/false, /*preserve_file_stats=*/false))
|
||||||
return die_("iterator.init() returned false");
|
return die_("iterator.init() returned false");
|
||||||
our_current_position = 0;
|
our_current_position = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -451,7 +451,7 @@ static FLAC__bool test_level_1_()
|
|||||||
if(0 == (iterator = FLAC__metadata_simple_iterator_new()))
|
if(0 == (iterator = FLAC__metadata_simple_iterator_new()))
|
||||||
return die_("FLAC__metadata_simple_iterator_new()");
|
return die_("FLAC__metadata_simple_iterator_new()");
|
||||||
|
|
||||||
if(!FLAC__metadata_simple_iterator_init(iterator, flacfile_, false))
|
if(!FLAC__metadata_simple_iterator_init(iterator, flacfile_, /*read_only=*/false, /*preserve_file_stats=*/false))
|
||||||
return die_("FLAC__metadata_simple_iterator_init() returned false");
|
return die_("FLAC__metadata_simple_iterator_init() returned false");
|
||||||
|
|
||||||
printf("is writable = %u\n", (unsigned)FLAC__metadata_simple_iterator_is_writable(iterator));
|
printf("is writable = %u\n", (unsigned)FLAC__metadata_simple_iterator_is_writable(iterator));
|
||||||
@@ -544,7 +544,7 @@ static FLAC__bool test_level_1_()
|
|||||||
if(0 == (iterator = FLAC__metadata_simple_iterator_new()))
|
if(0 == (iterator = FLAC__metadata_simple_iterator_new()))
|
||||||
return die_("FLAC__metadata_simple_iterator_new()");
|
return die_("FLAC__metadata_simple_iterator_new()");
|
||||||
|
|
||||||
if(!FLAC__metadata_simple_iterator_init(iterator, flacfile_, /*preserve_file_stats=*/false))
|
if(!FLAC__metadata_simple_iterator_init(iterator, flacfile_, /*read_only=*/false, /*preserve_file_stats=*/false))
|
||||||
return die_("FLAC__metadata_simple_iterator_init() returned false");
|
return die_("FLAC__metadata_simple_iterator_init() returned false");
|
||||||
our_current_position = 0;
|
our_current_position = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user