die("out of memory allocating chain");
if(!FLAC__metadata_chain_read(chain, filename)) {
- fprintf(stderr, "%s: ERROR: reading metadata, status = \"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: reading metadata", filename);
return false;
}
FLAC__metadata_chain_sort_padding(chain);
ok = FLAC__metadata_chain_write(chain, options->use_padding, options->preserve_modtime);
if(!ok)
- fprintf(stderr, "%s: ERROR: writing FLAC file, error = %s\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: writing FLAC file", filename);
}
FLAC__metadata_chain_delete(chain);
die("out of memory allocating chain");
if(!FLAC__metadata_chain_read(chain, filename)) {
- fprintf(stderr, "%s: ERROR: reading metadata, status = \"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: reading metadata", filename);
return false;
}
FLAC__metadata_chain_sort_padding(chain);
ok = FLAC__metadata_chain_write(chain, use_padding, options->preserve_modtime);
if(!ok)
- fprintf(stderr, "%s: ERROR: writing FLAC file, error = %s\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: writing FLAC file", filename);
}
FLAC__metadata_chain_delete(chain);
padding->length = length;
if(!FLAC__metadata_iterator_insert_block_after(iterator, padding)) {
- fprintf(stderr, "%s: ERROR: adding new PADDING block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: adding new PADDING block to metadata", filename);
FLAC__metadata_object_delete(padding);
FLAC__metadata_iterator_delete(iterator);
return false;
while(FLAC__metadata_iterator_next(iterator))
;
if(!FLAC__metadata_iterator_insert_block_after(iterator, cuesheet)) {
- fprintf(stderr, "%s: ERROR: adding new CUESHEET block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: adding new CUESHEET block to metadata", filename);
FLAC__metadata_object_delete(cuesheet);
ok = false;
}
while(FLAC__metadata_iterator_prev(iterator))
;
if(!FLAC__metadata_iterator_insert_block_after(iterator, block)) {
- fprintf(stderr, "%s: ERROR: adding new SEEKTABLE block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: adding new SEEKTABLE block to metadata", filename);
FLAC__metadata_object_delete(block);
return false;
}
while(FLAC__metadata_iterator_next(iterator))
;
if(!FLAC__metadata_iterator_insert_block_after(iterator, block)) {
- fprintf(stderr, "%s: ERROR: adding new VORBIS_COMMENT block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+ print_error_with_chain_status(chain, "%s: ERROR: adding new VORBIS_COMMENT block to metadata", filename);
return false;
}
/* iterator is left pointing to new block */
#include "FLAC/assert.h"
#include "share/utf8.h"
#include <ctype.h>
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
}
}
+void print_error_with_chain_status(FLAC__Metadata_Chain *chain, const char *format, ...)
+{
+ const FLAC__Metadata_ChainStatus status = FLAC__metadata_chain_status(chain);
+ va_list args;
+
+ FLAC__ASSERT(0 != format);
+
+ va_start(args, format);
+
+ (void) vfprintf(stderr, format, args);
+
+ va_end(args);
+
+ fprintf(stderr, ", status = \"%s\"\n", FLAC__Metadata_ChainStatusString[status]);
+
+ if(status == FLAC__METADATA_CHAIN_STATUS_ERROR_OPENING_FILE) {
+ fprintf(stderr, "\n"
+ "The FLAC file could not be opened. Most likely the file does not exist\n"
+ "or is not readable.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_NOT_A_FLAC_FILE) {
+ fprintf(stderr, "\n"
+ "The file does not appear to be a FLAC file.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_NOT_WRITABLE) {
+ fprintf(stderr, "\n"
+ "The FLAC file does not have write permissions.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_BAD_METADATA) {
+ fprintf(stderr, "\n"
+ "The metadata to be writted does not conform to the FLAC metadata\n"
+ "specifications.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_READ_ERROR) {
+ fprintf(stderr, "\n"
+ "There was an error while reading the FLAC file.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_WRITE_ERROR) {
+ fprintf(stderr, "\n"
+ "There was an error while writing FLAC file; most probably the disk is\n"
+ "full.\n"
+ );
+ }
+ else if(status == FLAC__METADATA_CHAIN_STATUS_UNLINK_ERROR) {
+ fprintf(stderr, "\n"
+ "There was an error removing the temporary FLAC file.\n"
+ );
+ }
+}
+
FLAC__bool parse_vorbis_comment_field(const char *field_ref, char **field, char **name, char **value, unsigned *length, const char **violation)
{
static const char * const violations[] = {
char *local_strdup(const char *source);
void local_strcat(char **dest, const char *source);
void hexdump(const char *filename, const FLAC__byte *buf, unsigned bytes, const char *indent);
+void print_error_with_chain_status(FLAC__Metadata_Chain *chain, const char *format, ...);
FLAC__bool parse_vorbis_comment_field(const char *field_ref, char **field, char **name, char **value, unsigned *length, const char **violation);