diff options
author | kdx <kikoodx@paranoici.org> | 2024-02-01 15:18:33 +0100 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2024-02-01 15:20:09 +0100 |
commit | 707dee1966323dae169bccf4893c5cc2da0c8107 (patch) | |
tree | 49395ac56dce99d41660a74402432ff63ccd9dd7 | |
parent | c044ae2b27c63cdea1232aa62b75faca4c35cc6a (diff) | |
download | cminus-707dee1966323dae169bccf4893c5cc2da0c8107.tar.gz |
handle log stream ownership
-rw-r--r-- | _.c | 7 | ||||
-rw-r--r-- | _.h | 7 |
2 files changed, 10 insertions, 4 deletions
@@ -72,9 +72,14 @@ void *_realloc(void *ptr, size_t size) { __builtin_unreachable(); } -void plogstream(FILE *fp) { +void plogstream(FILE *fp, bool take_ownership) { + static bool owned = false; assert(fp != nullptr); + + if (_cminus_logstream && owned) + fclose(_cminus_logstream); _cminus_logstream = fp; + owned = take_ownership; } // mathematical vectors @@ -71,14 +71,15 @@ void *_realloc(void *ptr, size_t size); // logging extern FILE *_cminus_logstream; -void plogstream(FILE *fp); +void plogstream(FILE *fp, bool take_ownership); #define pgeneric(PREFIX, ...) ({ if (_cminus_logstream == nullptr) \ _cminus_logstream = stderr; \ }), \ - fprintf(stderr, \ + fprintf(_cminus_logstream, \ "\x1b[" PREFIX " %s:%s:%d\x1b[0m \t", \ __FILE_NAME__, __FUNCTION__, __LINE__), \ - fprintf(stderr, __VA_ARGS__), fputc('\n', stderr) + fprintf(_cminus_logstream, __VA_ARGS__), \ + fputc('\n', _cminus_logstream) #define plog(...) pgeneric("94mLOG", __VA_ARGS__) #define perr(...) pgeneric("91mERR", __VA_ARGS__) #define pwrn(...) pgeneric("93mWRN", __VA_ARGS__) |