diff --git a/src/streamfile.c b/src/streamfile.c index 1545ae6c..97e54992 100644 --- a/src/streamfile.c +++ b/src/streamfile.c @@ -22,9 +22,6 @@ typedef struct { uint8_t * buffer; /* data buffer */ size_t buffersize; /* max buffer size */ size_t filesize; /* cached file size (max offset) */ -#ifdef VGM_DEBUG_OUTPUT - int error_notified; -#endif #ifdef PROFILE_STREAMFILE size_t bytes_read; int error_count; @@ -67,13 +64,7 @@ static size_t read_the_rest(uint8_t * dest, off_t offset, size_t length, STDIOST /* request outside file: ignore to avoid seek/read */ if (offset > streamfile->filesize) { streamfile->offset = streamfile->filesize; - -#ifdef VGM_DEBUG_OUTPUT - if (!streamfile->error_notified) { - VGM_LOG("ERROR: reading over filesize 0x%x @ 0x%lx + 0x%x (buggy meta?)\n", streamfile->filesize, offset, length); - streamfile->error_notified = 1; - } -#endif + VGM_LOG_ONCE("ERROR: reading over filesize 0x%x @ 0x%lx + 0x%x (buggy meta?)\n", streamfile->filesize, offset, length); #if STREAMFILE_IGNORE_EOF memset(dest,0,length); /* dest is already shifted */ @@ -143,13 +134,7 @@ static size_t read_stdio(STDIOSTREAMFILE *streamfile,uint8_t * dest, off_t offse /* request outside file: ignore to avoid seek/read in read_the_rest() */ if (offset > streamfile->filesize) { streamfile->offset = streamfile->filesize; - -#ifdef VGM_DEBUG_OUTPUT - if (!streamfile->error_notified) { - VGM_LOG("ERROR: offset over filesize 0x%x @ 0x%lx + 0x%x (buggy meta?)\n", streamfile->filesize, offset, length); - streamfile->error_notified = 1; - } -#endif + VGM_LOG_ONCE("ERROR: offset over filesize 0x%x @ 0x%lx + 0x%x (buggy meta?)\n", streamfile->filesize, offset, length); #if STREAMFILE_IGNORE_EOF memset(dest,0,length); diff --git a/src/util.h b/src/util.h index 75b59078..0325743f 100644 --- a/src/util.h +++ b/src/util.h @@ -78,15 +78,19 @@ void concatn(int length, char * dst, const char * src); /* Simple stdout logging for debugging and regression testing purposes. - * Needs C99 variadic macros. */ + * Needs C99 variadic macros, uses do..while to force ; as statement */ #ifdef VGM_DEBUG_OUTPUT /* equivalent to printf when condition is true */ #define VGM_ASSERT(condition, ...) \ do { if (condition) printf(__VA_ARGS__); } while (0) +#define VGM_ASSERT_ONCE(condition, ...) \ + do { static int written; if (!written) { if (condition) printf(__VA_ARGS__); written = 1; } } while (0) /* equivalent to printf */ #define VGM_LOG(...) \ do { printf(__VA_ARGS__); } while (0) +#define VGM_LOG_ONCE(...) \ + do { static int written; if (!written) { printf(__VA_ARGS__); written = 1; } } while (0) /* prints file/line/func */ #define VGM_LOGF() \ do { printf("%s:%i '%s'\n", __FILE__, __LINE__, __func__); } while (0) @@ -108,10 +112,12 @@ void concatn(int length, char * dst, const char * src); #define VGM_ASSERT(condition, ...) /* nothing */ #define VGM_LOG(...) /* nothing */ +#define VGM_LOG_ONCE(...) /* nothing */ #define VGM_LOGF() /* nothing */ #define VGM_LOGT() /* nothing */ #define VGM_LOGB(buf, buf_size, bytes_per_line) /* nothing */ + #endif/*VGM_DEBUG_OUTPUT*/ #endif