diff options
author | Brooks Moses <bmoses@google.com> | 2013-12-11 16:58:12 -0800 |
---|---|---|
committer | Brooks Moses <bmoses@google.com> | 2013-12-18 10:52:37 -0800 |
commit | b9ab448f980e296eac21ac65f53783967cc6037b (patch) | |
tree | 7e145e47823b6f960a5b4e47559122b265567d12 /misc | |
parent | f889953b44da50bf8a7824c97d09dbe03fd11b83 (diff) | |
download | glibc-b9ab448f980e296eac21ac65f53783967cc6037b.tar glibc-b9ab448f980e296eac21ac65f53783967cc6037b.tar.gz glibc-b9ab448f980e296eac21ac65f53783967cc6037b.tar.bz2 glibc-b9ab448f980e296eac21ac65f53783967cc6037b.zip |
Add error reporting (via errno) to getauxval().
[BZ 15846] As discussed in the recent thread on my $EXEC_ORIGIN patch
and in BZ 15846, getauxval() presently has no unambiguous way of
reporting an error condition. It currently returns zero on error, but
this may also be a valid result for some auxv entries. As there is no
clear invalid result for all current and future auxv entries, this patch
sets errno (following a suggestion in the BZ entry).
This version of the patch also adds documentation and tests for the
value-not-found conditions in getauxval().
Diffstat (limited to 'misc')
-rw-r--r-- | misc/getauxval.c | 3 | ||||
-rw-r--r-- | misc/sys/auxv.h | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/misc/getauxval.c b/misc/getauxval.c index e0317fd6f9..dd4c8ecab3 100644 --- a/misc/getauxval.c +++ b/misc/getauxval.c @@ -16,6 +16,7 @@ <http://www.gnu.org/licenses/>. */ #include <sys/auxv.h> +#include <errno.h> #include <ldsodefs.h> @@ -32,6 +33,8 @@ __getauxval (unsigned long int type) for (p = GLRO(dl_auxv); p->a_type != AT_NULL; p++) if (p->a_type == type) return p->a_un.a_val; + + __set_errno (ENOENT); return 0; } diff --git a/misc/sys/auxv.h b/misc/sys/auxv.h index a69250bd52..7aec3a04b8 100644 --- a/misc/sys/auxv.h +++ b/misc/sys/auxv.h @@ -27,9 +27,9 @@ __BEGIN_DECLS /* Return the value associated with an Elf*_auxv_t type from the auxv list passed to the program on startup. If TYPE was not present in the auxv - list, returns zero. */ + list, returns zero and sets errno to ENOENT. */ extern unsigned long int getauxval (unsigned long int __type) - __THROW __attribute_const__; + __THROW; __END_DECLS |