mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-08-20 04:05:05 +02:00
Minor code cleanups
This commit is contained in:
parent
920a86e849
commit
c8cafc8ebb
@ -589,7 +589,7 @@ cf_lex_init(int is_cli, struct config *c)
|
|||||||
cf_lex_init_kh();
|
cf_lex_init_kh();
|
||||||
|
|
||||||
ifs_head = ifs = push_ifs(NULL);
|
ifs_head = ifs = push_ifs(NULL);
|
||||||
if (!is_cli)
|
if (!is_cli)
|
||||||
{
|
{
|
||||||
ifs->file_name = c->file_name;
|
ifs->file_name = c->file_name;
|
||||||
ifs->fd = c->file_fd;
|
ifs->fd = c->file_fd;
|
||||||
|
@ -85,7 +85,7 @@ int undo_available; /* Undo was not requested from last reconfiguration */
|
|||||||
* further use. Returns a pointer to the structure.
|
* further use. Returns a pointer to the structure.
|
||||||
*/
|
*/
|
||||||
struct config *
|
struct config *
|
||||||
config_alloc(byte *name)
|
config_alloc(const byte *name)
|
||||||
{
|
{
|
||||||
pool *p = rp_new(&root_pool, "Config");
|
pool *p = rp_new(&root_pool, "Config");
|
||||||
linpool *l = lp_new(p, 4080);
|
linpool *l = lp_new(p, 4080);
|
||||||
@ -405,7 +405,7 @@ config_confirm(void)
|
|||||||
* if it's been queued due to another reconfiguration being in progress now,
|
* if it's been queued due to another reconfiguration being in progress now,
|
||||||
* %CONF_UNQUEUED if a scheduled reconfiguration is removed, %CONF_NOTHING
|
* %CONF_UNQUEUED if a scheduled reconfiguration is removed, %CONF_NOTHING
|
||||||
* if there is no relevant configuration to undo (the previous config request
|
* if there is no relevant configuration to undo (the previous config request
|
||||||
* was config_undo() too) or %CONF_SHUTDOWN if BIRD is in shutdown mode and
|
* was config_undo() too) or %CONF_SHUTDOWN if BIRD is in shutdown mode and
|
||||||
* no new configuration changes are accepted.
|
* no new configuration changes are accepted.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
@ -530,7 +530,7 @@ cf_error(char *msg, ...)
|
|||||||
* and we want to preserve it for further use.
|
* and we want to preserve it for further use.
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
cfg_strdup(char *c)
|
cfg_strdup(const char *c)
|
||||||
{
|
{
|
||||||
int l = strlen(c) + 1;
|
int l = strlen(c) + 1;
|
||||||
char *z = cfg_allocu(l);
|
char *z = cfg_allocu(l);
|
||||||
|
@ -21,7 +21,7 @@ struct config {
|
|||||||
list protos; /* Configured protocol instances (struct proto_config) */
|
list protos; /* Configured protocol instances (struct proto_config) */
|
||||||
list tables; /* Configured routing tables (struct rtable_config) */
|
list tables; /* Configured routing tables (struct rtable_config) */
|
||||||
list roa_tables; /* Configured ROA tables (struct roa_table_config) */
|
list roa_tables; /* Configured ROA tables (struct roa_table_config) */
|
||||||
list logfiles; /* Configured log fils (sysdep) */
|
list logfiles; /* Configured log files (sysdep) */
|
||||||
|
|
||||||
int mrtdump_file; /* Configured MRTDump file (sysdep, fd in unix) */
|
int mrtdump_file; /* Configured MRTDump file (sysdep, fd in unix) */
|
||||||
char *syslog_name; /* Name used for syslog (NULL -> no syslog) */
|
char *syslog_name; /* Name used for syslog (NULL -> no syslog) */
|
||||||
@ -61,7 +61,7 @@ struct config {
|
|||||||
extern struct config *config; /* Currently active configuration */
|
extern struct config *config; /* Currently active configuration */
|
||||||
extern struct config *new_config; /* Configuration being parsed */
|
extern struct config *new_config; /* Configuration being parsed */
|
||||||
|
|
||||||
struct config *config_alloc(byte *name);
|
struct config *config_alloc(const byte *name);
|
||||||
int config_parse(struct config *);
|
int config_parse(struct config *);
|
||||||
int cli_parse(struct config *);
|
int cli_parse(struct config *);
|
||||||
void config_free(struct config *);
|
void config_free(struct config *);
|
||||||
@ -95,7 +95,7 @@ extern linpool *cfg_mem;
|
|||||||
#define cfg_alloc(size) lp_alloc(cfg_mem, size)
|
#define cfg_alloc(size) lp_alloc(cfg_mem, size)
|
||||||
#define cfg_allocu(size) lp_allocu(cfg_mem, size)
|
#define cfg_allocu(size) lp_allocu(cfg_mem, size)
|
||||||
#define cfg_allocz(size) lp_allocz(cfg_mem, size)
|
#define cfg_allocz(size) lp_allocz(cfg_mem, size)
|
||||||
char *cfg_strdup(char *c);
|
char *cfg_strdup(const char *c);
|
||||||
void cfg_copy_list(list *dest, list *src, unsigned node_size);
|
void cfg_copy_list(list *dest, list *src, unsigned node_size);
|
||||||
|
|
||||||
/* Lexer */
|
/* Lexer */
|
||||||
|
@ -138,7 +138,7 @@ expr_us:
|
|||||||
/* Switches */
|
/* Switches */
|
||||||
|
|
||||||
bool:
|
bool:
|
||||||
expr {$$ = !!$1; }
|
expr { $$ = !!$1; }
|
||||||
| ON { $$ = 1; }
|
| ON { $$ = 1; }
|
||||||
| YES { $$ = 1; }
|
| YES { $$ = 1; }
|
||||||
| OFF { $$ = 0; }
|
| OFF { $$ = 0; }
|
||||||
|
@ -158,7 +158,7 @@ f_new_lc_item(u32 f1, u32 t1, u32 f2, u32 t2, u32 f3, u32 t3)
|
|||||||
|
|
||||||
static inline struct f_inst *
|
static inline struct f_inst *
|
||||||
f_generate_empty(struct f_inst *dyn)
|
f_generate_empty(struct f_inst *dyn)
|
||||||
{
|
{
|
||||||
struct f_inst *e = f_new_inst();
|
struct f_inst *e = f_new_inst();
|
||||||
e->code = 'E';
|
e->code = 'E';
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ f_generate_ec(u16 kind, struct f_inst *tk, struct f_inst *tv)
|
|||||||
|
|
||||||
if (c1 && c2) {
|
if (c1 && c2) {
|
||||||
u64 ec;
|
u64 ec;
|
||||||
|
|
||||||
if (kind == EC_GENERIC) {
|
if (kind == EC_GENERIC) {
|
||||||
ec = ec_generic(key, val2);
|
ec = ec_generic(key, val2);
|
||||||
}
|
}
|
||||||
@ -280,7 +280,7 @@ f_generate_ec(u16 kind, struct f_inst *tk, struct f_inst *tv)
|
|||||||
NEW_F_VAL;
|
NEW_F_VAL;
|
||||||
rv = f_new_inst();
|
rv = f_new_inst();
|
||||||
rv->code = 'C';
|
rv->code = 'C';
|
||||||
rv->a1.p = val;
|
rv->a1.p = val;
|
||||||
val->type = T_EC;
|
val->type = T_EC;
|
||||||
val->val.ec = ec;
|
val->val.ec = ec;
|
||||||
}
|
}
|
||||||
@ -355,7 +355,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, UNSET, RETURN,
|
|||||||
%type <e> pair_item ec_item lc_item set_item switch_item set_items switch_items switch_body
|
%type <e> pair_item ec_item lc_item set_item switch_item set_items switch_items switch_body
|
||||||
%type <trie> fprefix_set
|
%type <trie> fprefix_set
|
||||||
%type <v> set_atom switch_atom fprefix fprefix_s fipa
|
%type <v> set_atom switch_atom fprefix fprefix_s fipa
|
||||||
%type <s> decls declsn one_decl function_params
|
%type <s> decls declsn one_decl function_params
|
||||||
%type <h> bgp_path bgp_path_tail1 bgp_path_tail2
|
%type <h> bgp_path bgp_path_tail1 bgp_path_tail2
|
||||||
|
|
||||||
CF_GRAMMAR
|
CF_GRAMMAR
|
||||||
@ -391,7 +391,7 @@ type:
|
|||||||
| CLIST { $$ = T_CLIST; }
|
| CLIST { $$ = T_CLIST; }
|
||||||
| ECLIST { $$ = T_ECLIST; }
|
| ECLIST { $$ = T_ECLIST; }
|
||||||
| LCLIST { $$ = T_LCLIST; }
|
| LCLIST { $$ = T_LCLIST; }
|
||||||
| type SET {
|
| type SET {
|
||||||
switch ($1) {
|
switch ($1) {
|
||||||
case T_INT:
|
case T_INT:
|
||||||
case T_PAIR:
|
case T_PAIR:
|
||||||
@ -506,7 +506,7 @@ function_def:
|
|||||||
} function_params function_body {
|
} function_params function_body {
|
||||||
$2->def = $5;
|
$2->def = $5;
|
||||||
$2->aux2 = $4;
|
$2->aux2 = $4;
|
||||||
DBG("Hmm, we've got one function here - %s\n", $2->name);
|
DBG("Hmm, we've got one function here - %s\n", $2->name);
|
||||||
cf_pop_scope();
|
cf_pop_scope();
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -652,7 +652,7 @@ fprefix:
|
|||||||
fprefix_s { $$ = $1; }
|
fprefix_s { $$ = $1; }
|
||||||
| fprefix_s '+' { $$ = $1; $$.val.px.len |= LEN_PLUS; }
|
| fprefix_s '+' { $$ = $1; $$.val.px.len |= LEN_PLUS; }
|
||||||
| fprefix_s '-' { $$ = $1; $$.val.px.len |= LEN_MINUS; }
|
| fprefix_s '-' { $$ = $1; $$.val.px.len |= LEN_MINUS; }
|
||||||
| fprefix_s '{' NUM ',' NUM '}' {
|
| fprefix_s '{' NUM ',' NUM '}' {
|
||||||
if (! ((0 <= $3) && ($3 <= $5) && ($5 <= MAX_PREFIX_LENGTH))) cf_error("Invalid prefix pattern range: {%d, %d}.", $3, $5);
|
if (! ((0 <= $3) && ($3 <= $5) && ($5 <= MAX_PREFIX_LENGTH))) cf_error("Invalid prefix pattern range: {%d, %d}.", $3, $5);
|
||||||
$$ = $1; $$.val.px.len |= LEN_RANGE | ($3 << 16) | ($5 << 8);
|
$$ = $1; $$.val.px.len |= LEN_RANGE | ($3 << 16) | ($5 << 8);
|
||||||
}
|
}
|
||||||
@ -671,7 +671,7 @@ switch_body: /* EMPTY */ { $$ = NULL; }
|
|||||||
t->data = $4;
|
t->data = $4;
|
||||||
$$ = f_merge_items($1, $2);
|
$$ = f_merge_items($1, $2);
|
||||||
}
|
}
|
||||||
| switch_body ELSECOL cmds {
|
| switch_body ELSECOL cmds {
|
||||||
struct f_tree *t = f_new_tree();
|
struct f_tree *t = f_new_tree();
|
||||||
t->from.type = t->to.type = T_VOID;
|
t->from.type = t->to.type = T_VOID;
|
||||||
t->right = t;
|
t->right = t;
|
||||||
@ -683,7 +683,7 @@ switch_body: /* EMPTY */ { $$ = NULL; }
|
|||||||
/* CONST '(' expr ')' { $$ = f_new_inst(); $$->code = 'c'; $$->aux = T_INT; $$->a2.i = $3; } */
|
/* CONST '(' expr ')' { $$ = f_new_inst(); $$->code = 'c'; $$->aux = T_INT; $$->a2.i = $3; } */
|
||||||
|
|
||||||
bgp_path_expr:
|
bgp_path_expr:
|
||||||
symbol { $$ = $1; }
|
symbol { $$ = $1; }
|
||||||
| '(' term ')' { $$ = $2; }
|
| '(' term ')' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -836,8 +836,8 @@ term:
|
|||||||
| '-' EMPTY '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_CLIST; }
|
| '-' EMPTY '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_CLIST; }
|
||||||
| '-' '-' EMPTY '-' '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_ECLIST; }
|
| '-' '-' EMPTY '-' '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_ECLIST; }
|
||||||
| '-' '-' '-' EMPTY '-' '-' '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_LCLIST; }
|
| '-' '-' '-' EMPTY '-' '-' '-' { $$ = f_new_inst(); $$->code = 'E'; $$->aux = T_LCLIST; }
|
||||||
| PREPEND '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('A','p'); $$->a1.p = $3; $$->a2.p = $5; }
|
| PREPEND '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('A','p'); $$->a1.p = $3; $$->a2.p = $5; }
|
||||||
| ADD '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'a'; }
|
| ADD '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'a'; }
|
||||||
| DELETE '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'd'; }
|
| DELETE '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'd'; }
|
||||||
| FILTER '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'f'; }
|
| FILTER '(' term ',' term ')' { $$ = f_new_inst(); $$->code = P('C','a'); $$->a1.p = $3; $$->a2.p = $5; $$->aux = 'f'; }
|
||||||
|
|
||||||
@ -892,7 +892,7 @@ print_list: /* EMPTY */ { $$ = NULL; }
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
var_listn: term {
|
var_listn: term {
|
||||||
$$ = f_new_inst();
|
$$ = f_new_inst();
|
||||||
$$->code = 's';
|
$$->code = 's';
|
||||||
$$->a1.p = NULL;
|
$$->a1.p = NULL;
|
||||||
@ -960,7 +960,7 @@ cmd:
|
|||||||
$$ = f_new_inst();
|
$$ = f_new_inst();
|
||||||
$$->code = P('P','S');
|
$$->code = P('P','S');
|
||||||
$$->a1.p = $3;
|
$$->a1.p = $3;
|
||||||
}
|
}
|
||||||
| UNSET '(' rtadot dynamic_attr ')' ';' {
|
| UNSET '(' rtadot dynamic_attr ')' ';' {
|
||||||
$$ = $4;
|
$$ = $4;
|
||||||
$$->aux = EAF_TYPE_UNDEF | EAF_TEMP;
|
$$->aux = EAF_TYPE_UNDEF | EAF_TEMP;
|
||||||
|
@ -35,7 +35,7 @@ struct f_inst { /* Instruction */
|
|||||||
/* Not enough fields in f_inst for three args used by roa_check() */
|
/* Not enough fields in f_inst for three args used by roa_check() */
|
||||||
struct f_inst_roa_check {
|
struct f_inst_roa_check {
|
||||||
struct f_inst i;
|
struct f_inst i;
|
||||||
struct roa_table_config *rtc;
|
struct roa_table_config *rtc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct f_inst3 {
|
struct f_inst3 {
|
||||||
@ -65,7 +65,7 @@ struct f_val {
|
|||||||
uint i;
|
uint i;
|
||||||
u64 ec;
|
u64 ec;
|
||||||
lcomm lc;
|
lcomm lc;
|
||||||
/* ip_addr ip; Folded into prefix */
|
/* ip_addr ip; Folded into prefix */
|
||||||
struct f_prefix px;
|
struct f_prefix px;
|
||||||
char *s;
|
char *s;
|
||||||
struct f_tree *t;
|
struct f_tree *t;
|
||||||
@ -190,16 +190,16 @@ void val_format(struct f_val v, buffer *buf);
|
|||||||
#define T_PREFIX_SET 0x81
|
#define T_PREFIX_SET 0x81
|
||||||
|
|
||||||
|
|
||||||
#define SA_FROM 1
|
#define SA_FROM 1
|
||||||
#define SA_GW 2
|
#define SA_GW 2
|
||||||
#define SA_NET 3
|
#define SA_NET 3
|
||||||
#define SA_PROTO 4
|
#define SA_PROTO 4
|
||||||
#define SA_SOURCE 5
|
#define SA_SOURCE 5
|
||||||
#define SA_SCOPE 6
|
#define SA_SCOPE 6
|
||||||
#define SA_CAST 7
|
#define SA_CAST 7
|
||||||
#define SA_DEST 8
|
#define SA_DEST 8
|
||||||
#define SA_IFNAME 9
|
#define SA_IFNAME 9
|
||||||
#define SA_IFINDEX 10
|
#define SA_IFINDEX 10
|
||||||
|
|
||||||
|
|
||||||
struct f_tree {
|
struct f_tree {
|
||||||
|
@ -63,7 +63,7 @@ tree_compare(const void *p1, const void *p2)
|
|||||||
* build_tree
|
* build_tree
|
||||||
* @from: degenerated tree (linked by @tree->left) to be transformed into form suitable for find_tree()
|
* @from: degenerated tree (linked by @tree->left) to be transformed into form suitable for find_tree()
|
||||||
*
|
*
|
||||||
* Transforms denerated tree into balanced tree.
|
* Transforms degenerated tree into balanced tree.
|
||||||
*/
|
*/
|
||||||
struct f_tree *
|
struct f_tree *
|
||||||
build_tree(struct f_tree *from)
|
build_tree(struct f_tree *from)
|
||||||
@ -162,7 +162,7 @@ void
|
|||||||
tree_format(struct f_tree *t, buffer *buf)
|
tree_format(struct f_tree *t, buffer *buf)
|
||||||
{
|
{
|
||||||
buffer_puts(buf, "[");
|
buffer_puts(buf, "[");
|
||||||
|
|
||||||
tree_node_format(t, buf);
|
tree_node_format(t, buf);
|
||||||
|
|
||||||
if (buf->pos == buf->end)
|
if (buf->pos == buf->end)
|
||||||
@ -171,6 +171,6 @@ tree_format(struct f_tree *t, buffer *buf)
|
|||||||
/* Undo last separator */
|
/* Undo last separator */
|
||||||
if (buf->pos[-1] != '[')
|
if (buf->pos[-1] != '[')
|
||||||
buf->pos -= 2;
|
buf->pos -= 2;
|
||||||
|
|
||||||
buffer_puts(buf, "]");
|
buffer_puts(buf, "]");
|
||||||
}
|
}
|
||||||
|
16
lib/buffer.h
16
lib/buffer.h
@ -1,3 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* BIRD Library -- Generic Buffer Structure
|
||||||
|
*
|
||||||
|
* (c) 2013 Ondrej Zajicek <santiago@crfreenet.org>
|
||||||
|
* (c) 2013 CZ.NIC z.s.p.o.
|
||||||
|
*
|
||||||
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _BIRD_BUFFER_H_
|
||||||
|
#define _BIRD_BUFFER_H_
|
||||||
|
|
||||||
|
#include "lib/resource.h"
|
||||||
|
#include "sysdep/config.h"
|
||||||
|
|
||||||
#define BUFFER(type) struct { type *data; uint used, size; }
|
#define BUFFER(type) struct { type *data; uint used, size; }
|
||||||
|
|
||||||
@ -32,4 +46,4 @@
|
|||||||
|
|
||||||
#define BUFFER_FLUSH(v) ({ (v).used = 0; })
|
#define BUFFER_FLUSH(v) ({ (v).used = 0; })
|
||||||
|
|
||||||
|
#endif /* _BIRD_BUFFER_H_ */
|
||||||
|
11
lib/hash.h
11
lib/hash.h
@ -1,4 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* BIRD Library -- Generic Hash Table
|
||||||
|
*
|
||||||
|
* (c) 2013 Ondrej Zajicek <santiago@crfreenet.org>
|
||||||
|
* (c) 2013 CZ.NIC z.s.p.o.
|
||||||
|
*
|
||||||
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _BIRD_HASH_H_
|
||||||
|
#define _BIRD_HASH_H_
|
||||||
|
|
||||||
#define HASH(type) struct { type **data; uint count, order; }
|
#define HASH(type) struct { type **data; uint count, order; }
|
||||||
#define HASH_TYPE(v) typeof(** (v).data)
|
#define HASH_TYPE(v) typeof(** (v).data)
|
||||||
@ -178,3 +188,4 @@
|
|||||||
|
|
||||||
#define HASH_WALK_FILTER_END } while (0)
|
#define HASH_WALK_FILTER_END } while (0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -678,7 +678,7 @@ link_back(struct ospf_area *oa, struct top_hash_entry *en, struct top_hash_entry
|
|||||||
which may be later used as the next hop. */
|
which may be later used as the next hop. */
|
||||||
|
|
||||||
/* In OSPFv2, en->lb is set here. In OSPFv3, en->lb is just cleared here,
|
/* In OSPFv2, en->lb is set here. In OSPFv3, en->lb is just cleared here,
|
||||||
it is set in process_prefixes() to any global addres in the area */
|
it is set in process_prefixes() to any global address in the area */
|
||||||
|
|
||||||
en->lb = IPA_NONE;
|
en->lb = IPA_NONE;
|
||||||
en->lb_id = 0;
|
en->lb_id = 0;
|
||||||
@ -930,7 +930,7 @@ ospf_rt_sum_tr(struct ospf_area *oa)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Decide about originating or flushing summary LSAs for condended area networks */
|
/* Decide about originating or flushing summary LSAs for condensed area networks */
|
||||||
static int
|
static int
|
||||||
decide_anet_lsa(struct ospf_area *oa, struct area_net *anet, struct ospf_area *anet_oa)
|
decide_anet_lsa(struct ospf_area *oa, struct area_net *anet, struct ospf_area *anet_oa)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
|
#ifndef _BIRD_SYSPRIV_H_
|
||||||
|
#define _BIRD_SYSPRIV_H_
|
||||||
|
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
|
|
||||||
@ -70,3 +77,5 @@ drop_uid(uid_t uid)
|
|||||||
if (setresuid(uid, uid, uid) < 0)
|
if (setresuid(uid, uid, uid) < 0)
|
||||||
die("setresuid: %m");
|
die("setresuid: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* _BIRD_SYSPRIV_H_ */
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
|
|
||||||
/* Unfortunately, some glibc versions hide parts of RFC 3542 API
|
/* Unfortunately, some glibc versions hide parts of RFC 3542 API
|
||||||
if _GNU_SOURCE is not defined. */
|
if _GNU_SOURCE is not defined. */
|
||||||
#define _GNU_SOURCE 1
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -2046,6 +2048,7 @@ watchdog_stop(void)
|
|||||||
|
|
||||||
volatile int async_config_flag; /* Asynchronous reconfiguration/dump scheduled */
|
volatile int async_config_flag; /* Asynchronous reconfiguration/dump scheduled */
|
||||||
volatile int async_dump_flag;
|
volatile int async_dump_flag;
|
||||||
|
volatile int async_shutdown_flag;
|
||||||
|
|
||||||
void
|
void
|
||||||
io_init(void)
|
io_init(void)
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
|
|
||||||
#undef LOCAL_DEBUG
|
#undef LOCAL_DEBUG
|
||||||
|
|
||||||
#define _GNU_SOURCE 1
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user