• Subject: Re: errno (was: VIRUS ALERT!)
  • From: Neil Palmer <neilp@xxxxxxxxxxx>
  • Date: Thu, 7 Jun 2001 00:42:33 -0400

From Sion Coulter ?  Haven't been vacationing at a sex change clinic in 
Denmark have you ?  ;-)

...Neil





"Sion Coulter" <shc@flybynight.com.au>
Sent by: owner-midrange-l@midrange.com
2001/06/06 22:53
Please respond to MIDRANGE-L

 
        To:     MIDRANGE-L@midrange.com
        cc: 
        Subject:        errno (was: VIRUS ALERT!)



Hello Joe,

Change the bloody topic!

You wrote:
>Does anybod have the ILE C pieces needed to allow me to retrieve the 
>"errno" parameter when using the Unix APIs?  According to the manuals, I 
>need a C module because the error is exported as "errno", which is lower 
>case and cannot be accessed by ILE RPG. 

Not strictly true.  RPG IV can access lower case exports.  For example

 * Errno in C style - imported from QC2UTIL1 service program 
D errno           S                   LIKE(int_t) IMPORT('errno') 

however, although that is syntactically correct it won't work because the 
errno variable exported from the QC2UTIL1 service program is always zero. 
Bastards!  Read on ....

>And rather than provide a "geterrno()" method in the Unix APIs, evidently 

>I'm expected to make my own.  Since I don't have the ILE C compiler, 
>that's sort of difficult, so I was wondering if anybody else had gone 
>through this step.

You are expected to create your own because the conventional wisdom is 
that 
you should be using C for this stuff.  However, you don't need to create 
it 
completely because the C runtime (which is on every system) already 
provides it.  Read on ...

You do have the C compiler.  It is on your installation CD-ROM.  You can 
install it and run it for 70 days before it dies.  It is probably worth 
installing simply so you can examine the C header files whenever you need 
to convert an include to RPG IV.  If you look at the errno.h include you 
will see that errno in C on the AS/400 is actually a function call.

                 extern int *__errno(void);
                 #define errno (*__errno())

You can prototype the function call and use it from RPG IV.  It is not as 
transparent as the C version but it works.  Here is an excerpt from my 
version of errno.h for RPG IV.  Note that you only need to address the 
errno variable once in the program so put the
                       EVAL      @errno = getErrno
in the *INZSR and then errno is always available.

 *************************************************************************
 * Definition of errno :  Slightly different from C language invocation  *
 *                        due to language semantics.  Invoke like:       *
 * CL0N01Factor1+++++++Opcode&ExtExtended-factor2+++++++++++++++++++++++ *
 *                     EVAL      @errno = getErrno                       *
 * and then test like:                                                   *
 *                     IF        errno = $EWOULDBLOCK                    *
 *                        do something about it                          *
 *                     ENDIF                                             *
 *************************************************************************
 
 * Error number returned 
D errno           S                   LIKE(int_t) BASED(@errno) 
D @errno          S               * 
 
D getErrno        PR              *   Extproc('__errno') 
 /endif 

Regards,
Simon Coulter.

«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
«» FlyByNight Software         AS/400 Technical Specialists       «»
«» Eclipse the competition - run your business on an IBM AS/400.  «»
«»                                                                «»
«» Phone: +61 3 9419 0175   Mobile: +61 0411 091 400        /"\   «»
«» Fax:   +61 3 9419 0175   mailto: shc@flybynight.com.au   \ /   «»
«»                                                           X    «»
«»               ASCII Ribbon campaign against HTML E-Mail  / \   «»
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»




+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.