blob: 8d593e147b9a4b98108b18153a33a0a300621e90 [file] [log] [blame]
/* Copyright (c) 2015 Google Inc
* Davide Libenzi <dlibenzi@google.com>
* See LICENSE for details.
*/
#pragma once
#include <ros/common.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define min(a, b) \
({ __typeof__(a) _a = (a); \
__typeof__(b) _b = (b); \
_a < _b ? _a : _b; })
#define max(a, b) \
({ __typeof__(a) _a = (a); \
__typeof__(b) _b = (b); \
_a > _b ? _a : _b; })
#define always_assert(c) \
do { \
if (!(c)) \
fprintf(stderr, "%s: %d: Assertion failed: " #c "\n", \
__FILE__, __LINE__); \
} while (0)
int xopen(const char *path, int flags, mode_t mode);
void xwrite(int fd, const void *data, size_t size);
void xread(int fd, void *data, size_t size);
void xpwrite(int fd, const void *data, size_t size, off_t off);
void xpread(int fd, void *data, size_t size, off_t off);
FILE *xfopen(const char *path, const char *mode);
FILE *xfdopen(int fd, const char *mode);
off_t xfsize(FILE *file);
void xfwrite(const void *data, size_t size, FILE *file);
void xfseek(FILE *file, off_t offset, int whence);
void *xmalloc(size_t size);
void *xzmalloc(size_t size);
char *xstrdup(const char *str);
const char *vb_decode_uint64(const char *data, uint64_t *pval);
int vb_fdecode_uint64(FILE *file, uint64_t *pval);
uint8_t nibble_to_num(char c);
static inline void cpuid(uint32_t ieax, uint32_t iecx, uint32_t *eaxp,
uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
{
uint32_t eax, ebx, ecx, edx;
asm volatile("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
: "a" (ieax), "c" (iecx));
if (eaxp)
*eaxp = eax;
if (ebxp)
*ebxp = ebx;
if (ecxp)
*ecxp = ecx;
if (edxp)
*edxp = edx;
}
static inline void set_bitno(void *data, size_t bitno)
{
((char *) data)[bitno / 8] |= 1 << (bitno % 8);
}