hammer/src/platform.h
Nicolas Léveillé 9557448ae6 Introduce {v,}asprintf for windows
We have now again two functions called h_platform_vasprintf and
h_platform_asprintf. On windows they are implemented in terms of vsnprint
and the like. On BSD/GNU libraries we use the supplied vasprintf and
asprintf.
2015-08-16 16:46:52 +02:00

64 lines
1.3 KiB
C

#ifndef HAMMER_PLATFORM__H
#define HAMMER_PLATFORM__H
/**
* @file interface between hammer and the operating system /
* underlying platform.
*/
#include "compiler_specifics.h"
#include <stdarg.h>
#include <stdint.h>
/* String Formatting */
/** see GNU C asprintf */
int h_platform_asprintf(char **strp, const char *fmt, ...);
/** see GNU C vasprintf */
int h_platform_vasprintf(char **strp, const char *fmt, va_list arg);
/* Error Reporting */
/* BSD errx function, seen in err.h */
H_MSVC_DECLSPEC(noreturn) \
void h_platform_errx(int err, const char* format, ...) \
H_GCC_ATTRIBUTE((noreturn, format (printf,2,3)));
/* Time Measurement */
struct HStopWatch; /* forward definition */
/* initialize a stopwatch */
void h_platform_stopwatch_reset(struct HStopWatch* stopwatch);
/* return difference between last reset point and now */
int64_t h_platform_stopwatch_ns(struct HStopWatch* stopwatch);
/* Platform dependent definitions for HStopWatch */
#if defined(_MSC_VER)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
struct HStopWatch {
LARGE_INTEGER qpf;
LARGE_INTEGER start;
};
#else
/* Unix like platforms */
#include <time.h>
struct HStopWatch {
struct timespec start;
};
#endif
#endif