mnt: use setcwd unconditionally with and w/o clone_newns
This commit is contained in:
commit
04f35c8848
35
logs.cc
35
logs.cc
@ -45,22 +45,30 @@ static bool _log_fd_isatty = true;
|
||||
static enum llevel_t _log_level = INFO;
|
||||
static bool _log_set = false;
|
||||
|
||||
__attribute__((constructor)) static void log_init(void) {
|
||||
_log_fd = fcntl(_log_fd, F_DUPFD_CLOEXEC, 0);
|
||||
static void setDupLogFdOr(int fd, int orfd) {
|
||||
int saved_errno = errno;
|
||||
_log_fd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
|
||||
if (_log_fd == -1) {
|
||||
_log_fd = STDERR_FILENO;
|
||||
_log_fd = fcntl(orfd, F_DUPFD_CLOEXEC, 0);
|
||||
}
|
||||
_log_fd_isatty = isatty(_log_fd);
|
||||
}
|
||||
|
||||
bool logSet() {
|
||||
return _log_set;
|
||||
if (_log_fd == -1) {
|
||||
_log_fd = orfd;
|
||||
}
|
||||
_log_fd_isatty = (isatty(_log_fd) == 1);
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
/*
|
||||
* Log to stderr by default. Use a dup()d fd, because in the future we'll associate the
|
||||
* connection socket with fd (0, 1, 2).
|
||||
*/
|
||||
__attribute__((constructor)) static void log_init(void) {
|
||||
setDupLogFdOr(STDERR_FILENO, STDERR_FILENO);
|
||||
}
|
||||
|
||||
bool logSet() {
|
||||
return _log_set;
|
||||
}
|
||||
|
||||
void logLevel(enum llevel_t ll) {
|
||||
_log_level = ll;
|
||||
@ -71,14 +79,15 @@ void logFile(const std::string& logfile) {
|
||||
/* Close previous log_fd */
|
||||
if (_log_fd > STDERR_FILENO) {
|
||||
close(_log_fd);
|
||||
_log_fd = STDERR_FILENO;
|
||||
}
|
||||
if (TEMP_FAILURE_RETRY(_log_fd = open(logfile.c_str(),
|
||||
O_CREAT | O_RDWR | O_APPEND | O_CLOEXEC, 0640)) == -1) {
|
||||
_log_fd = STDERR_FILENO;
|
||||
int newlogfd = TEMP_FAILURE_RETRY(
|
||||
open(logfile.c_str(), O_CREAT | O_RDWR | O_APPEND | O_CLOEXEC, 0640));
|
||||
setDupLogFdOr(newlogfd, STDERR_FILENO);
|
||||
if (newlogfd == -1) {
|
||||
PLOG_W("Couldn't open logfile open('%s')", logfile.c_str());
|
||||
} else {
|
||||
close(newlogfd);
|
||||
}
|
||||
_log_fd_isatty = (isatty(_log_fd) == 1);
|
||||
}
|
||||
|
||||
void logMsg(enum llevel_t ll, const char* fn, int ln, bool perr, const char* fmt, ...) {
|
||||
|
Loading…
Reference in New Issue
Block a user