• 1 reply
  • Latest Post - ‏2014-08-28T18:24:01Z by barbara_morris
1 Post

Pinned topic Returning pointer from C function to RPG

‏2014-08-28T16:26:54Z |

Hi, I have a function written in C that performs a base64 conversion of a string and returns a pointer.  The C function allocates memory to the pointer using calloc().  The calling RPG program grabs the encoded value using %str() and then deallocates the pointer.  The program works 90% of the time but occasionally it throws a MCH0601 (space offset outside current limit) error during the call to the C function.  The error seems to occur only when the program is called multiple times within a long-running job.  Ending and restarting the job fixes the problem, so perhaps the problem only exists within an activation group.  Any suggestions as to the cause will be appreciated.

  • barbara_morris
    543 Posts

    Re: Returning pointer from C function to RPG


    If the returned string is not null-terminated, over time the heap storage might tend to contain non x'00' values. If you don't have the second parameter for %STR that tells it how far to look for the null-terminator, it will keep looking for the null-temrinator, and could eventually run into the physical end of the storage.

    If my guess is right, it would be better to get the C function to either null-terminate the vlaue, or to also return the length so you can use that as the second parameter for %STR.