/*
- * $Id: config.c,v 1.14 2005-04-28 20:49:46 bfernhomberg Exp $
+ * $Id: config.c,v 1.20 2009-10-29 11:35:58 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#define IFF_SLAVE 0
#endif /* IFF_SLAVE */
-int router(), dontroute(), seed(), phase(), net(), addr(), zone(), noallmulti();
+int router(struct interface *iface, char **av);
+int dontroute(struct interface *iface, char **av);
+int seed(struct interface *iface, char **av);
+int phase(struct interface *iface, char **av);
+int net(struct interface *iface, char **av);
+int addr(struct interface *iface, char **av);
+int zone(struct interface *iface, char **av);
+int noallmulti(struct interface *iface, char **av);
static const struct param {
char *p_name;
- int (*p_func)();
+ int (*p_func)(struct interface *iface, char **av);
} params[] = {
{ "router", router },
{ "dontroute", dontroute },
#define ARGV_CHUNK_SIZE 128
#define MAXLINELEN 2048
-char **parseline(const char *line)
+static char **parseline(const char *line)
{
const char *p;
int argc = 0;
return argv;
}
-void freeline( char **argv )
+static void freeline( char **argv )
{
char **tmp = argv;
}
}
-int writeconf( cf )
- char *cf;
+int writeconf(char *cf)
{
struct stat st;
char *path, *p, newpath[ MAXPATHLEN ], line[ MAXLINELEN ];
&zonename)) ) {
if ( NULL ==
(zonename = strdup(((struct ziptab *)l->l_data)->zt_name))) {
- LOG(log_error, logtype_atalkd, "malloc: %m" );
+ LOG(log_error, logtype_atalkd, "malloc: %s", strerror(errno) );
return( -1 );
}
len = ((struct ziptab *)l->l_data)->zt_len;
* zone for an interface is the first zone encountered for that
* interface.
*/
-int readconf( cf )
- char *cf;
+int readconf(char *cf)
{
struct ifreq ifr;
struct interface *iface, *niface;
return -1;
}
-int noallmulti( iface, av )
- struct interface *iface;
- char **av _U_;
+int noallmulti( struct interface *iface, char **av _U_)
{
/* Linux specific, no effect on other platforms */
iface->i_flags &= !IFACE_ALLMULTI;
}
/*ARGSUSED*/
-int router( iface, av )
- struct interface *iface;
- char **av _U_;
+int router(struct interface *iface, char **av _U_)
{
/* make sure "-router" and "-dontroute" aren't both on the same line. */
if (iface->i_flags & IFACE_DONTROUTE) {
}
/*ARGSUSED*/
-int dontroute( iface, av )
- struct interface *iface;
- char **av _U_;
+int dontroute(struct interface *iface, char **av _U_)
{
/* make sure "-router" and "-dontroute" aren't both on the same line. */
if (iface->i_flags & IFACE_RSEED) {
}
/*ARGSUSED*/
-int seed( iface, av )
- struct interface *iface;
- char **av _U_;
+int seed( struct interface *iface, char **av _U_)
{
/*
* Check to be sure "-seed" is before "-zone". we keep the old
return( 1 );
}
-int phase( iface, av )
- struct interface *iface;
- char **av;
+int phase(struct interface *iface, char **av)
{
int n;
char *pnum;
return( 2 );
}
-int net( iface, av )
- struct interface *iface;
- char **av;
+int net(struct interface *iface, char **av)
{
char *nrange;
char *stop;
return -1;
}
- if (( stop = strchr( nrange, '-' )) != 0 ) {
+ if (( stop = strchr( nrange, '-' )) != NULL ) {
stop++;
}
net = atoi( nrange );
}
if ( iface->i_flags & IFACE_PHASE1 ) {
- if ( stop != 0 ) {
+ if ( stop != NULL ) {
fprintf( stderr, "Phase 1 doesn't use an address range.\n" );
return -1;
}
iface->i_rt->rt_firstnet = iface->i_rt->rt_lastnet = htons( net );
} else if ( iface->i_flags & IFACE_PHASE2 ) {
iface->i_rt->rt_firstnet = htons( net );
- if ( stop != 0 ) {
+ if ( stop != NULL ) {
net = atoi( stop );
if ( net < 0 || net >= 0xffff ) {
fprintf( stderr, "Bad network: %d\n", net );
return( 2 );
}
-int addr( iface, av )
- struct interface *iface;
- char **av;
+int addr(struct interface *iface, char **av)
{
if ( av[ 0 ] == NULL ) {
fprintf( stderr, "No address.\n" );
return( 2 );
}
-int zone( iface, av )
- struct interface *iface;
- char **av;
+int zone(struct interface *iface, char **av)
{
struct ziptab *zt;
char *zname;
}
/* codepage conversion */
- if ((size_t)(-1) == convert_string_allocate(CH_UNIX, CH_MAC, av[0], strlen(av[0]), &zname)) {
+ if ((size_t)(-1) == convert_string_allocate(CH_UNIX, CH_MAC, av[0], -1, &zname)) {
zname = strdup(av[0]);
}
* Get the configuration from the kernel. Only called if there's no
* configuration.
*/
-int getifconf()
+int getifconf(void)
{
struct interface *iface, *niface;
struct ifreq ifr;
* the interface structure and have it updated nicely.
*/
-struct interface *newiface( name )
- const char *name;
+struct interface *newiface( const char *name)
{
struct interface *niface;
}
#ifdef __svr4__
-int plumb()
+int plumb(void)
{
struct interface *iface;
- char device[ MAXPATHLEN + 1], *p;
+ char device[ MAXPATHLEN + 1], *p, *t;
int fd, ppa;
+ int digits = 0;
for ( iface = interfaces; iface != NULL; iface = iface->i_next ) {
if ( strcmp( iface->i_name, LOOPIFACE ) == 0 ) {
strcpy( device, "/dev/" );
strcat( device, iface->i_name );
- if (( p = strpbrk( device, "0123456789" )) == NULL ) {
+ for (t = device; *t != '\0' ; ++t) {
+ if (isdigit(*t) == 0) {
+ p = t + 1;
+ }
+ else {
+ digits++;
+ }
+ }
+
+ if (digits == 0) {
LOG(log_error, logtype_atalkd, "plumb: invalid device: %s", device );
return -1;
}
*p = '\0';
if (( fd = open( device, O_RDWR, 0 )) < 0 ) {
- LOG(log_error, logtype_atalkd, "%s: %m", device );
+ LOG(log_error, logtype_atalkd, "%s: %s", device, strerror(errno) );
return -1;
}
if ( ioctl( fd, I_PUSH, "ddp" ) < 0 ) {
- LOG(log_error, logtype_atalkd, "I_PUSH: %m" );
+ LOG(log_error, logtype_atalkd, "I_PUSH: %s", strerror(errno) );
close(fd);
return -1;
}
if ( ioctl( fd, IF_UNITSEL, ppa ) < 0 ) {
- LOG(log_error, logtype_atalkd, "IF_UNITSEL: %m" );
+ LOG(log_error, logtype_atalkd, "IF_UNITSEL: %s", strerror(errno) );
close(fd);
return -1;
}
}
LOG(log_info, logtype_atalkd, "plumbed %s%d", device, ppa );
+
+ close(fd);
}
return( 0 );