Re: Help in using gsapi_set_stdio() to capture stdout into a memory buffer

"Joaquim Luis" <[email protected]>
Newsgroups gmane.comp.printing.ghostscript.devel
Organization UALG
Message-ID <op.yet6kzeqdbaoe8@macmarilu>
Chris,

Thanks for the binary remainder (confess I hadn't thought on it) but the  
gsapi_run_string() example, taken from the API.html doc page, is being  
used as a test case. If I can't make it run well than no good to go into  
more elaborated cases. And if I can't find out why a from-a-dll-call sends  
me into an ioerror than I'm at a dead end already.

Joaquim

> It's just been pointed out to me that -12 is actually ioerror, but the
> rest of my reply stands..... and, actually, ioerror makes more sense.
>
> Chris
>
>
> On 24 March 2016 at 13:33, Chris Liddell <[email protected]>  
> wrote:
>> If you look in base/gserrors.h, you'll see that -12 is a limitcheck  
>> error,
>>
>> But, firstly, gsapi_run_string() is a really bad idea for anything
>> other than a basic string, because Postscript can contain binary data
>> (and in fact, Postscript itself can be binary encoded), so it will
>> fool functions like strlen() which we use in that API call.
>>
>> So, *maybe* gsapi_run_string_with_length() would work.
>>
>> Personally, I would use gsapi_run_string_continue() in loop, passing
>> in buffers of data - probably keep to about 4k buffer size, that way
>> your not going to hit any other string length limits that might still
>> be in there.
>>
>> Chris
>>
>>
>>
>>
>> On 24 March 2016 at 06:18, Joaquim Luis <[email protected]> wrote:
>>> Hi again. I'm afraid I have to get back to this because I got stuck in  
>>> a
>>> mystery.
>>> The attached code, sorry for the #ifdefs mess used for debugging,  
>>> works when
>>> compiled as a standalone program (use the -DI_AM_MAIN pre-processor  
>>> flag).
>>> It works only with small files where we can just do
>>>
>>> gs_rasterize ps_file.ps
>>>
>>> However, if I built it as a dll and send as argument the postscript  
>>> code as
>>> a string, which will be called either from Matlab or Julia, than the  
>>> call
>>>
>>>         gsapi_run_string (GSinst, ps, 0, &GSexitCode)
>>>
>>> returns an error code GSexitCode = -12
>>>
>>> I confirmed that the problem is not in the PS in memory with the code  
>>> chunk
>>> under the #if 0. That is, that piece of code runs well from the  
>>> stand-alone
>>> but fails when run from a dll.
>>>
>>> I'm completely clueless with this. Can it be because gs tries to do
>>> something that it has not right to do when controlled by another  
>>> process
>>> (the one that calls the dll)?
>>>
>>> Thanks again
>>>
>>> Joaquim
>>>
>>>
>>>> At 16:17 17/03/2016 +0000, Joaquim Luis wrote:
>>>>
>>>>
>>>>> NOTE: the code file is attached, as it was in my first message.
>>>>
>>>>
>>>> I'm afraid (for me) your email ended up in a Google spam folder and I  
>>>> had
>>>> to dig it out manually. Somewhere in there the code obviously fell  
>>>> off,
>>>> apologies for that.
>>>>
>>>>
>>>>              Ken
>>>
>>>
>>> _______________________________________________
>>> gs-devel mailing list
>>> [email protected]
>>> http://ghostscript.com/cgi-bin/mailman/listinfo/gs-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.