1
0
mirror of https://github.com/pevans/erc-c.git synced 2024-11-27 20:51:17 +00:00

Better documentation; log to stdout

This commit is contained in:
Peter Evans 2017-12-06 16:43:30 -06:00
parent 4199637338
commit ffd2550364
3 changed files with 46 additions and 4 deletions

View File

@ -5,7 +5,7 @@
extern void log_write(int, const char *, ...); extern void log_write(int, const char *, ...);
extern void log_close(); extern void log_close();
extern void log_open(); extern void log_open(FILE *);
#define log_critical(...) log_write(0, __VA_ARGS__) #define log_critical(...) log_write(0, __VA_ARGS__)
#define log_error(...) log_write(0, __VA_ARGS__) #define log_error(...) log_write(0, __VA_ARGS__)

View File

@ -4,11 +4,28 @@
#include "log.h" #include "log.h"
/*
* This is the file stream we will write to for our logging. It can be
* any number of things, from a literal file on the filesystem, to
* stdout.
*/
static FILE *log_stream = NULL; static FILE *log_stream = NULL;
/*
* This function will assign the log_stream variable to either a given
* file stream, or if none given, to the default location (which is a
* filename defined by the `LOG_FILENAME` macro).
*/
void void
log_open() log_open(FILE *stream)
{ {
// Oh, you're telling _me_ what the stream is? Neat!
if (stream != NULL) {
log_stream = stream;
return;
}
// Oh, well. I'll just open this dang thing.
log_stream = fopen(LOG_FILENAME, "w"); log_stream = fopen(LOG_FILENAME, "w");
if (log_stream == NULL) { if (log_stream == NULL) {
perror("Couldn't open log file (" LOG_FILENAME ")"); perror("Couldn't open log file (" LOG_FILENAME ")");
@ -16,6 +33,11 @@ log_open()
} }
} }
/*
* Close the file stream we opened (or were given) in `log_open()`.
* Nota bene: if you passed stdout into log_open(), this will actually
* _close_ the stdout stream (!).
*/
void void
log_close() log_close()
{ {
@ -24,6 +46,11 @@ log_close()
} }
} }
/*
* Write to the log stream. This function can accept variable arguments,
* ala `printf()`. There is some support for different log levels, but
* as you may note, we do not use them at present.
*/
void void
log_write(int level, const char *fmt, ...) log_write(int level, const char *fmt, ...)
{ {

View File

@ -3,25 +3,40 @@
#include "log.h" #include "log.h"
/*
* This function will establish the base environment that we want to use
* while we execute.
*/
static void static void
init() init()
{ {
log_open(); // We're literally using stdout in this heavy phase of development.
log_open(stdout);
} }
/*
* And this is the teardown function.
*/
static void static void
finish() finish()
{ {
log_close(); log_close();
} }
/*
* This is what will run when the program begins, if you were new to how
* C works.
*/
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
init(); init();
// When we exit, we want to wrap up a few loose ends. // When we exit, we want to wrap up a few loose ends. This syscall
// will ensure that `finish()` runs whether we return from main
// successfully or if we run `exit()` from elsewhere in the program.
atexit(finish); atexit(finish);
// ha ha ha ha #nervous #laughter
printf("Hello, world\n"); printf("Hello, world\n");
} }