aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2024-02-01 15:18:33 +0100
committerkdx <kikoodx@paranoici.org>2024-02-01 15:20:09 +0100
commit707dee1966323dae169bccf4893c5cc2da0c8107 (patch)
tree49395ac56dce99d41660a74402432ff63ccd9dd7
parentc044ae2b27c63cdea1232aa62b75faca4c35cc6a (diff)
downloadcminus-707dee1966323dae169bccf4893c5cc2da0c8107.tar.gz
handle log stream ownership
-rw-r--r--_.c7
-rw-r--r--_.h7
2 files changed, 10 insertions, 4 deletions
diff --git a/_.c b/_.c
index c7969f3..2a2c7bc 100644
--- a/_.c
+++ b/_.c
@@ -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
diff --git a/_.h b/_.h
index 8804d97..4518377 100644
--- a/_.h
+++ b/_.h
@@ -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__)