X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5dd4e01cd9be32abc26c52aa384fc49aa2db591a..bc603041d7ce7e32a2c888e7156e30035368b226:/src/xbt/xbt_log_appender_file.cpp diff --git a/src/xbt/xbt_log_appender_file.cpp b/src/xbt/xbt_log_appender_file.cpp index c0820500de..577e934c80 100644 --- a/src/xbt/xbt_log_appender_file.cpp +++ b/src/xbt/xbt_log_appender_file.cpp @@ -1,6 +1,6 @@ /* file_appender - a dumb log appender which simply prints to a file */ -/* Copyright (c) 2007-2019. The SimGrid Team. +/* Copyright (c) 2007-2020. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -13,27 +13,35 @@ #include #include -static void append_file(xbt_log_appender_t this_, char *str) { +static void append_file(const s_xbt_log_appender_t* this_, const char* str) +{ fputs(str, (FILE *) this_->data); } -static void free_(xbt_log_appender_t this_) { - if (this_->data != stderr) - fclose(static_cast(this_->data)); +static void free_(const s_xbt_log_appender_t* this_) +{ + fclose(static_cast(this_->data)); } -xbt_log_appender_t xbt_log_appender_file_new(char *arg) { +xbt_log_appender_t xbt_log_appender_stream(FILE* f) +{ + xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t, 1); + res->do_append = &append_file; + res->free_ = nullptr; + res->data = static_cast(f); + return res; +} +xbt_log_appender_t xbt_log_appender_file_new(const char* arg) +{ + if (arg == nullptr) + return xbt_log_appender_stream(stderr); xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t, 1); res->do_append = &append_file; res->free_ = &free_; - if (arg) { - res->data = (void *) fopen(arg, "w"); - if (res->data == nullptr) - xbt_die("Cannot open file: %s: %s", arg, strerror(errno)); - } else { - res->data = (void *) stderr; - } + res->data = static_cast(fopen(arg, "w")); + if (res->data == nullptr) + xbt_die("Cannot open file: %s: %s", arg, strerror(errno)); return res; } @@ -63,38 +71,38 @@ static void open_append2_file(xbt_log_append2_file_t data){ //Split if(data->file) fclose(data->file); - char newname[512]; char* pre=xbt_strdup(data->filename); char* sep=strchr(pre,'%'); if(!sep) sep=pre+strlen(pre); - char* post=sep+1; - *sep='\0'; - snprintf(newname,511,"%s%i%s",pre,data->count,post); + const char* post = sep + 1; + *sep = '\0'; + std::string newname = pre + std::to_string(data->count) + post; data->count++; - data->file= fopen(newname, "w"); + data->file = fopen(newname.c_str(), "w"); if (data->file == nullptr) - xbt_die("Cannot open file: %s: %s", newname, strerror(errno)); + xbt_die("Cannot open file: %s: %s", newname.c_str(), strerror(errno)); xbt_free(pre); } } -static void append2_file(xbt_log_appender_t this_, char *str) { - xbt_log_append2_file_t d=(xbt_log_append2_file_t) this_->data; - xbt_assert(d->file); - if(ftell(d->file)>=d->limit) { - open_append2_file(d); - } - fputs(str, d->file); - if(d->count<0){ - fputs(APPEND2_END_TOKEN,d->file); - fseek(d->file,-((signed long)strlen(APPEND2_END_TOKEN)),SEEK_CUR); - } +static void append2_file(const s_xbt_log_appender_t* this_, const char* str) +{ + auto* d = static_cast(this_->data); + xbt_assert(d->file); + if (ftell(d->file) >= d->limit) { + open_append2_file(d); + } + fputs(str, d->file); + if (d->count < 0) { + fputs(APPEND2_END_TOKEN, d->file); + fseek(d->file, -((signed long)strlen(APPEND2_END_TOKEN)), SEEK_CUR); + } } -static void free_append2_(xbt_log_appender_t this_) +static void free_append2_(const s_xbt_log_appender_t* this_) { - xbt_log_append2_file_t data = static_cast(this_->data); + auto* data = static_cast(this_->data); if (data->file) fclose(data->file); xbt_free(data->filename); @@ -105,8 +113,8 @@ static void free_append2_(xbt_log_appender_t this_) //syntax is : //If roll is 0, use split files, otherwise, use roll file //For split, replace % in the file by the current count -xbt_log_appender_t xbt_log_appender2_file_new(char *arg,int roll) { - +xbt_log_appender_t xbt_log_appender2_file_new(const char* arg, int roll) +{ xbt_log_appender_t res = xbt_new0(s_xbt_log_appender_t, 1); res->do_append = &append2_file; res->free_ = &free_append2_;