From 4d890286652dfd73169ecdbeb6e82ecc6f55079e Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Wed, 7 Nov 2012 22:14:42 +0100 Subject: Add error buffer and getter function to get the last error message --- src/common.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/common.c') diff --git a/src/common.c b/src/common.c index 01de503..0bd63be 100644 --- a/src/common.c +++ b/src/common.c @@ -29,6 +29,9 @@ int idevicerestore_debug = 0; +#define idevicerestore_err_buff_size 256 +static char idevicerestore_err_buff[idevicerestore_err_buff_size] = {0, }; + static FILE* info_stream = NULL; static FILE* error_stream = NULL; static FILE* debug_stream = NULL; @@ -48,10 +51,12 @@ void info(const char* format, ...) void error(const char* format, ...) { - if (error_disabled) return; va_list vargs; va_start(vargs, format); - vfprintf((error_stream) ? error_stream : stderr, format, vargs); + vsnprintf(idevicerestore_err_buff, idevicerestore_err_buff_size, format, vargs); + if (!error_disabled) { + vfprintf((error_stream) ? error_stream : stderr, format, vargs); + } va_end(vargs); } @@ -97,6 +102,19 @@ void idevicerestore_set_debug_stream(FILE* strm) } } +const char* idevicerestore_get_error() +{ + if (idevicerestore_err_buff[0] == 0) { + return NULL; + } else { + char* p = NULL; + while ((strlen(idevicerestore_err_buff) > 0) && (p = strrchr(idevicerestore_err_buff, '\n'))) { + p[0] = '\0'; + } + return (const char*)idevicerestore_err_buff; + } +} + int write_file(const char* filename, const void* data, size_t size) { size_t bytes = 0; FILE* file = NULL; -- cgit v1.1-32-gdbae