aboutsummaryrefslogtreecommitdiffstats
path: root/sysdep
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2018-11-13 18:13:11 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2018-11-18 14:03:50 +0100
commitc68ba7d093e1fcf01fceb341438fc5dc95f93ac5 (patch)
treec823dff2a455da9635a4c669f0a7ea50fd91153a /sysdep
parentd0b4597842ba1f65e5280529fca243ce5b5043fa (diff)
downloadbird-c68ba7d093e1fcf01fceb341438fc5dc95f93ac5.tar.gz
Unix: Refactor tracked files
We need access to resource in order to free it.
Diffstat (limited to 'sysdep')
-rw-r--r--sysdep/unix/config.Y10
-rw-r--r--sysdep/unix/io.c29
-rw-r--r--sysdep/unix/unix.h5
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 */