Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
On Windows - Stack-based Buffer Overrun Detection (/GS option of Visual C++) seems...
authorcherierm <cherierm@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 20 Jun 2008 12:28:03 +0000 (12:28 +0000)
committercherierm <cherierm@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 20 Jun 2008 12:28:03 +0000 (12:28 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5781 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/log.h
src/xbt/log.c

index 5d6c273..3d7aabc 100644 (file)
@@ -239,7 +239,11 @@ typedef struct xbt_log_category_s s_xbt_log_category_t,*xbt_log_category_t;
 /*
  * Do NOT access any members of this structure directly. FIXME: move to private?
  */
+#ifdef WIN32
+#define XBT_LOG_BUFF_SIZE  16384/* Size of the static string in which we build the log string */
+#else
 #define XBT_LOG_BUFF_SIZE 2048 /* Size of the static string in which we build the log string */
+#endif
 struct xbt_log_category_s {
   xbt_log_category_t parent;
   xbt_log_category_t firstChild; 
@@ -260,7 +264,11 @@ struct xbt_log_event_s {
   int lineNum; 
   va_list ap;
   va_list ap_copy; /* need a copy to launch dynamic layouts when the static ones overflowed */
+  #ifdef WIN32
+  char* buffer;
+  #else
   char buffer[XBT_LOG_BUFF_SIZE];
+  #endif
 };
 
 /**
@@ -378,7 +386,15 @@ extern xbt_log_layout_t xbt_log_default_layout;
  * code. 
  * Setting the LogEvent's valist member is done inside _log_logEvent.
  */
-
+#ifdef WIN32
+#define _XBT_LOG_PRE(catv, priority) do {                       \
+     if (_XBT_LOG_ISENABLEDV(catv, priority)) {                  \
+         s_xbt_log_event_t _log_ev =                             \
+             {NULL,priority,__FILE__,_XBT_FUNCTION,__LINE__}; \
+                _log_ev.cat = &(catv);                           \
+                               _log_ev.buffer = (char*) calloc(XBT_LOG_BUFF_SIZE + 1, sizeof(char)); \
+              _xbt_log_event_log(&_log_ev
+#else
 #define _XBT_LOG_PRE(catv, priority) do {                       \
      if (_XBT_LOG_ISENABLEDV(catv, priority)) {                  \
          s_xbt_log_event_t _log_ev =                             \
@@ -386,6 +402,7 @@ extern xbt_log_layout_t xbt_log_default_layout;
                 _log_ev.cat = &(catv);                           \
               _xbt_log_event_log(&_log_ev                       \
               
+#endif
 
 #define _XBT_LOG_POST                          \
                         );                      \
index e80361a..54a1691 100644 (file)
@@ -445,7 +445,7 @@ welcome here, too.
 
 *//*'*/
 
-\f
+
 xbt_log_appender_t xbt_log_default_appender = NULL; /* set in log_init */
 xbt_log_layout_t xbt_log_default_layout = NULL; /* set in log_init */
 int _log_usable = 0;
@@ -597,6 +597,10 @@ void _xbt_log_event_log( xbt_log_event_t ev, const char *fmt, ...) {
   } 
   va_end(ev->ap);
   va_end(ev->ap_copy);
+       
+  #ifdef WIN32
+  free(ev->buffer);
+  #endif
 }
 
 static void _xbt_log_cat_apply_set(xbt_log_category_t category,
@@ -655,6 +659,7 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category,
                         (setting->additivity?"on":"off"));
     }
   }
+
 }
 /*
  * This gets called the first time a category is referenced and performs the