From: cristy Date: Sat, 13 Aug 2011 17:12:28 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~7185 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=66f9c3c8a38dd7ab8c55ce8be34246a7d66617a8;p=imagemagick --- diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index 38a00aa4f..594f4eb30 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -41,6 +41,7 @@ #include "MagickCore/studio.h" #if defined(MAGICKCORE_WINDOWS_SUPPORT) #include "MagickCore/client.h" +#include "MagickCore/exception-private.h" #include "MagickCore/locale_.h" #include "MagickCore/log.h" #include "MagickCore/magick.h" @@ -339,6 +340,65 @@ MagickExport int IsWindows95() % % % % % % +% N T A r g v T o U T F 8 % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% NTArgvToUTF8() converts the wide command line arguments to UTF-8 to ensure +% compatibility with Linux. +% +% The format of the NTArgvToUTF8 method is: +% +% char **NTArgvToUTF8(const int argc,wchar_t **argv) +% +% A description of each parameter follows: +% +% o argc: the number of command line arguments. +% +% o argv: the wide-character command line arguments. +% +*/ +MagickExport char **NTArgvToUTF8(const int argc,wchar_t **argv) +{ + char + **utf8; + + ssize_t + i; + + utf8=(char **) AcquireQuantumMemory(argc,sizeof(*utf8)); + if (utf8 == (char **) NULL) + ThrowFatalException(ResourceLimitFatalError,"UnableToConvertStringToARGV"); + for (i=0; i < (ssize_t) argc; i++) + { + ssize_t + count; + + count=WideCharToMultiByte(CP_UTF8,0,argv[i],-1,NULL,0,NULL,NULL); + if (count < 0) + count=0; + utf8[i]=(char *) AcquireQuantumMemory(count+1,sizeof(**utf8)); + if (utf8[i] == (char *) NULL) + { + for (i--; i >= 0; i--) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + ThrowFatalException(ResourceLimitFatalError, + "UnableToConvertStringToARGV"); + } + count=WideCharToMultiByte(CP_UTF8,0,argv[i],-1,utf8[i],count,NULL,NULL); + utf8[i][count]=0; + } + return(utf8); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % % N T C l o s e D i r e c t o r y % % % % % diff --git a/MagickCore/nt-base.h b/MagickCore/nt-base.h index b6778ac98..39d980fc9 100644 --- a/MagickCore/nt-base.h +++ b/MagickCore/nt-base.h @@ -75,8 +75,10 @@ extern "C" { #endif #if !defined(access) +#if defined(_VISUALC_) && (_MSC_VER >= 1400) # define access(path,mode) _access_s(path,mode) #endif +#endif #if !defined(chdir) # define chdir _chdir #endif @@ -96,8 +98,6 @@ extern "C" { #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \ !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800) # define fseek _fseeki64 -#else -# define fseek _fseek #endif #endif #if !defined(fstat) && !defined(__BORLANDC__) @@ -115,8 +115,6 @@ extern "C" { #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \ !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800) # define ftell _ftelli64 -#else -# define ftell _ftell #endif #endif #if !defined(ftruncate) @@ -349,7 +347,8 @@ typedef UINT #endif extern MagickExport char - *NTGetLastError(void); + *NTGetLastError(void), + **NTArgvToUTF8(const int argc,wchar_t **); extern MagickExport const GhostInfo *NTGhostscriptDLLVectors(void); diff --git a/utilities/animate.c b/utilities/animate.c index 7ae3957f5..7c47d9f10 100644 --- a/utilities/animate.c +++ b/utilities/animate.c @@ -67,25 +67,7 @@ % */ -#if defined(MAGICKCORE_WINDOWS_SUPPORT) -int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state) -{ - char - **argv; - - int - argc, - main(int,char **); - - (void) instance; - (void) last; - (void) state; - argv=StringToArgv(command,&argc); - return(main(argc,argv)); -} -#endif - -int main(int argc,char **argv) +int AnimateMain(int argc,char **argv) { ExceptionInfo *exception; @@ -106,3 +88,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(AnimateMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=AnimateMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/compare.c b/utilities/compare.c index 32af5da11..7878b9942 100644 --- a/utilities/compare.c +++ b/utilities/compare.c @@ -58,7 +58,7 @@ % % */ -int main(int argc,char **argv) +int CompareMain(int argc,char **argv) { char *metadata; @@ -85,3 +85,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(CompareMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=CompareMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/composite.c b/utilities/composite.c index 2c0b92e52..e26760f5f 100644 --- a/utilities/composite.c +++ b/utilities/composite.c @@ -57,7 +57,8 @@ % % */ -int main(int argc,char **argv) + +int CompositeMain(int argc,char **argv) { ExceptionInfo *exception; @@ -78,3 +79,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(CompositeMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=CompositeMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/conjure.c b/utilities/conjure.c index 7d39c6998..dc40746d2 100644 --- a/utilities/conjure.c +++ b/utilities/conjure.c @@ -76,7 +76,8 @@ % % */ -int main(int argc,char **argv) + +int ConjureMain(int argc,char **argv) { ExceptionInfo *exception; @@ -97,3 +98,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(ConjureMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=ConjureMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/convert.c b/utilities/convert.c index f522a2635..c9170f9ac 100644 --- a/utilities/convert.c +++ b/utilities/convert.c @@ -63,7 +63,8 @@ % % */ -int main(int argc,char **argv) + +int ConvertMain(int argc,char **argv) { ExceptionInfo *exception; @@ -84,3 +85,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(ConvertMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=ConvertMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/display.c b/utilities/display.c index e1b4f9809..c98da60d6 100644 --- a/utilities/display.c +++ b/utilities/display.c @@ -72,25 +72,7 @@ % */ -#if defined(MAGICKCORE_WINDOWS_SUPPORT) -int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state) -{ - char - **argv; - - int - argc, - main(int,char **); - - (void) instance; - (void) last; - (void) state; - argv=StringToArgv(command,&argc); - return(main(argc,argv)); -} -#endif - -int main(int argc,char **argv) +int DisplayMain(int argc,char **argv) { ExceptionInfo *exception; @@ -111,3 +93,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(DisplayMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=DisplayMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/identify.c b/utilities/identify.c index 4de44e58e..cca83909b 100644 --- a/utilities/identify.c +++ b/utilities/identify.c @@ -58,7 +58,8 @@ % % */ -int main(int argc,char **argv) + +int IdentifyMain(int argc,char **argv) { char *metadata; @@ -85,3 +86,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(IdentifyMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=IdentifyMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/import.c b/utilities/import.c index 502329143..f2faae3a5 100644 --- a/utilities/import.c +++ b/utilities/import.c @@ -64,25 +64,7 @@ % */ -#if defined(MAGICKCORE_WINDOWS_SUPPORT) -int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state) -{ - char - **argv; - - int - argc, - main(int,char **); - - (void) instance; - (void) last; - (void) state; - argv=StringToArgv(command,&argc); - return(main(argc,argv)); -} -#endif - -int main(int argc,char **argv) +int ImportMain(int argc,char **argv) { ExceptionInfo *exception; @@ -103,3 +85,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(ImportMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=ImportMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/mogrify.c b/utilities/mogrify.c index 484f25b7e..9608afb93 100644 --- a/utilities/mogrify.c +++ b/utilities/mogrify.c @@ -59,7 +59,8 @@ % % */ -int main(int argc,char **argv) + +int MogrifyMain(int argc,char **argv) { ExceptionInfo *exception; @@ -80,3 +81,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(MogrifyMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=MogrifyMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/montage.c b/utilities/montage.c index c49d32958..28386cb16 100644 --- a/utilities/montage.c +++ b/utilities/montage.c @@ -59,7 +59,8 @@ % % */ -int main(int argc,char **argv) + +int MontageMain(int argc,char **argv) { ExceptionInfo *exception; @@ -80,3 +81,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(MontageMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=MontageMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif diff --git a/utilities/stream.c b/utilities/stream.c index caaf2dc4c..4384edca6 100644 --- a/utilities/stream.c +++ b/utilities/stream.c @@ -59,7 +59,8 @@ % % */ -int main(int argc,char **argv) + +int StreamMain(int argc,char **argv) { ExceptionInfo *exception; @@ -80,3 +81,29 @@ int main(int argc,char **argv) MagickCoreTerminus(); return(status); } + +#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__) +int main(int argc,char **argv) +{ + return(StreamMain(argc,argv)); +} +#else +int wmain(int argc,wchar_t *argv[]) +{ + char + **utf8; + + int + status; + + register int + i; + + utf8=NTArgvToUTF8(argc,argv); + status=StreamMain(argc,utf8); + for (i=0; i < argc; i++) + utf8[i]=DestroyString(utf8[i]); + utf8=(char **) RelinquishMagickMemory(utf8); + return(status); +} +#endif