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 | |
| 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.
| -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 | } |
