X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Futil.c;h=60bab76acbb7abcc03c2aaaa1795d5ea497e19c2;hb=41c221c509deed7dc9c2bd8eb8c7e93563b21199;hp=54e29444655ada8905f3ca5f377a89e099821dbd;hpb=e3a7c6c725964662f4ad1fcfe21d2da742499b8a;p=wimlib diff --git a/src/util.c b/src/util.c index 54e29444..60bab76a 100644 --- a/src/util.c +++ b/src/util.c @@ -66,6 +66,8 @@ utf16le_strlen(const utf16lechar *s) #ifdef ENABLE_ERROR_MESSAGES bool wimlib_print_errors = false; +FILE *wimlib_error_file = NULL; /* Set in wimlib_global_init() */ +static bool wimlib_owns_error_file = false; #endif #if defined(ENABLE_ERROR_MESSAGES) || defined(ENABLE_DEBUG) @@ -79,8 +81,8 @@ wimlib_vmsg(const tchar *tag, const tchar *format, { int errno_save = errno; fflush(stdout); - tfputs(tag, stderr); - tvfprintf(stderr, format, va); + tfputs(tag, wimlib_error_file); + tvfprintf(wimlib_error_file, format, va); if (perror && errno_save != 0) { tchar buf[64]; int res; @@ -94,10 +96,10 @@ wimlib_vmsg(const tchar *tag, const tchar *format, if (errno_save == EBUSY) tstrcpy(buf, T("Resource busy")); #endif - tfprintf(stderr, T(": %"TS), buf); + tfprintf(wimlib_error_file, T(": %"TS), buf); } - tputc(T('\n'), stderr); - fflush(stderr); + tputc(T('\n'), wimlib_error_file); + fflush(wimlib_error_file); errno = errno_save; } } @@ -187,6 +189,42 @@ wimlib_set_print_errors(bool show_error_messages) #endif } +WIMLIBAPI int +wimlib_set_error_file(FILE *fp) +{ +#ifdef ENABLE_ERROR_MESSAGES + if (wimlib_owns_error_file) + fclose(wimlib_error_file); + wimlib_error_file = fp; + wimlib_print_errors = (fp != NULL); + wimlib_owns_error_file = false; + return 0; +#else + return WIMLIB_ERR_UNSUPPORTED; +#endif +} + +WIMLIBAPI int +wimlib_set_error_file_by_name(const tchar *path) +{ +#ifdef ENABLE_ERROR_MESSAGES + FILE *fp; + +#ifdef __WIN32__ + fp = win32_open_logfile(path); +#else + fp = fopen(path, "a"); +#endif + if (!fp) + return WIMLIB_ERR_OPEN; + wimlib_set_error_file(fp); + wimlib_owns_error_file = true; + return 0; +#else + return WIMLIB_ERR_UNSUPPORTED; +#endif +} + static const tchar *error_strings[] = { [WIMLIB_ERR_SUCCESS] = T("Success"),