diff options
author | Simone Basso <bassosimone@gmail.com> | 2019-05-04 09:15:23 +0200 |
---|---|---|
committer | Simone Basso <bassosimone@gmail.com> | 2019-05-04 09:15:23 +0200 |
commit | 44082746dbb904a78d3f05b9c37608aefbd24d26 (patch) | |
tree | f0d0cc271a30ca51037b409dd2e24e4e89d33a9b /crypto/compat/getprogname_linux.c | |
parent | 38c884f205111aaa65c0940a4c805f19821dac02 (diff) | |
download | portable-44082746dbb904a78d3f05b9c37608aefbd24d26.tar.gz portable-44082746dbb904a78d3f05b9c37608aefbd24d26.tar.bz2 portable-44082746dbb904a78d3f05b9c37608aefbd24d26.zip |
Fix getprogname_linux.c for Android API < 21
This diff fixes the build of LibreSSL for Android with API < 21 where
the `getprogname` system call was not part of libc.
A comment in the diff itself explains in detail the issue.
Diffstat (limited to '')
-rw-r--r-- | crypto/compat/getprogname_linux.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crypto/compat/getprogname_linux.c b/crypto/compat/getprogname_linux.c index fefe5ea..2c89743 100644 --- a/crypto/compat/getprogname_linux.c +++ b/crypto/compat/getprogname_linux.c | |||
@@ -5,5 +5,30 @@ | |||
5 | const char * | 5 | const char * |
6 | getprogname(void) | 6 | getprogname(void) |
7 | { | 7 | { |
8 | /* | ||
9 | * Android added getprogname with API 21 [0]. We should not end up here | ||
10 | * with APIs bigger than 21. Still write a precise check. | ||
11 | * | ||
12 | * Since Android is using portions of OpenBSD libc, it should have | ||
13 | * a symbol called __progname [1]. | ||
14 | * | ||
15 | * Regarding program_invocation_short_name, it is a GNU libc ext [2] and | ||
16 | * so make it conditional to __GLIBC__ [3]. | ||
17 | * | ||
18 | * .. [0] https://github.com/aosp-mirror/platform_bionic/blob/1eb6d3/libc/include/stdlib.h#L160 | ||
19 | * | ||
20 | * .. [1] https://github.com/aosp-mirror/platform_bionic/commit/692207 | ||
21 | * | ||
22 | * .. [2] https://linux.die.net/man/3/program_invocation_short_name | ||
23 | * | ||
24 | * .. [3] https://android.googlesource.com/platform/system/core/+/2819c0/base/logging.cpp#65 | ||
25 | */ | ||
26 | #if defined(__ANDROID_API__) && __ANDROID_API__ < 21 | ||
27 | extern const char *__progname; | ||
28 | return __progname; | ||
29 | #elif defined(__GLIBC__) | ||
8 | return program_invocation_short_name; | 30 | return program_invocation_short_name; |
31 | #else | ||
32 | #error "Cannot emulate getprogname" | ||
33 | #endif | ||
9 | } | 34 | } |