X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f3b7e5f4b4d7c87ee3e8827313ec966ea8fc8387..c4c82977e0a105cdf7b04010ddd21bbf15dced4d:/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 577e934c80..657a1ca3ef 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-2020. The SimGrid Team. +/* Copyright (c) 2007-2023. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -12,6 +12,7 @@ #include #include #include +#include static void append_file(const s_xbt_log_appender_t* this_, const char* str) { @@ -25,10 +26,10 @@ static void free_(const s_xbt_log_appender_t* this_) 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); + auto* res = xbt_new0(s_xbt_log_appender_t, 1); + res->do_append = &append_file; + res->free_ = nullptr; + res->data = static_cast(f); return res; } @@ -36,12 +37,11 @@ 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_; - res->data = static_cast(fopen(arg, "w")); - if (res->data == nullptr) - xbt_die("Cannot open file: %s: %s", arg, strerror(errno)); + auto* res = xbt_new0(s_xbt_log_appender_t, 1); + res->do_append = &append_file; + res->free_ = &free_; + res->data = static_cast(fopen(arg, "w")); + xbt_assert(res->data != nullptr, "Cannot open file: %s: %s", arg, strerror(errno)); return res; } @@ -51,7 +51,7 @@ struct xbt_log_append2_file_s { int count; //negative for roll long int limit; }; -typedef struct xbt_log_append2_file_s* xbt_log_append2_file_t; +using xbt_log_append2_file_t = xbt_log_append2_file_s*; static constexpr const char* APPEND2_END_TOKEN = "\n[End of log]\n"; static constexpr const char* APPEND2_END_TOKEN_CLEAR = "\n "; @@ -59,10 +59,9 @@ static constexpr const char* APPEND2_END_TOKEN_CLEAR = "\n "; static void open_append2_file(xbt_log_append2_file_t data){ if(data->count<0) { //Roll - if (!data->file) { + if (not data->file) { data->file= fopen(data->filename, "w"); - if (data->file == nullptr) - xbt_die("Cannot open file: %s: %s", data->filename, strerror(errno)); + xbt_assert(data->file != nullptr, "Cannot open file: %s: %s", data->filename, strerror(errno)); } else { fputs(APPEND2_END_TOKEN_CLEAR,data->file); fseek(data->file,0,SEEK_SET); @@ -71,18 +70,12 @@ static void open_append2_file(xbt_log_append2_file_t data){ //Split if(data->file) fclose(data->file); - char* pre=xbt_strdup(data->filename); - char* sep=strchr(pre,'%'); - if(!sep) - sep=pre+strlen(pre); - const char* post = sep + 1; - *sep = '\0'; - std::string newname = pre + std::to_string(data->count) + post; + std::string newname = data->filename; + size_t sep = std::min(newname.find_first_of('%'), newname.size()); + newname.replace(sep, 1, std::to_string(data->count)); data->count++; data->file = fopen(newname.c_str(), "w"); - if (data->file == nullptr) - xbt_die("Cannot open file: %s: %s", newname.c_str(), strerror(errno)); - xbt_free(pre); + xbt_assert(data->file != nullptr, "Cannot open file: %s: %s", newname.c_str(), strerror(errno)); } } @@ -115,10 +108,10 @@ static void free_append2_(const s_xbt_log_appender_t* this_) //For split, replace % in the file by the current count 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_; - xbt_log_append2_file_t data = xbt_new0(struct xbt_log_append2_file_s, 1); + auto* res = xbt_new0(s_xbt_log_appender_t, 1); + res->do_append = &append2_file; + res->free_ = &free_append2_; + auto* data = xbt_new0(struct xbt_log_append2_file_s, 1); xbt_assert(arg); char* buf=xbt_strdup(arg); char* sep=strchr(buf,':');