Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a layer over the system headers to simplify portability
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 14 Sep 2004 09:58:23 +0000 (09:58 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 14 Sep 2004 09:58:23 +0000 (09:58 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@415 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/sysdep.h [new file with mode: 0644]
src/xbt/sysdep.c [new file with mode: 0644]

diff --git a/include/xbt/sysdep.h b/include/xbt/sysdep.h
new file mode 100644 (file)
index 0000000..2d7c63c
--- /dev/null
@@ -0,0 +1,64 @@
+/* $Id$ */
+
+/* gras/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                            */
+
+/* Authors: Martin Quinson                                                  */
+/* Copyright (C) 2004 the OURAGAN project.                                  */
+
+/* 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 _GRAS_SYSDEP_H
+#define _GRAS_SYSDEP_H
+
+#include <string.h> /* Included directly for speed */
+
+#include <time.h> /* FIXME: remove */
+#include <unistd.h> /* FIXME: remove */
+
+#ifdef  __cplusplus
+extern "C" 
+#endif
+
+void* gras_malloc  (long int bytes);
+void* gras_malloc0 (long int bytes);
+void* gras_realloc (void  *memory, long int bytes);
+void  gras_free    (void  *memory);
+
+#define gras_new(type, count)  ((type*)gras_malloc (sizeof (type) * (count)))
+#define gras_new0(type, count) ((type*)gras_malloc0 (sizeof (type) * (count)))
+
+#if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+#define _GRAS_GNUC_PRINTF( format_idx, arg_idx )    \
+          __attribute__((__format__ (__printf__, format_idx, arg_idx)))
+#define _GRAS_GNUC_SCANF( format_idx, arg_idx )     \
+              __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
+#define _GRAS_GNUC_FORMAT( arg_idx )                \
+                  __attribute__((__format_arg__ (arg_idx)))
+#define _GRAS_GNUC_NORETURN                         \
+     __attribute__((__noreturn__))
+#else   /* !__GNUC__ */
+#define _GRAS_GNUC_PRINTF( format_idx, arg_idx )
+#define _GRAS_GNUC_SCANF( format_idx, arg_idx )
+#define _GRAS_GNUC_FORMAT( arg_idx )
+#define _GRAS_GNUC_NORETURN
+#endif  /* !__GNUC__ */
+
+void gras_abort(void) _GRAS_GNUC_NORETURN;
+
+/* FIXME: This is a very good candidate to rewrite (along with a proper string stuff) 
+   but I'm too lazy right now, so copy the definition */
+long int strtol(const char *nptr, char **endptr, int base);
+double strtod(const char *nptr, char **endptr);
+int atoi(const char *nptr);
+
+
+   
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* _GRAS_SYSDEP_H */
diff --git a/src/xbt/sysdep.c b/src/xbt/sysdep.c
new file mode 100644 (file)
index 0000000..2ac0871
--- /dev/null
@@ -0,0 +1,51 @@
+/* $Id$ */
+
+/* gras/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                            */
+
+/* Authors: Martin Quinson                                                  */
+/* Copyright (C) 2004 the OURAGAN project.                                  */
+
+/* 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. */
+
+#include "gras_private.h"
+
+#include <stdlib.h>
+
+GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(sysdep, gros, "System dependency");
+
+/****
+ **** Memory management
+ ****/
+
+void* gras_malloc  (long int bytes) {
+   return bytes == 0 ? NULL : (void*) malloc ((size_t) bytes);
+}
+void* gras_malloc0 (long int bytes) {
+   return bytes == 0 ? NULL : (void*) calloc ((size_t) bytes, 1);
+}
+
+void* gras_realloc (void  *memory, long int bytes) {
+   if (bytes == 0) {
+      gras_free(memory);
+      return NULL;
+   } else {
+      return (void*) realloc (memory, (size_t) bytes);
+   }
+}
+
+void  gras_free (void  *memory) {
+   if (memory) {
+      free (memory);
+   }
+}
+
+/****
+ **** Misc
+ ****/
+
+void gras_abort(void) {
+   abort();
+}