Unix: Refactor tracked files
We need access to resource in order to free it.
This commit is contained in:
parent
d0b4597842
commit
c68ba7d093
3 changed files with 30 additions and 14 deletions
|
@ -41,9 +41,9 @@ syslog_name:
|
||||||
|
|
||||||
log_file:
|
log_file:
|
||||||
text {
|
text {
|
||||||
FILE *f = tracked_fopen(new_config->pool, $1, "a");
|
struct rfile *f = rf_open(new_config->pool, $1, "a");
|
||||||
if (!f) cf_error("Unable to open log file `%s': %m", $1);
|
if (!f) cf_error("Unable to open log file '%s': %m", $1);
|
||||||
$$ = f;
|
$$ = rf_file(f);
|
||||||
}
|
}
|
||||||
| SYSLOG syslog_name { $$ = NULL; new_config->syslog_name = $2; }
|
| SYSLOG syslog_name { $$ = NULL; new_config->syslog_name = $2; }
|
||||||
| STDERR { $$ = stderr; }
|
| STDERR { $$ = stderr; }
|
||||||
|
@ -77,9 +77,9 @@ conf: mrtdump_base ;
|
||||||
mrtdump_base:
|
mrtdump_base:
|
||||||
MRTDUMP PROTOCOLS mrtdump_mask ';' { new_config->proto_default_mrtdump = $3; }
|
MRTDUMP PROTOCOLS mrtdump_mask ';' { new_config->proto_default_mrtdump = $3; }
|
||||||
| MRTDUMP text ';' {
|
| 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);
|
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);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
this to gen small latencies */
|
this to gen small latencies */
|
||||||
#define MAX_RX_STEPS 4
|
#define MAX_RX_STEPS 4
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tracked Files
|
* Tracked Files
|
||||||
*/
|
*/
|
||||||
|
@ -89,17 +90,29 @@ static struct resclass rf_class = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
void *
|
struct rfile *
|
||||||
tracked_fopen(pool *p, char *name, char *mode)
|
rf_open(pool *p, char *name, char *mode)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(name, mode);
|
FILE *f = fopen(name, mode);
|
||||||
|
|
||||||
if (f)
|
if (!f)
|
||||||
{
|
return NULL;
|
||||||
struct rfile *r = ralloc(p, &rf_class);
|
|
||||||
r->f = f;
|
struct rfile *r = ralloc(p, &rf_class);
|
||||||
}
|
r->f = f;
|
||||||
return f;
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
rf_file(struct rfile *f)
|
||||||
|
{
|
||||||
|
return f->f;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
rf_fileno(struct rfile *f)
|
||||||
|
{
|
||||||
|
return fileno(f->f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
struct pool;
|
struct pool;
|
||||||
struct iface;
|
struct iface;
|
||||||
struct birdsock;
|
struct birdsock;
|
||||||
|
struct rfile;
|
||||||
|
|
||||||
/* main.c */
|
/* main.c */
|
||||||
|
|
||||||
|
@ -102,7 +103,9 @@ void io_init(void);
|
||||||
void io_loop(void);
|
void io_loop(void);
|
||||||
void io_log_dump(void);
|
void io_log_dump(void);
|
||||||
int sk_open_unix(struct birdsock *s, char *name);
|
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);
|
void test_old_bird(char *path);
|
||||||
|
|
||||||
/* krt.c bits */
|
/* krt.c bits */
|
||||||
|
|
Loading…
Reference in a new issue