This adds an errno_p() function that will return an absolute errno if it
is valid, or zero if it is not. It also simplifies the if statement in
the errno_str() function.
function errno_str:string (err:long) %{ /* pure */
long e = THIS->err;
- if (e < 0 && e > -Maxerrno && errlist[-e])
- strlcpy (THIS->__retvalue, errlist[-e], MAXSTRINGLEN);
- else if (e > 0 && e < Maxerrno && errlist[e])
+ e = (e > 0 ? e : -e);
+ if (e > 0 && e < Maxerrno && errlist[e])
strlcpy (THIS->__retvalue, errlist[e], MAXSTRINGLEN);
%}
+function errno_p:long (err:long) %{ /* pure */
+ long e = THIS->err;
+ e = (e > 0 ? e : -e);
+ if (e > 0 && e < Maxerrno && errlist[e])
+ THIS->__retvalue = e;
+ else
+ THIS->__retvalue = 0;
+%}
+
%{
static long _stp_returnval(struct pt_regs *regs) {
if (regs) {