nghttpx: Android specific hack for special files for logging

Android lacks /dev/stderr, so directly use /proc/self/fd/2 as default
errorlog-file.  Android does not like O_APPEND for /proc/self/fd/1 and
/proc/self/fd/2, so omit the flag for these paths.
This commit is contained in:
Tatsuhiro Tsujikawa 2014-08-17 19:01:51 +09:00
parent a507fc80b6
commit 86dd1519b4
2 changed files with 21 additions and 0 deletions

View File

@ -746,7 +746,12 @@ void fill_default_config()
mod_config()->no_via = false;
mod_config()->accesslog_file = nullptr;
mod_config()->accesslog_syslog = false;
#if defined(__ANDROID__) || defined(ANDROID)
// Android does not have /dev/stderr. Use /proc/self/fd/2 instead.
mod_config()->errorlog_file = strcopy("/proc/self/fd/2");
#else // !__ANDROID__ && ANDROID
mod_config()->errorlog_file = strcopy("/dev/stderr");
#endif // !__ANDROID__ && ANDROID
mod_config()->errorlog_syslog = false;
mod_config()->conf_path = strcopy("/etc/nghttpx/nghttpx.conf");
mod_config()->syslog_facility = LOG_DAEMON;

View File

@ -589,8 +589,24 @@ bool numeric_host(const char *hostname)
int reopen_log_file(const char *path)
{
#if defined(__ANDROID__) || defined(ANDROID)
int fd;
if(strcmp("/proc/self/fd/1", path) == 0 ||
strcmp("/proc/self/fd/2", path) == 0) {
// We will get permission denied error when O_APPEND is used for
// these paths.
fd = open(path, O_WRONLY | O_CREAT | O_CLOEXEC,
S_IRUSR | S_IWUSR | S_IRGRP);
} else {
fd = open(path, O_WRONLY | O_APPEND | O_CREAT | O_CLOEXEC,
S_IRUSR | S_IWUSR | S_IRGRP);
}
#else // !__ANDROID__ && !ANDROID
auto fd = open(path, O_WRONLY | O_APPEND | O_CREAT | O_CLOEXEC,
S_IRUSR | S_IWUSR | S_IRGRP);
#endif // !__ANDROID__ && !ANDROID
if(fd == -1) {
return -1;