/usr/include/xbt/sysdep.h is in libsimgrid-dev 3.11.1-9.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | /* xbt/sysdep.h -- all system dependency */
/* no system header should be loaded out of this file so that we have only */
/* one file to check when porting to another OS */
/* Copyright (c) 2004-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#ifndef _XBT_SYSDEP_H
#define _XBT_SYSDEP_H
#include "xbt/log.h"
#include "xbt/misc.h"
#include "xbt/asserts.h"
#include "simgrid_config.h"
#include <string.h>
#include <stdlib.h>
#include <stdarg.h> /* va_list */
SG_BEGIN_DECL()
/* They live in asserts.h, but need to be declared before this module.
double declaration to cut dependency cycle */
/**
* @addtogroup XBT_error
*
* @{
*/
/** @brief Kill the program in silence */
XBT_PUBLIC(void) xbt_abort(void) _XBT_GNUC_NORETURN;
/**
* @brief Kill the program with an error message
* \param ... a format string and its arguments
*
* Things are so messed up that the only thing to do now, is to stop the
* program.
*
* The message is handled by a CRITICAL logging request, and may consist of a
* format string with arguments.
*/
#define xbt_die(...) \
do { \
XBT_LOG_EXTERNAL_CATEGORY(xbt); \
XBT_CCRITICAL(xbt, __VA_ARGS__); \
xbt_abort(); \
} while (0)
/** @} */
/* these ones live in str.h, but redeclare them here so that we do
not need to load the whole str.h and its heavy dependencies */
#ifndef __USE_GNU /* do not redeclare existing headers */
XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt, /*args */
...) _XBT_GNUC_PRINTF(2, 3);
XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap);
#endif
XBT_PUBLIC(char *) bprintf(const char *fmt, ...) _XBT_GNUC_PRINTF(1, 2);
/** @addtogroup XBT_syscall
* @brief Malloc and associated functions, killing the program on error (with \ref XBT_ex)
*
* @{
*/
#if defined(__GNUC__) || defined(DOXYGEN)
/** @brief Like strdup, but xbt_die() on error */
static inline __attribute__ ((always_inline))
char *xbt_strdup(const char *s)
{
char *res = NULL;
if (s) {
res = strdup(s);
if (!res)
xbt_die("memory allocation error (strdup returned NULL)");
}
return res;
}
XBT_PUBLIC(void) xbt_backtrace_display_current(void);
/** @brief Like malloc, but xbt_die() on error
@hideinitializer */
static inline __attribute__ ((always_inline))
void *xbt_malloc(size_t n)
{
void *res;
/* if (n==0) {
xbt_backtrace_display_current();
xbt_die("malloc(0) is not portable");
}*/
res = malloc(n);
if (!res)
xbt_die("Memory allocation of %lu bytes failed", (unsigned long)n);
return res;
}
/** @brief like malloc, but xbt_die() on error and memset data to 0
@hideinitializer */
static inline __attribute__ ((always_inline))
void *xbt_malloc0(size_t n)
{
void *res;
//if (n==0) xbt_die("calloc(0) is not portable");
res = calloc(n, 1);
if (!res)
xbt_die("Memory callocation of %lu bytes failed", (unsigned long)n);
return res;
}
/** @brief like realloc, but xbt_die() on error
@hideinitializer */
static inline __attribute__ ((always_inline))
void *xbt_realloc(void *p, size_t s)
{
void *res = NULL;
//if (s==0) xbt_die("realloc(0) is not portable");
if (s) {
if (p) {
res = realloc(p, s);
if (!res)
xbt_die("memory (re)allocation of %lu bytes failed", (unsigned long)s);
} else {
res = xbt_malloc(s);
}
} else {
free(p);
}
return res;
}
#else /* non __GNUC__ */
# define xbt_strdup(s) strdup(s)
# define xbt_malloc(n) malloc(n)
# define xbt_malloc0(n) calloc(n,1)
# define xbt_realloc(p,s) realloc(p,s)
#endif /* __GNUC__ ? */
/** @brief like free
@hideinitializer */
#define xbt_free free /*nothing specific to do here. A poor valgrind replacement? */
/** @brief like free, but you can be sure that it is a function */
XBT_PUBLIC(void) xbt_free_f(void *p);
/** @brief should be given a pointer to pointer, and frees the second one */
XBT_PUBLIC(void) xbt_free_ref(void *d);
/** @brief like calloc, but xbt_die() on error and don't memset to 0
@hideinitializer */
#define xbt_new(type, count) ((type*)xbt_malloc (sizeof (type) * (count)))
/** @brief like calloc, but xbt_die() on error
@hideinitializer */
#define xbt_new0(type, count) ((type*)xbt_malloc0 (sizeof (type) * (count)))
/** @} */
SG_END_DECL()
#endif /* _XBT_SYSDEP_H */
|