aboutsummaryrefslogtreecommitdiff
path: root/crypto/compat/getprogname_linux.c
diff options
context:
space:
mode:
authorSimone Basso <bassosimone@gmail.com>2019-05-04 09:15:23 +0200
committerSimone Basso <bassosimone@gmail.com>2019-05-04 09:15:23 +0200
commit44082746dbb904a78d3f05b9c37608aefbd24d26 (patch)
treef0d0cc271a30ca51037b409dd2e24e4e89d33a9b /crypto/compat/getprogname_linux.c
parent38c884f205111aaa65c0940a4c805f19821dac02 (diff)
downloadportable-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.c25
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 @@
5const char * 5const char *
6getprogname(void) 6getprogname(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}