Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
ONGOING work on exceptions plus minor cleanups.
[simgrid.git] / include / xbt / sysdep.h
1 /* $Id$ */
2 /*  xbt/sysdep.h -- all system dependency                                   */
3 /*  no system header should be loaded out of this file so that we have only */
4 /*  one file to check when porting to another OS                            */
5
6 /* Copyright (c) 2004 Martin Quinson. All rights reserved.                  */
7
8 /* This program is free software; you can redistribute it and/or modify it
9  * under the terms of the license (GNU LGPL) which comes with this package. */
10
11 #ifndef _XBT_SYSDEP_H
12 #define _XBT_SYSDEP_H
13
14 #include <string.h>
15 #include <stdlib.h> 
16 #include <stdio.h>
17    
18 #include "xbt/misc.h"
19 #include "xbt/error.h"
20   
21 BEGIN_DECL()
22 /** @addtogroup XBT_syscall
23  *  @{
24  */
25
26 #ifdef __GNUC__
27 /** @brief like strdup, but xbt_die() on error */
28 static inline char *xbt_strdup(const char *s) {
29   char *res = NULL;
30   if (s) {
31     res=strdup(s);
32     if (!res) 
33       xbt_die("memory allocation error");
34   } 
35   return res;
36 }
37 /** @brief like malloc, but xbt_die() on error 
38     @hideinitializer */
39 static inline void *xbt_malloc(int n){
40   void *res=malloc(n);
41   if (!res)
42      xbt_die("Memory allocation failed");
43   return res;
44 }
45
46 /** @brief like malloc, but xbt_die() on error and memset data to 0
47     @hideinitializer */
48 static inline void *xbt_malloc0(int n) {
49   void *res=calloc(n,1);
50   if (!res)
51      xbt_die("Memory callocation failed");
52   return res;
53 }
54   
55 /** @brief like realloc, but xbt_die() on error 
56     @hideinitializer */
57 static inline void *xbt_realloc(void*p,int s){
58   void *res=res;
59   if (s) {
60     if (p) {
61       res=realloc(p,s);
62       if (!res) 
63         xbt_die("memory allocation error");
64     } else {
65       res=xbt_malloc(s);
66     }
67   } else {
68     if (p) {
69       free(p);
70     }
71   }
72   return res;
73 }
74 #else /* non __GNUC__  */
75 #  define xbt_strdup(s)    strdup(s)
76 #  define xbt_malloc(n)    malloc(n)
77 #  define xbt_malloc0(n)   calloc(n,1)
78 #  define xbt_realloc(p,s) realloc(p,s)
79 #endif /* __GNUC__ ? */
80
81 /** @brief like free
82     @hideinitializer */
83 #define xbt_free free /*nothing specific to do here. A poor valgrind replacement?*/
84 /*#define xbt_free_fct free * replacement with the guareenty of being a function  FIXME:KILLME*/
85    
86 /** @brief like calloc, but xbt_die() on error and don't memset to 0
87     @hideinitializer */
88 #define xbt_new(type, count)  ((type*)xbt_malloc (sizeof (type) * (count)))
89 /** @brief like calloc, but xbt_die() on error
90     @hideinitializer */
91 #define xbt_new0(type, count) ((type*)xbt_malloc0 (sizeof (type) * (count)))
92
93 /** @} */  
94
95 /* FIXME: better place? */
96 int vasprintf  (char **ptr, const char *fmt, va_list ap);
97 char *bprintf(const char*fmt, ...);
98
99 END_DECL()
100
101 #endif /* _XBT_SYSDEP_H */