From 6d23b5c7e77d797990771c5fd43ef596adb5c1cf Mon Sep 17 00:00:00 2001 From: dirk Date: Mon, 5 Jan 2015 19:52:49 +0000 Subject: [PATCH] Report Ghostscript version when -verbose is used and when an exception is raised. --- MagickCore/delegate-private.h | 11 +++++++++++ MagickCore/nt-base.c | 8 +++++--- coders/pdf.c | 17 +++++++++++++---- coders/ps.c | 15 ++++++++++++--- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/MagickCore/delegate-private.h b/MagickCore/delegate-private.h index 3cadb1453..e807b9c90 100644 --- a/MagickCore/delegate-private.h +++ b/MagickCore/delegate-private.h @@ -21,6 +21,14 @@ #if defined(MAGICKCORE_GS_DELEGATE) #include "ghostscript/iapi.h" #include "ghostscript/ierrors.h" +#else +typedef struct gsapi_revision_s +{ + const char *product; + const char *copyright; + long revision; + long revisiondate; +} gsapi_revision_t; #endif #if defined(__cplusplus) || defined(c_plusplus) @@ -62,6 +70,9 @@ typedef struct _GhostInfo (MagickDLLCall *set_stdio)(gs_main_instance *,int(MagickDLLCall *)(void *, char *,int),int(MagickDLLCall *)(void *,const char *,int), int(MagickDLLCall *)(void *,const char *,int)); + + int + (MagickDLLCall *revision)(gsapi_revision_t *, int); } GhostInfo; extern MagickPrivate MagickBooleanType diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index d0e17609b..74319ef09 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -1386,7 +1386,7 @@ MagickPrivate int NTGhostscriptLoadDLL(void) return(FALSE); } (void) ResetMagickMemory((void *) &ghost_info,0,sizeof(GhostInfo)); - ghost_info.delete_instance=(void (MagickDLLCall *) (gs_main_instance *)) ( + ghost_info.delete_instance=(void (MagickDLLCall *)(gs_main_instance *)) ( lt_dlsym(ghost_handle,"gsapi_delete_instance")); ghost_info.exit=(int (MagickDLLCall *)(gs_main_instance*)) lt_dlsym(ghost_handle,"gsapi_exit"); @@ -1400,11 +1400,13 @@ MagickPrivate int NTGhostscriptLoadDLL(void) MagickDLLCall *)(void *,char *,int),int(MagickDLLCall *)(void *, const char *,int),int(MagickDLLCall *)(void *,const char *,int))) (lt_dlsym(ghost_handle,"gsapi_set_stdio")); + ghost_info.revision=(int (MagickDLLCall *)(gsapi_revision_t *,int)) ( + lt_dlsym(ghost_handle,"gsapi_revision")); UnlockSemaphoreInfo(ghost_semaphore); if ((ghost_info.delete_instance == NULL) || (ghost_info.exit == NULL) || (ghost_info.init_with_args == NULL) || (ghost_info.new_instance == NULL) - || (ghost_info.run_string == NULL) || (ghost_info.set_stdio == NULL) - ) + || (ghost_info.run_string == NULL) || (ghost_info.set_stdio == NULL) || + (ghost_info.revision == NULL)) return(FALSE); return(TRUE); } diff --git a/coders/pdf.c b/coders/pdf.c index 1645a3954..65329b3c9 100644 --- a/coders/pdf.c +++ b/coders/pdf.c @@ -197,6 +197,9 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose, gs_main_instance *interpreter; + gsapi_revision_t + revision; + int argc, code; @@ -224,12 +227,16 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose, ghost_info_struct.set_stdio=(int (*)(gs_main_instance *,int(*)(void *,char *, int),int(*)(void *,const char *,int),int(*)(void *, const char *, int))) gsapi_set_stdio; + ghost_info_struct.revision=(int (*)(gsapi_revision_t *,int)) gsapi_revision; #endif if (ghost_info == (GhostInfo *) NULL) ExecuteGhostscriptCommand(command,status); + if ((ghost_info->revision)(&revision,sizeof(revision)) != 0) + revision.revision=0; if (verbose != MagickFalse) { - (void) fputs("[ghostscript library]",stdout); + (void) fprintf(stdout,"[ghostscript library %.2f]", + (double)revision.revision / 100); SetArgsStart(command,args_start); (void) fputs(args_start,stdout); } @@ -257,12 +264,14 @@ static MagickBooleanType InvokePDFDelegate(const MagickBooleanType verbose, SetArgsStart(command,args_start); if (status == -101) /* quit */ (void) FormatLocaleString(message,MaxTextExtent, - "[ghostscript library]%s: %s",args_start,errors); + "[ghostscript library %.2f]%s: %s",(double)revision.revision / 100, + args_start,errors); else { (void) ThrowMagickException(exception,GetMagickModule(), - DelegateError,"PDFDelegateFailed","`[ghostscript library]%s': %s", - args_start,errors); + DelegateError,"PDFDelegateFailed", + "`[ghostscript library %.2f]%s': %s", + (double)revision.revision / 100,args_start,errors); if (errors != (char *) NULL) errors=DestroyString(errors); (void) LogMagickEvent(CoderEvent,GetMagickModule(), diff --git a/coders/ps.c b/coders/ps.c index f9ebfee74..3faccb52b 100644 --- a/coders/ps.c +++ b/coders/ps.c @@ -187,6 +187,9 @@ static MagickBooleanType InvokePostscriptDelegate( gs_main_instance *interpreter; + gsapi_revision_t + revision; + int argc, code; @@ -214,12 +217,16 @@ static MagickBooleanType InvokePostscriptDelegate( ghost_info_struct.set_stdio=(int (*)(gs_main_instance *,int(*)(void *,char *, int),int(*)(void *,const char *,int),int(*)(void *, const char *, int))) gsapi_set_stdio; + ghost_info_struct.revision=(int (*)(gsapi_revision_t *,int)) gsapi_revision; #endif if (ghost_info == (GhostInfo *) NULL) ExecuteGhostscriptCommand(command,status); + if ((ghost_info->revision)(&revision,sizeof(revision)) != 0) + revision.revision=0; if (verbose != MagickFalse) { - (void) fputs("[ghostscript library]",stdout); + (void) fprintf(stdout,"[ghostscript library %.2f]", + (double)revision.revision / 100); SetArgsStart(command,args_start); (void) fputs(args_start,stdout); } @@ -247,12 +254,14 @@ static MagickBooleanType InvokePostscriptDelegate( SetArgsStart(command,args_start); if (status == -101) /* quit */ (void) FormatLocaleString(message,MaxTextExtent, - "[ghostscript library]%s: %s",args_start,errors); + "[ghostscript library %.2f]%s: %s",(double)revision.revision / 100, + args_start,errors); else { (void) ThrowMagickException(exception,GetMagickModule(), DelegateError,"PostscriptDelegateFailed", - "`[ghostscript library]%s': %s",args_start,errors); + "`[ghostscript library %.2f]%s': %s", + (double)revision.revision / 100,args_start,errors); if (errors != (char *) NULL) errors=DestroyString(errors); (void) LogMagickEvent(CoderEvent,GetMagickModule(), -- 2.50.1