diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2018-11-13 18:13:11 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2018-11-18 14:03:50 +0100 |
commit | c68ba7d093e1fcf01fceb341438fc5dc95f93ac5 (patch) | |
tree | c823dff2a455da9635a4c669f0a7ea50fd91153a /sysdep | |
parent | d0b4597842ba1f65e5280529fca243ce5b5043fa (diff) |
Unix: Refactor tracked files
We need access to resource in order to free it.
Diffstat (limited to 'sysdep')
-rw-r--r-- | sysdep/unix/config.Y | 10 | ||||
-rw-r--r-- | sysdep/unix/io.c | 29 | ||||
-rw-r--r-- | sysdep/unix/unix.h | 5 |
3 files changed, 30 insertions, 14 deletions
diff --git a/sysdep/unix/config.Y b/sysdep/unix/config.Y index 1bffa322..b8572c90 100644 --- a/sysdep/unix/config.Y +++ b/sysdep/unix/config.Y @@ -41,9 +41,9 @@ syslog_name: log_file: text { - FILE *f = tracked_fopen(new_config->pool, $1, "a"); - if (!f) cf_error("Unable to open log file `%s': %m", $1); - $$ = f; + struct rfile *f = rf_open(new_config->pool, $1, "a"); + if (!f) cf_error("Unable to open log file '%s': %m", $1); + $$ = rf_file(f); } | SYSLOG syslog_name { $$ = NULL; new_config->syslog_name = $2; } | STDERR { $$ = stderr; } @@ -77,9 +77,9 @@ conf: mrtdump_base ; mrtdump_base: MRTDUMP PROTOCOLS mrtdump_mask ';' { new_config->proto_default_mrtdump = $3; } | MRTDUMP text ';' { - FILE *f = tracked_fopen(new_config->pool, $2, "a"); + struct rfile *f = rf_open(new_config->pool, $2, "a"); if (!f) cf_error("Unable to open MRTDump file '%s': %m", $2); - new_config->mrtdump_file = fileno(f); + new_config->mrtdump_file = rf_fileno(f); } ; diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 4455fc19..8c9052a3 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -55,6 +55,7 @@ this to gen small latencies */ #define MAX_RX_STEPS 4 + /* * Tracked Files */ @@ -89,17 +90,29 @@ static struct resclass rf_class = { NULL }; -void * -tracked_fopen(pool *p, char *name, char *mode) +struct rfile * +rf_open(pool *p, char *name, char *mode) { FILE *f = fopen(name, mode); - if (f) - { - struct rfile *r = ralloc(p, &rf_class); - r->f = f; - } - return f; + if (!f) + return NULL; + + struct rfile *r = ralloc(p, &rf_class); + r->f = f; + return r; +} + +void * +rf_file(struct rfile *f) +{ + return f->f; +} + +int +rf_fileno(struct rfile *f) +{ + return fileno(f->f); } diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h index cb12fad8..64b146ee 100644 --- a/sysdep/unix/unix.h +++ b/sysdep/unix/unix.h @@ -14,6 +14,7 @@ struct pool; struct iface; struct birdsock; +struct rfile; /* main.c */ @@ -102,7 +103,9 @@ void io_init(void); void io_loop(void); void io_log_dump(void); int sk_open_unix(struct birdsock *s, char *name); -void *tracked_fopen(struct pool *, char *name, char *mode); +struct rfile *rf_open(struct pool *, char *name, char *mode); +void *rf_file(struct rfile *f); +int rf_fileno(struct rfile *f); void test_old_bird(char *path); /* krt.c bits */ |