Blame jemalloc/include/jemalloc/internal/malloc_io.h

Packit 345191
#ifndef JEMALLOC_INTERNAL_MALLOC_IO_H
Packit 345191
#define JEMALLOC_INTERNAL_MALLOC_IO_H
Packit 345191
Packit 345191
#ifdef _WIN32
Packit 345191
#  ifdef _WIN64
Packit 345191
#    define FMT64_PREFIX "ll"
Packit 345191
#    define FMTPTR_PREFIX "ll"
Packit 345191
#  else
Packit 345191
#    define FMT64_PREFIX "ll"
Packit 345191
#    define FMTPTR_PREFIX ""
Packit 345191
#  endif
Packit 345191
#  define FMTd32 "d"
Packit 345191
#  define FMTu32 "u"
Packit 345191
#  define FMTx32 "x"
Packit 345191
#  define FMTd64 FMT64_PREFIX "d"
Packit 345191
#  define FMTu64 FMT64_PREFIX "u"
Packit 345191
#  define FMTx64 FMT64_PREFIX "x"
Packit 345191
#  define FMTdPTR FMTPTR_PREFIX "d"
Packit 345191
#  define FMTuPTR FMTPTR_PREFIX "u"
Packit 345191
#  define FMTxPTR FMTPTR_PREFIX "x"
Packit 345191
#else
Packit 345191
#  include <inttypes.h>
Packit 345191
#  define FMTd32 PRId32
Packit 345191
#  define FMTu32 PRIu32
Packit 345191
#  define FMTx32 PRIx32
Packit 345191
#  define FMTd64 PRId64
Packit 345191
#  define FMTu64 PRIu64
Packit 345191
#  define FMTx64 PRIx64
Packit 345191
#  define FMTdPTR PRIdPTR
Packit 345191
#  define FMTuPTR PRIuPTR
Packit 345191
#  define FMTxPTR PRIxPTR
Packit 345191
#endif
Packit 345191
Packit 345191
/* Size of stack-allocated buffer passed to buferror(). */
Packit 345191
#define BUFERROR_BUF		64
Packit 345191
Packit 345191
/*
Packit 345191
 * Size of stack-allocated buffer used by malloc_{,v,vc}printf().  This must be
Packit 345191
 * large enough for all possible uses within jemalloc.
Packit 345191
 */
Packit 345191
#define MALLOC_PRINTF_BUFSIZE	4096
Packit 345191
Packit 345191
int buferror(int err, char *buf, size_t buflen);
Packit 345191
uintmax_t malloc_strtoumax(const char *restrict nptr, char **restrict endptr,
Packit 345191
    int base);
Packit 345191
void malloc_write(const char *s);
Packit 345191
Packit 345191
/*
Packit 345191
 * malloc_vsnprintf() supports a subset of snprintf(3) that avoids floating
Packit 345191
 * point math.
Packit 345191
 */
Packit 345191
size_t malloc_vsnprintf(char *str, size_t size, const char *format,
Packit 345191
    va_list ap);
Packit 345191
size_t malloc_snprintf(char *str, size_t size, const char *format, ...)
Packit 345191
    JEMALLOC_FORMAT_PRINTF(3, 4);
Packit 345191
/*
Packit 345191
 * The caller can set write_cb to null to choose to print with the
Packit 345191
 * je_malloc_message hook.
Packit 345191
 */
Packit 345191
void malloc_vcprintf(void (*write_cb)(void *, const char *), void *cbopaque,
Packit 345191
    const char *format, va_list ap);
Packit 345191
void malloc_cprintf(void (*write_cb)(void *, const char *), void *cbopaque,
Packit 345191
    const char *format, ...) JEMALLOC_FORMAT_PRINTF(3, 4);
Packit 345191
void malloc_printf(const char *format, ...) JEMALLOC_FORMAT_PRINTF(1, 2);
Packit 345191
Packit 345191
static inline ssize_t
Packit 345191
malloc_write_fd(int fd, const void *buf, size_t count) {
Packit 345191
#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_write)
Packit 345191
	/*
Packit 345191
	 * Use syscall(2) rather than write(2) when possible in order to avoid
Packit 345191
	 * the possibility of memory allocation within libc.  This is necessary
Packit 345191
	 * on FreeBSD; most operating systems do not have this problem though.
Packit 345191
	 *
Packit 345191
	 * syscall() returns long or int, depending on platform, so capture the
Packit 345191
	 * result in the widest plausible type to avoid compiler warnings.
Packit 345191
	 */
Packit 345191
	long result = syscall(SYS_write, fd, buf, count);
Packit 345191
#else
Packit 345191
	ssize_t result = (ssize_t)write(fd, buf,
Packit 345191
#ifdef _WIN32
Packit 345191
	    (unsigned int)
Packit 345191
#endif
Packit 345191
	    count);
Packit 345191
#endif
Packit 345191
	return (ssize_t)result;
Packit 345191
}
Packit 345191
Packit 345191
static inline ssize_t
Packit 345191
malloc_read_fd(int fd, void *buf, size_t count) {
Packit 345191
#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_read)
Packit 345191
	long result = syscall(SYS_read, fd, buf, count);
Packit 345191
#else
Packit 345191
	ssize_t result = read(fd, buf,
Packit 345191
#ifdef _WIN32
Packit 345191
	    (unsigned int)
Packit 345191
#endif
Packit 345191
	    count);
Packit 345191
#endif
Packit 345191
	return (ssize_t)result;
Packit 345191
}
Packit 345191
Packit 345191
#endif /* JEMALLOC_INTERNAL_MALLOC_IO_H */