OSDN Git Service

Updated WavPack decoder binary to v4.75.0 (2015-05-25), compiled with ICL 15.0 and...
authorLoRd_MuldeR <mulder2@gmx.de>
Sat, 29 Aug 2015 14:53:20 +0000 (16:53 +0200)
committerLoRd_MuldeR <mulder2@gmx.de>
Sat, 29 Aug 2015 14:53:20 +0000 (16:53 +0200)
doc/Changelog.html
doc/Changelog.md
etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff [new file with mode: 0644]
etc/Patches/deprecated/WavPack-4.70.0-UTF8+FlushProgress.diff [moved from etc/Patches/WavPack-4.70.0-UTF8+FlushProgress.diff with 100% similarity]
res/tools/wvunpack.exe
src/Config.h
src/Tools.h

index d6d754d..e08b662 100644 (file)
@@ -100,6 +100,7 @@ document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
 <li>Updated mpg123 decoder to v1.22.4 (2015-08-12), compiled with GCC 5.1.0<br /></li>
 <li>Updated ALAC decoder to refalac v1.47 (2015-02-15), based on reference implementation by Apple<br /></li>
 <li>Updated Monkey's Audio binary to v4.16 (2015-03-24), compiled with ICL 15.0 and MSVC 12.0<br /></li>
+<li>Updated WavPack decoder to v4.75.0 (2015-05-25), compiled with ICL 15.0 and MSVC 12.0<br /></li>
 <li>Updated GnuPG to v1.4.19 (2015-02-27), compiled with GCC 4.9.2<br /></li>
 <li>Fixed potential deadlock in Cue Sheet import dialog when &quot;Browse...&quot; button is clicked<br /></li>
 <li>Fixed function to restore the default Temp folder, if custom Temp folder doesn't exist anymore<br /></li>
index 783aa9d..69b6283 100644 (file)
@@ -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 (file)
index 0000000..cdbdacc
--- /dev/null
@@ -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 <mulder2@gmx.de>
++   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 <windows.h>
++#include <io.h>
++
++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 <mulder2@gmx.de>
++   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 <stdio.h>
++#include <sys/stat.h>
++
++#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 <string.h>
+ #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
index 6031ed9..e69a8bb 100644 (file)
Binary files a/res/tools/wvunpack.exe and b/res/tools/wvunpack.exe differ
index dbfdabc..bb8b39e 100644 (file)
@@ -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
 
 ///////////////////////////////////////////////////////////////////////////////
index 18fb829..5d34054 100644 (file)
@@ -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}
 };