|
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 */
|