ROKEN_LIB_FUNCTION unsigned long ROKEN_LIB_CALL
rk_getauxval(unsigned long type)
{
-#ifdef HAVE_GETAUXVAL
-#ifdef GETAUXVAL_SETS_ERRNO
+#if defined(HAVE_GETAUXVAL) && defined(GETAUXVAL_SETS_ERRNO)
if (rk_injected_auxv)
return rk_getprocauxval(type);
return getauxval(type);
#else
+ const auxv_t *a;
unsigned long ret;
unsigned long ret2;
static int getauxval_sets_errno = -1;
return ret;
}
- if (getauxval_sets_errno == 0) {
- const auxv_t *a;
-
- errno = save_errno;
- a = rk_getauxv(type);
- if (a == NULL) {
- errno = ENOENT;
- return 0;
- }
- return a->a_un.a_val;
- }
+ if (getauxval_sets_errno == 0)
+ goto out;
/*
* We've called getauxval() and it returned 0, but we don't know if
* Attempt to detect whether getauxval() sets errno = ENOENT by
* calling it with what should be a bogus type.
*/
-
errno = 0;
ret2 = getauxval(~type);
if (ret2 == 0 && errno == ENOENT) {
errno = save_errno;
return ret;
}
-
getauxval_sets_errno = 0;
- errno = save_errno;
-#endif
-#else
- const auxv_t *a;
- if ((a = rk_getauxv(type)) == NULL) {
- errno = ENOENT;
- return 0;
+ out:
+ errno = save_errno;
+ a = rk_getauxv(type);
+ if (a == NULL) {
+ errno = ENOENT;
+ return 0;
}
return a->a_un.a_val;
#endif