Skip to content

Commit

Permalink
mx_log: preserve errno
Browse files Browse the repository at this point in the history
  • Loading branch information
mariux committed May 13, 2015
1 parent eabb424 commit 4d9c58c
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions mx_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#define MX_LOG_GET (MX_LOG_NONE-1)

int mx_log_errno = 0;

int mx_log_level_set(int level)
{
static int loglevel = MX_LOG_WARNING;
Expand All @@ -30,23 +32,23 @@ int mx_log_level_set(int level)
return oldloglevel;
}

return -(errno=EINVAL);
return -(mx_log_errno=EINVAL);
}

int mx_log_level_mxlog_to_syslog(int level)
{
level = MX_LOG_MXLOG_TO_SYSLOG(level);

if (level < LOG_EMERG || level > LOG_DEBUG)
return -(errno=EINVAL);
return -(mx_log_errno=EINVAL);

return level;
}

int mx_log_level_syslog_to_mxlog(int level)
{
if (level < LOG_EMERG || level > LOG_DEBUG)
return -(errno=EINVAL);
return -(mx_log_errno=EINVAL);

level = MX_LOG_SYSLOG_TO_MXLOG(level);

Expand All @@ -71,7 +73,7 @@ int mx_log_printf(const char *fmt, ...)
va_end(ap);

if (len == -1)
return -(errno=ENOMEM);
return -(mx_log_errno=ENOMEM);

if (mx_log_print)
return mx_log_print(msg, len);
Expand Down Expand Up @@ -126,7 +128,7 @@ static int log_log(int level, int loglevel, char *file, unsigned long line, cons
prefix = "DEBUG: ";
break;
default:
return -(errno=EINVAL);
return -(mx_log_errno=EINVAL);
}

if (loglevel >= MX_LOG_DEBUG)
Expand All @@ -142,25 +144,32 @@ int mx_log_do(int level, char *file, unsigned long line, const char *func, const
char *msg = NULL;
va_list ap;
int res;
int preserved_errno = errno;

loglevel = mx_log_level_get();

if (level > loglevel)
if (level > loglevel) {
errno = preserved_errno;
return 0;
}

va_start(ap, fmt);
len = vasprintf(&msg, fmt, ap);
va_end(ap);

if (len == -1)
return -(errno=ENOMEM);
if (len == -1) {
errno = preserved_errno;
return -(mx_log_errno=ENOMEM);
}

if (mx_log_log)
res = mx_log_log(level, loglevel, file, line, func, msg);
else
res = log_log(level, loglevel, file, line, func, msg);

mx_free_null(msg);

errno = preserved_errno;
return res;
}

Expand Down

0 comments on commit 4d9c58c

Please sign in to comment.