/*
conf.c -- configuration code
Copyright (C) 1998 Robert van der Meulen
- 1998-2002 Ivo Timmermans <itimmermans@bigfoot.com>
- 2000-2002 Guus Sliepen <guus@sliepen.warande.net>
+ 1998-2002 Ivo Timmermans <ivo@o2w.nl>
+ 2000-2002 Guus Sliepen <guus@sliepen.eu.org>
2000 Cris van Pelt <tribbel@arise.dhs.org>
This program is free software; you can redistribute it and/or modify
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: conf.c,v 1.9.4.56 2002/06/08 12:57:09 guus Exp $
+ $Id: conf.c,v 1.9.4.58 2002/09/09 19:39:55 guus Exp $
*/
#include "config.h"
void init_configuration(avl_tree_t **config_tree)
{
-cp
+ cp();
*config_tree = avl_alloc_tree((avl_compare_t)config_compare, (avl_action_t)free_config);
-cp
+ cp();
}
void exit_configuration(avl_tree_t **config_tree)
{
-cp
+ cp();
avl_delete_tree(*config_tree);
*config_tree = NULL;
-cp
+ cp();
}
config_t *new_config(void)
{
config_t *cfg;
-cp
+ cp();
cfg = (config_t *)xmalloc_and_zero(sizeof(*cfg));
return cfg;
void free_config(config_t *cfg)
{
-cp
+ cp();
if(cfg->variable)
free(cfg->variable);
if(cfg->value)
if(cfg->file)
free(cfg->file);
free(cfg);
-cp
+ cp();
}
void config_add(avl_tree_t *config_tree, config_t *cfg)
{
-cp
+ cp();
avl_insert(config_tree, cfg);
-cp
+ cp();
}
config_t *lookup_config(avl_tree_t *config_tree, char *variable)
{
config_t cfg, *found;
-cp
+ cp();
cfg.variable = variable;
cfg.file = "";
cfg.line = 0;
{
avl_node_t *node;
config_t *found;
-cp
+ cp();
node = avl_search_node(config_tree, cfg);
if(node)
int get_config_bool(config_t *cfg, int *result)
{
-cp
+ cp();
if(!cfg)
return 0;
int get_config_int(config_t *cfg, int *result)
{
-cp
+ cp();
if(!cfg)
return 0;
int get_config_string(config_t *cfg, char **result)
{
-cp
+ cp();
if(!cfg)
return 0;
int get_config_address(config_t *cfg, struct addrinfo **result)
{
struct addrinfo *ai;
-cp
+ cp();
if(!cfg)
return 0;
int get_config_port(config_t *cfg, port_t *result)
{
-cp
+ cp();
if(!cfg)
return 0;
int get_config_subnet(config_t *cfg, subnet_t **result)
{
subnet_t *subnet;
-cp
+ cp();
if(!cfg)
return 0;
if(feof(fp))
return NULL;
- if((buf != NULL) && (buflen != NULL))
+ if(buf && buflen)
{
size = *buflen;
line = *buf;
{
errno = 0;
p = fgets(idx, maxlen, fp);
- if(p == NULL) /* EOF or error */
+ if(!p) /* EOF or error */
{
if(feof(fp))
break;
}
newline = strchr(p, '\n');
- if(newline == NULL)
+ if(!newline)
/* We haven't yet read everything to the end of the line */
{
newsize = size << 1;
}
}
- if((buf != NULL) && (buflen != NULL))
+ if(buf && buflen)
{
*buflen = size;
*buf = line;
config_t *cfg;
size_t bufsize;
-cp
- if((fp = fopen (fname, "r")) == NULL)
+ cp();
+ fp = fopen (fname, "r");
+
+ if(!fp)
{
syslog(LOG_ERR, _("Cannot open config file %s: %s"), fname, strerror(errno));
return -3;
for(;;)
{
- if((line = readline(fp, &buffer, &bufsize)) == NULL)
+ line = readline(fp, &buffer, &bufsize);
+
+ if(!line)
{
err = -1;
break;
lineno++;
- if((variable = strtok(line, "\t =")) == NULL)
+ variable = strtok(line, "\t =");
+
+ if(!variable)
continue; /* no tokens on this line */
if(variable[0] == '#')
if(!ignore)
{
- if(((value = strtok(NULL, "\t\n\r =")) == NULL) || value[0] == '#')
+ value = strtok(NULL, "\t\n\r =");
+
+ if(!value || value[0] == '#')
{
syslog(LOG_ERR, _("No value for variable `%s' on line %d while reading config file %s"),
variable, lineno, fname);
free(buffer);
fclose (fp);
-cp
+ cp();
return err;
}
{
char *fname;
int x;
-cp
+ cp();
asprintf(&fname, "%s/tinc.conf", confbase);
x = read_config_file(config_tree, fname);
if(x == -1) /* System error: complain */
syslog(LOG_ERR, _("Failed to read `%s': %s"), fname, strerror(errno));
}
free(fname);
-cp
+ cp();
return x;
}
what, filename);
fflush(stdout);
- if((fn = readline(stdin, NULL, NULL)) == NULL)
+ fn = readline(stdin, NULL, NULL);
+
+ if(!fn)
{
fprintf(stderr, _("Error while reading stdin: %s\n"), strerror(errno));
return NULL;
}
- if(strlen(fn) == 0)
+ if(!strlen(fn))
/* User just pressed enter. */
fn = xstrdup(filename);
}
- if((strchr(fn, '/') == NULL) || (fn[0] != '/'))
+ if(!strchr(fn, '/') || fn[0] != '/')
{
/* The directory is a relative path or a filename. */
char *p;
umask(0077); /* Disallow everything for group and other */
/* Open it first to keep the inode busy */
- if((r = fopen(fn, mode)) == NULL)
+
+ r = fopen(fn, mode);
+
+ if(!r)
{
fprintf(stderr, _("Error opening file `%s': %s\n"),
fn, strerror(errno));