diff --git a/doc/Changelog.html b/doc/Changelog.html index d6d754d6..e08b6625 100644 --- a/doc/Changelog.html +++ b/doc/Changelog.html @@ -100,6 +100,7 @@ document.write(''+e+'<\/'+'a'+'>');
  • Updated mpg123 decoder to v1.22.4 (2015-08-12), compiled with GCC 5.1.0
  • Updated ALAC decoder to refalac v1.47 (2015-02-15), based on reference implementation by Apple
  • Updated Monkey's Audio binary to v4.16 (2015-03-24), compiled with ICL 15.0 and MSVC 12.0
  • +
  • Updated WavPack decoder to v4.75.0 (2015-05-25), compiled with ICL 15.0 and MSVC 12.0
  • Updated GnuPG to v1.4.19 (2015-02-27), compiled with GCC 4.9.2
  • Fixed potential deadlock in Cue Sheet import dialog when "Browse..." button is clicked
  • Fixed function to restore the default Temp folder, if custom Temp folder doesn't exist anymore
  • diff --git a/doc/Changelog.md b/doc/Changelog.md index 783aa9d3..69b62838 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -17,6 +17,7 @@ * Updated mpg123 decoder to v1.22.4 (2015-08-12), compiled with GCC 5.1.0 * Updated ALAC decoder to refalac v1.47 (2015-02-15), based on reference implementation by Apple * Updated Monkey's Audio binary to v4.16 (2015-03-24), compiled with ICL 15.0 and MSVC 12.0 +* Updated WavPack decoder to v4.75.0 (2015-05-25), compiled with ICL 15.0 and MSVC 12.0 * Updated GnuPG to v1.4.19 (2015-02-27), compiled with GCC 4.9.2 * Fixed potential deadlock in Cue Sheet import dialog when "Browse..." button is clicked * Fixed function to restore the default Temp folder, if custom Temp folder doesn't exist anymore diff --git a/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff b/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff new file mode 100644 index 00000000..cdbdacc8 --- /dev/null +++ b/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff @@ -0,0 +1,655 @@ + .gitignore | 6 ++ + cli/utils.c | 21 +++-- + cli/win32_unicode_support.c | 197 ++++++++++++++++++++++++++++++++++++++++++++ + cli/win32_unicode_support.h | 49 +++++++++++ + cli/wvunpack.c | 71 +++++++++++++--- + src/open_utils.c | 5 +- + 6 files changed, 331 insertions(+), 18 deletions(-) + +diff --git a/.gitignore b/.gitignore +index eb3a2f7..b09320e 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1 +1,7 @@ + /_old_ ++/src/Release ++/Backup1 ++/Release ++/*.sdf ++/wavpackexe/Release ++/wvunpackexe/Release +diff --git a/cli/utils.c b/cli/utils.c +index 8ead3df..9925a8c 100644 +--- a/cli/utils.c ++++ b/cli/utils.c +@@ -30,6 +30,7 @@ + + #include "wavpack.h" + #include "utils.h" ++#include "win32_unicode_support.h" + + #ifdef WIN32 + #define fileno _fileno +@@ -81,7 +82,7 @@ int copy_timestamp(const char *src_filename, const char *dst_filename) + if (strcmp(src_filename, "-") == 0 || strcmp(dst_filename, "-") == 0) + return TRUE; + +- if (stat(src_filename, &fileinfo)) ++ if (stat_utf8(src_filename, &fileinfo)) + return FALSE; /* stat failed */ + + times[0].tv_sec = fileinfo.st_atime; +@@ -186,7 +187,7 @@ char *filespec_path (char *filespec) + globs.gl_pathc > 0) + { + /* test if the file is a directory */ +- if (stat(globs.gl_pathv[0], &fstats) == 0 && (fstats.st_mode & S_IFDIR)) { ++ if (stat_utf8(globs.gl_pathv[0], &fstats) == 0 && (fstats.st_mode & S_IFDIR)) { + filespec[0] = '\0'; + strcat (filespec, globs.gl_pathv[0]); + globfree(&globs); +@@ -368,6 +369,7 @@ char yna (void) + fprintf (stderr, "%c", 7); + } + ++ fflush(stderr); + waiting_input = 0; + + return choice; +@@ -446,6 +448,7 @@ void error_line (char *error, ...) + vsprintf (error_msg + 1, error, argptr); + va_end (argptr); + fputs (error_msg, stderr); ++ fflush(stderr); + finish_line (); + + if (debug_logging_mode) { +@@ -454,7 +457,7 @@ void error_line (char *error, ...) + + if (get_app_path (file_path)) { + strcat (file_path, "\\WavPack\\wavpack.log"); +- error_log = fopen (file_path, "a+"); ++ error_log = fopen_utf8 (file_path, "a+"); + + if (!error_log) { + get_app_path (file_path); +@@ -462,13 +465,13 @@ void error_line (char *error, ...) + + if (CreateDirectory (file_path, NULL)) { + strcat (file_path, "\\wavpack.log"); +- error_log = fopen (file_path, "a+"); ++ error_log = fopen_utf8 (file_path, "a+"); + } + } + } + + if (!error_log) +- error_log = fopen ("c:\\wavpack.log", "a+"); ++ error_log = fopen_utf8 ("c:\\wavpack.log", "a+"); + + if (error_log) { + fputs (error_msg + 1, error_log); +@@ -490,6 +493,7 @@ void error_line (char *error, ...) + vsprintf (error_msg + 1, error, argptr); + va_end (argptr); + fputs (error_msg, stderr); ++ fflush(stderr); + finish_line (); + } + +@@ -508,10 +512,11 @@ void debug_line (char *error, ...) + vsprintf (error_msg + 1, error, argptr); + va_end (argptr); + fputs (error_msg, stderr); ++ fflush(stderr); + finish_line (); + + if (debug_logging_mode) { +- FILE *error_log = fopen ("c:\\wavpack.log", "a+"); ++ FILE *error_log = fopen_utf8 ("c:\\wavpack.log", "a+"); + + if (error_log) { + fputs (error_msg + 1, error_log); +@@ -589,6 +594,8 @@ void finish_line (void) + } + else + fputc ('\n', stderr); ++ ++ fflush(stderr); + } + #else + ////////////////////////////////////////////////////////////////////////////// +@@ -599,6 +606,7 @@ void finish_line (void) + void finish_line (void) + { + fprintf (stderr, " \n"); ++ fflush(stderr); + } + + ////////////////////////////////////////////////////////////////////////////// +@@ -778,6 +786,7 @@ void DoSetConsoleTitle (char *text) + void DoSetConsoleTitle (char *text) + { + fprintf (stderr, "\033]0;%s\007", text); ++ fflush(stderr); + } + + #endif +diff --git a/cli/win32_unicode_support.c b/cli/win32_unicode_support.c +new file mode 100644 +index 0000000..513cebc +--- /dev/null ++++ b/cli/win32_unicode_support.c +@@ -0,0 +1,197 @@ ++/* Copyright (c) 2004-2012 LoRd_MuldeR ++ File: unicode_support.c ++ ++ This file was originally part of a patch included with LameXP, ++ released under the same license as the original audio tools. ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64 ++ ++#include "win32_unicode_support.h" ++ ++#include ++#include ++ ++static UINT g_old_output_cp = ((UINT)-1); ++ ++char *utf16_to_utf8(const wchar_t *input) ++{ ++ char *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL); ++ Buffer = (char*) malloc(sizeof(char) * BuffSize); ++ if(Buffer) ++ { ++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++char *utf16_to_ansi(const wchar_t *input) ++{ ++ char *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = WideCharToMultiByte(CP_ACP, 0, input, -1, NULL, 0, NULL, NULL); ++ Buffer = (char*) malloc(sizeof(char) * BuffSize); ++ if(Buffer) ++ { ++ Result = WideCharToMultiByte(CP_ACP, 0, input, -1, Buffer, BuffSize, NULL, NULL); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++wchar_t *utf8_to_utf16(const char *input) ++{ ++ wchar_t *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0); ++ Buffer = (wchar_t*) malloc(sizeof(wchar_t) * BuffSize); ++ if(Buffer) ++ { ++ Result = MultiByteToWideChar(CP_UTF8, 0, input, -1, Buffer, BuffSize); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++void init_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ int i, nArgs; ++ LPWSTR *szArglist; ++ ++ szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); ++ ++ if(NULL == szArglist) ++ { ++ fprintf(stderr, "\nFATAL: CommandLineToArgvW failed\n\n"); ++ exit(-1); ++ } ++ ++ *argv = (char**) malloc(sizeof(char*) * nArgs); ++ *argc = nArgs; ++ ++ if(NULL == *argv) ++ { ++ fprintf(stderr, "\nFATAL: Malloc failed\n\n"); ++ exit(-1); ++ } ++ ++ for(i = 0; i < nArgs; i++) ++ { ++ (*argv)[i] = utf16_to_utf8(szArglist[i]); ++ if(NULL == (*argv)[i]) ++ { ++ fprintf(stderr, "\nFATAL: utf16_to_utf8 failed\n\n"); ++ exit(-1); ++ } ++ } ++ ++ LocalFree(szArglist); ++} ++ ++void free_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ int i = 0; ++ ++ if(*argv != NULL) ++ { ++ for(i = 0; i < *argc; i++) ++ { ++ if((*argv)[i] != NULL) ++ { ++ free((*argv)[i]); ++ (*argv)[i] = NULL; ++ } ++ } ++ free(*argv); ++ *argv = NULL; ++ } ++} ++ ++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8) ++{ ++ FILE *ret = NULL; ++ wchar_t *filename_utf16 = utf8_to_utf16(filename_utf8); ++ wchar_t *mode_utf16 = utf8_to_utf16(mode_utf8); ++ ++ if(filename_utf16 && mode_utf16) ++ { ++ ret = _wfopen(filename_utf16, mode_utf16); ++ } ++ ++ if(filename_utf16) free(filename_utf16); ++ if(mode_utf16) free(mode_utf16); ++ ++ return ret; ++} ++ ++int stat_utf8(const char *path_utf8, struct _stat *buf) ++{ ++ int ret = -1; ++ ++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8); ++ if(path_utf16) ++ { ++ ret = _wstat(path_utf16, buf); ++ free(path_utf16); ++ } ++ ++ return ret; ++} ++ ++int unlink_utf8(const char *path_utf8) ++{ ++ int ret = -1; ++ ++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8); ++ if(path_utf16) ++ { ++ ret = _wunlink(path_utf16); ++ free(path_utf16); ++ } ++ ++ return ret; ++} ++ ++void init_console_utf8(void) ++{ ++ g_old_output_cp = GetConsoleOutputCP(); ++ SetConsoleOutputCP(CP_UTF8); ++} ++ ++void uninit_console_utf8(void) ++{ ++ if(g_old_output_cp != ((UINT)-1)) ++ { ++ SetConsoleOutputCP(g_old_output_cp); ++ } ++} ++ ++#endif +diff --git a/cli/win32_unicode_support.h b/cli/win32_unicode_support.h +new file mode 100644 +index 0000000..40c2e33 +--- /dev/null ++++ b/cli/win32_unicode_support.h +@@ -0,0 +1,49 @@ ++/* Copyright (c) 2004-2012 LoRd_MuldeR ++ File: unicode_support.h ++ ++ This file was originally part of a patch included with LameXP, ++ released under the same license as the original audio tools. ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++#ifndef UNICODE_SUPPORT_H_INCLUDED ++#define UNICODE_SUPPORT_H_INCLUDED ++ ++#include ++#include ++ ++#define WIN_UNICODE 1 ++ ++char *utf16_to_utf8(const wchar_t *input); ++char *utf16_to_ansi(const wchar_t *input); ++wchar_t *utf8_to_utf16(const char *input); ++void init_commandline_arguments_utf8(int *argc, char ***argv); ++void free_commandline_arguments_utf8(int *argc, char ***argv); ++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8); ++int stat_utf8(const char *path_utf8, struct _stat *buf); ++int unlink_utf8(const char *path_utf8); ++void init_console_utf8(void); ++void uninit_console_utf8(void); ++ ++#endif +diff --git a/cli/wvunpack.c b/cli/wvunpack.c +index e12b5c3..255a6a5 100644 +--- a/cli/wvunpack.c ++++ b/cli/wvunpack.c +@@ -46,6 +46,7 @@ + #include "wavpack.h" + #include "utils.h" + #include "md5.h" ++#include "win32_unicode_support.h" + + #ifdef WIN32 + #define strdup(x) _strdup(x) +@@ -159,7 +160,7 @@ static void display_progress (double file_progress); + // The "main" function for the command-line WavPack decompressor. // + ////////////////////////////////////////////////////////////////////////////// + +-int main (argc, argv) int argc; char **argv; ++static int wvunpack_main (argc, argv) int argc; char **argv; + { + #ifdef __EMX__ /* OS/2 */ + _wildcard (&argc, &argv); +@@ -196,7 +197,7 @@ int main (argc, argv) int argc; char **argv; + #endif + + #if defined (WIN32) +- set_console_title = 1; // on Windows, we default to messing with the console title ++ set_console_title = 0; // on Windows, we default to messing with the console title + #endif // on Linux, this is considered uncool to do by default + + // loop through command-line arguments +@@ -450,9 +451,15 @@ int main (argc, argv) int argc; char **argv; + } + + if (strcmp (WavpackGetLibraryVersionString (), PACKAGE_VERSION)) ++ { + fprintf (stderr, version_warning, WavpackGetLibraryVersionString (), PACKAGE_VERSION); ++ fflush(stderr); ++ } + else if (!quiet_mode && !error_count) ++ { + fprintf (stderr, sign_on, VERSION_OS, WavpackGetLibraryVersionString ()); ++ fflush(stderr); ++ } + + if (!num_files) { + printf ("%s", usage); +@@ -473,7 +480,7 @@ int main (argc, argv) int argc; char **argv; + // frontends, but could be used for other purposes. + + if (*infilename == '@') { +- FILE *list = fopen (infilename+1, "rt"); ++ FILE *list = fopen_utf8 (infilename+1, "rt"); + int di, c; + + for (di = file_index; di < num_files - 1; di++) +@@ -517,7 +524,7 @@ int main (argc, argv) int argc; char **argv; + } + #if defined (WIN32) + else if (filespec_wild (infilename)) { +- FILE *list = fopen (infilename+1, "rt"); ++ FILE *list = fopen_utf8 (infilename+1, "rt"); + intptr_t file; + int di; + +@@ -556,7 +563,7 @@ int main (argc, argv) int argc; char **argv; + // be passed on the command-line, but could be used for other purposes. + + if (outfilename && outfilename [0] == '@') { +- FILE *list = fopen (outfilename+1, "rt"); ++ FILE *list = fopen_utf8 (outfilename+1, "rt"); + int c; + + if (list == NULL) { +@@ -629,7 +636,10 @@ int main (argc, argv) int argc; char **argv; + strcat (outfilename, raw_decode ? ".raw" : ".wav"); + + if (num_files > 1 && !quiet_mode) ++ { + fprintf (stderr, "\n%s:\n", matches [file_index]); ++ fflush(stderr); ++ } + + result = unpack_file (matches [file_index], verify_only ? NULL : outfilename); + +@@ -653,9 +663,15 @@ int main (argc, argv) int argc; char **argv; + + if (num_files > 1) { + if (error_count) ++ { + fprintf (stderr, "\n **** warning: errors occurred in %d of %d files! ****\n", error_count, num_files); ++ fflush(stderr); ++ } + else if (!quiet_mode) ++ { + fprintf (stderr, "\n **** %d files successfully processed ****\n", num_files); ++ fflush(stderr); ++ } + } + + free (matches); +@@ -742,7 +758,7 @@ static FILE *open_output_file (char *filename, char **tempfilename) + return stdout; + } + +- testfile = fopen (filename, "rb"); ++ testfile = fopen_utf8 (filename, "rb"); + + if (testfile) { + size_t res = fread (&dummy, 1, 1, testfile); +@@ -754,6 +770,7 @@ static FILE *open_output_file (char *filename, char **tempfilename) + + if (!overwrite_all) { + fprintf (stderr, "overwrite %s (yes/no/all)? ", FN_FIT (filename)); ++ fflush(stderr); + + if (set_console_title) + DoSetConsoleTitle ("overwrite?"); +@@ -787,7 +804,7 @@ static FILE *open_output_file (char *filename, char **tempfilename) + strcat (*tempfilename, ".tmp"); + } + +- testfile = fopen (*tempfilename, "rb"); ++ testfile = fopen_utf8 (*tempfilename, "rb"); + + if (!testfile) + break; +@@ -801,7 +818,7 @@ static FILE *open_output_file (char *filename, char **tempfilename) + } + } + +- retval = fopen (*tempfilename ? *tempfilename : filename, "w+b"); ++ retval = fopen_utf8 (*tempfilename ? *tempfilename : filename, "w+b"); + + if (retval == NULL) + error_line ("can't create file %s!", *tempfilename ? *tempfilename : filename); +@@ -960,11 +977,17 @@ static int unpack_file (char *infilename, char *outfilename) + } + else if (*outfilename == '-') { + if (!quiet_mode) ++ { + fprintf (stderr, "unpacking %s%s to stdout,", *infilename == '-' ? + "stdin" : FN_FIT (infilename), wvc_mode ? " (+.wvc)" : ""); ++ fflush(stderr); ++ } + } + else if (!quiet_mode) ++ { + fprintf (stderr, "restoring %s,", FN_FIT (outfilename)); ++ fflush(stderr); ++ } + + if (outbuf_k) + output_buffer_size = outbuf_k * 1024; +@@ -983,8 +1006,11 @@ static int unpack_file (char *infilename, char *outfilename) + outfile = NULL; + + if (!quiet_mode) ++ { + fprintf (stderr, "verifying %s%s,", *infilename == '-' ? "stdin" : + FN_FIT (infilename), wvc_mode ? " (+.wvc)" : ""); ++ fflush(stderr); ++ } + } + + #if defined(WIN32) +@@ -1071,6 +1097,7 @@ static int unpack_file (char *infilename, char *outfilename) + #else + fprintf (stderr, "\n"); + #endif ++ fflush(stderr); + DoTruncateFile (outfile); + result = SOFT_ERROR; + break; +@@ -1085,8 +1112,11 @@ static int unpack_file (char *infilename, char *outfilename) + progress = floor (progress * 100.0 + 0.5); + + if (!quiet_mode) ++ { + fprintf (stderr, "%s%3d%% done...", + nobs ? " " : "\b\b\b\b\b\b\b\b\b\b\b\b", (int) progress); ++ fflush(stderr); ++ } + } + } + +@@ -1364,9 +1394,10 @@ static int do_tag_extractions (WavpackContext *wpc, char *outfilename) + else + strcpy (filespec_name (full_filename), tag_filename); + +- if (!overwrite_all && (outfile = fopen (full_filename, "r")) != NULL) { ++ if (!overwrite_all && (outfile = fopen_utf8 (full_filename, "r")) != NULL) { + DoCloseHandle (outfile); + fprintf (stderr, "overwrite %s (yes/no/all)? ", FN_FIT (full_filename)); ++ fflush(stderr); + + if (set_console_title) + DoSetConsoleTitle ("overwrite?"); +@@ -1385,7 +1416,7 @@ static int do_tag_extractions (WavpackContext *wpc, char *outfilename) + // open output file for writing + + if (*full_filename) { +- if ((outfile = fopen (full_filename, "w")) == NULL) { ++ if ((outfile = fopen_utf8 (full_filename, "w")) == NULL) { + error_line ("can't create file %s!", FN_FIT (full_filename)); + result = SOFT_ERROR; + } +@@ -2074,3 +2105,23 @@ void display_progress (double file_progress) + DoSetConsoleTitle (title); + } + } ++ ++////////////////////////////////////////////////////////////////////////////// ++// MAIN ++////////////////////////////////////////////////////////////////////////////// ++ ++int main(int argc, char **argv) ++{ ++ int ret = -1, argc_utf8 = -1; ++ char **argv_utf8 = NULL; ++ ++ init_console_utf8(); ++ init_commandline_arguments_utf8(&argc_utf8, &argv_utf8); ++ ++ ret = wvunpack_main(argc_utf8, argv_utf8); ++ ++ free_commandline_arguments_utf8(&argc_utf8, &argv_utf8); ++ uninit_console_utf8(); ++ ++ return ret; ++} +diff --git a/src/open_utils.c b/src/open_utils.c +index a8c7baa..a77f90f 100644 +--- a/src/open_utils.c ++++ b/src/open_utils.c +@@ -20,6 +20,7 @@ + #include + + #include "wavpack_local.h" ++#include "../cli/win32_unicode_support.h" + + // This code provides an interface between the reader callback mechanism that + // WavPack uses internally and the standard fstream C library. This allows an +@@ -137,7 +138,7 @@ WavpackContext *WavpackOpenFileInput (const char *infilename, char *error, int f + setmode (fileno (stdin), O_BINARY); + #endif + } +- else if ((wv_id = fopen (infilename, file_mode)) == NULL) { ++ else if ((wv_id = fopen_utf8 (infilename, file_mode)) == NULL) { + if (error) strcpy (error, (flags & OPEN_EDIT_TAGS) ? "can't open file for editing" : "can't open file"); + return NULL; + } +@@ -147,7 +148,7 @@ WavpackContext *WavpackOpenFileInput (const char *infilename, char *error, int f + + strcpy (in2filename, infilename); + strcat (in2filename, "c"); +- wvc_id = fopen (in2filename, "rb"); ++ wvc_id = fopen_utf8 (in2filename, "rb"); + free (in2filename); + } + else diff --git a/etc/Patches/WavPack-4.70.0-UTF8+FlushProgress.diff b/etc/Patches/deprecated/WavPack-4.70.0-UTF8+FlushProgress.diff similarity index 100% rename from etc/Patches/WavPack-4.70.0-UTF8+FlushProgress.diff rename to etc/Patches/deprecated/WavPack-4.70.0-UTF8+FlushProgress.diff diff --git a/res/tools/wvunpack.exe b/res/tools/wvunpack.exe index 6031ed9f..e69a8bb9 100644 Binary files a/res/tools/wvunpack.exe and b/res/tools/wvunpack.exe differ diff --git a/src/Config.h b/src/Config.h index dbfdabca..bb8b39ed 100644 --- a/src/Config.h +++ b/src/Config.h @@ -34,8 +34,8 @@ #define VER_LAMEXP_MINOR_HI 1 #define VER_LAMEXP_MINOR_LO 2 #define VER_LAMEXP_TYPE Beta -#define VER_LAMEXP_PATCH 5 -#define VER_LAMEXP_BUILD 1796 +#define VER_LAMEXP_PATCH 6 +#define VER_LAMEXP_BUILD 1798 #define VER_LAMEXP_CONFG 1700 /////////////////////////////////////////////////////////////////////////////// diff --git a/src/Tools.h b/src/Tools.h index 18fb8294..5d340546 100644 --- a/src/Tools.h +++ b/src/Tools.h @@ -94,7 +94,7 @@ g_lamexp_tools[] = {"509df39fdd7033b0f1af831304d0d6c08b74d5a48e2c038857a78b9dfaa4fb83c6b5c7ea202ba2270c0384607f2316ee", CPU_TYPE_ALL_ALL, "wget.exe", 1140, ""}, {"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""}, {"53c7ce1de68285b2440e6d36887708d816cc5a16dfb076669b9ad24a84bb9a4f1080c1885259446b58673366d729cf33", CPU_TYPE_ALL_ALL, "wupdate.exe", 20150819, ""}, - {"221efeabe47e9bf65404c4687df156b326b4fd244d910ef937213e6b0169a57350e897140a2e9965822d60aada609f79", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4700, ""}, + {"cb83e9393e0aceb012611241eb87eca5cc5edb81935a27d902e7435c1314962558044bae8a152e718cc5a56a1280f6b7", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4750, ""}, {NULL, NULL, NULL, NULL, NULL} };