| /* 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); |
| } |