mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 14:26:30 -04:00
move snprintf and vsnprintf to evutil to support windows
svn:r874
This commit is contained in:
parent
fb0b274e97
commit
8f39908fd2
29
evutil.c
29
evutil.c
@ -52,6 +52,7 @@
|
||||
#if defined WIN32 && !defined(HAVE_GETTIMEOFDAY_H)
|
||||
#include <sys/timeb.h>
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "evutil.h"
|
||||
#include "log.h"
|
||||
@ -214,3 +215,31 @@ evutil_gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
|
||||
{
|
||||
int r;
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
r = evutil_vsnprintf(buf, buflen, format, ap);
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
|
||||
int
|
||||
evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
int r = _vsnprintf(buf, buflen, format, ap);
|
||||
buf[buflen-1] = '\0';
|
||||
if (r >= 0)
|
||||
return r;
|
||||
else
|
||||
return _vscprintf(format, ap);
|
||||
#else
|
||||
int r = vsnprintf(buf, buflen, format, ap);
|
||||
buf[buflen-1] = '\0';
|
||||
return r;
|
||||
#endif
|
||||
}
|
||||
|
7
evutil.h
7
evutil.h
@ -170,6 +170,13 @@ ev_int64_t evutil_strtoll(const char *s, char **endptr, int base);
|
||||
int evutil_gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||
#endif
|
||||
|
||||
int evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((format(printf, 3, 4)))
|
||||
#endif
|
||||
;
|
||||
int evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
34
log.c
34
log.c
@ -60,42 +60,12 @@
|
||||
#include "event.h"
|
||||
|
||||
#include "log.h"
|
||||
#include "evutil.h"
|
||||
|
||||
static void _warn_helper(int severity, int log_errno, const char *fmt,
|
||||
va_list ap);
|
||||
static void event_log(int severity, const char *msg);
|
||||
|
||||
static int
|
||||
event_vsnprintf(char *str, size_t size, const char *format, va_list args)
|
||||
{
|
||||
int r;
|
||||
if (size == 0)
|
||||
return -1;
|
||||
#ifdef WIN32
|
||||
r = _vsnprintf(str, size, format, args);
|
||||
#else
|
||||
r = vsnprintf(str, size, format, args);
|
||||
#endif
|
||||
str[size-1] = '\0';
|
||||
if (r < 0 || ((size_t)r) >= size) {
|
||||
/* different platforms behave differently on overflow;
|
||||
* handle both kinds. */
|
||||
return -1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static int
|
||||
event_snprintf(char *str, size_t size, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int r;
|
||||
va_start(ap, format);
|
||||
r = event_vsnprintf(str, size, format, ap);
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
|
||||
void
|
||||
event_err(int eval, const char *fmt, ...)
|
||||
{
|
||||
@ -172,7 +142,7 @@ _warn_helper(int severity, int log_errno, const char *fmt, va_list ap)
|
||||
if (log_errno >= 0) {
|
||||
len = strlen(buf);
|
||||
if (len < sizeof(buf) - 3) {
|
||||
event_snprintf(buf + len, sizeof(buf) - len, ": %s",
|
||||
evutil_snprintf(buf + len, sizeof(buf) - len, ": %s",
|
||||
strerror(log_errno));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user