X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1c874ce0965690e44734ddf63afa1f106a24f7ce..545c6d9ee21cbe3cdc036cfd98af411bd407d301:/src/xbt/xbt_log_layout_simple.c diff --git a/src/xbt/xbt_log_layout_simple.c b/src/xbt/xbt_log_layout_simple.c index 2a84a5d4e0..8aea05be7c 100644 --- a/src/xbt/xbt_log_layout_simple.c +++ b/src/xbt/xbt_log_layout_simple.c @@ -7,6 +7,7 @@ /* 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 "portable.h" /* execinfo when available */ #include "xbt/sysdep.h" #include "xbt/log.h" #include "xbt/synchro.h" /* xbt_thread_name */ @@ -15,11 +16,16 @@ extern const char *xbt_log_priority_names[7]; +/* only used after the format using: we suppose that the buffer is big enough to display our data */ +#define check_overflow \ + if (p-ev->buffer > XBT_LOG_BUFF_SIZE) { /* buffer overflow */ \ + p=ev->buffer + XBT_LOG_BUFF_SIZE - strlen(" >> OUTPUT TRUNCATED <<\n"); \ + p+=sprintf(p," >> OUTPUT TRUNCATED <<\n"); \ + } -static char *xbt_log_layout_simple_doit(xbt_log_layout_t l, - xbt_log_event_t ev, - const char *fmt) { - static char res[1024]; +static void xbt_log_layout_simple_doit(xbt_log_layout_t l, + xbt_log_event_t ev, + const char *fmt) { static double begin_of_time = -1; char *p; @@ -32,32 +38,32 @@ static char *xbt_log_layout_simple_doit(xbt_log_layout_t l, if (begin_of_time<0) begin_of_time=gras_os_time(); - p = res; - p += sprintf(res,"[");; + p = ev->buffer; + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer),"["); + /* Display the proc info if available */ if(strlen(xbt_procname())) - p += sprintf(p,"%s:%s:(%d) ", + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer),"%s:%s:(%d) ", gras_os_myname(), xbt_procname(),(*xbt_getpid)()); /* Display the date */ - p += sprintf(p,"%f] ", gras_os_time()-begin_of_time); - + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer),"%f] ", gras_os_time()-begin_of_time); /* Display file position if not INFO*/ if (ev->priority != xbt_log_priority_info) - p += sprintf(p, "%s:%d: ", ev->fileName, ev->lineNum); + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer), "%s:%d: ", ev->fileName, ev->lineNum); /* Display category name */ - p += sprintf(p, "[%s/%s] ", + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer), "[%s/%s] ", ev->cat->name, xbt_log_priority_names[ev->priority] ); /* Display user-provided message */ - p += vsprintf(p, fmt, ev->ap); - + p += vsnprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer), fmt, ev->ap); + check_overflow; + /* End it */ - p += sprintf(p, "\n"); - - return res; + p += snprintf(p,XBT_LOG_BUFF_SIZE-(p-ev->buffer), "\n"); + check_overflow; } xbt_log_layout_t xbt_log_layout_simple_new(char *arg) {