Looks like you can also use call '@@ERRNO' if you don't want to specify 
PGMNAME(LongMixed).

________________________________
From: IBM Mainframe Discussion List <[email protected]> on behalf of 
Frank Swarbrick <[email protected]>
Sent: Thursday, October 11, 2018 3:34 PM
To: [email protected]
Subject: Re: C errno from COBOL

Thanks Allan, that looks to do the trick!

I was going to ask how you found the __errno() function, but now I see it in 
errno.h:

#ifndef __NO_STATIC
  #undef errno
  extern int errno;
  extern int *__errno(void);
  #define errno (*__errno())
#endif

It's defined later than the stuff Charles was talking about, so both of us 
missed it.

Great!

Frank

________________________________
From: IBM Mainframe Discussion List <[email protected]> on behalf of 
Allan Kielstra <[email protected]>
Sent: Thursday, October 11, 2018 1:21 PM
To: [email protected]
Subject: Re: C errno from COBOL

Hi Frank:

I'm not sure if this will work for all times and in all cases.

Here is my C program simulating a C API that sets errno:

#include <errno.h>

int cfunc()
   {
   errno = 8;
   }

Compiled with no options with  z/OS V2.3 XL C/C++

Here is a small COBOL program I wrote
       CBL PGMNAME(LongMixed)
       Identification Division.
         program-id. "FS".
       Data Division.
       Working-Storage Section.
          1 pointer-to-errno usage pointer.
       Linkage Section.
          1 errno pic S9(9) COMP-5.
       Procedure Division.
           Display "Calling dummy C API"
           Call "cfunc"
           Call "__errno" returning pointer-to-errno
           Set Address Of errno To pointer-to-errno
           Display "errno = " errno
           stop run.
       End program "FS".

I call my C program to simulate calling a C API.   Then, I call __errno which 
appears to return the address of errno.  I compiled this with V6.2 with no 
options other than what is in the CBL card.  I compiled, bound and ran on USS.  
The result of the run is:

$ ./a.out
Calling dummy C API
errno = 0000000008
$

Try it and if it works, great but put in some comments that say that this 
relies on some implementation behaviour.  (I'm Canadian and that's how we spell 
that last word.)

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to