#include "parsesup.h"
#include "nvlists.h"
+static psi_h iter ;
+
static int get_next_inet_entry( int fd, pset_h sconfs,
struct service_config *defaults);
struct service_config *default_config = CNF_DEFAULTS( confp );
line_count = 0;
+ iter = psi_create (sconfs);
for( ;; )
{
if (get_next_inet_entry(fd, sconfs, default_config) == -2)
break;
}
+
+ psi_destroy(iter);
}
static int get_next_inet_entry( int fd, pset_h sconfs,
char *p;
str_h strp;
char *line = next_line(fd);
- struct service_config *scp;
+ struct service_config *scp, *tmp;
unsigned u, i;
const char *func = "get_next_inet_entry";
char *name = NULL, *rpcvers = NULL, *rpcproto = NULL;
SC_SPECIFY( scp, A_SOCKET_TYPE );
SC_SPECIFY( scp, A_WAIT );
- if( ! pset_add(sconfs, scp) )
+ for ( tmp = SCP( psi_start( iter ) ) ; tmp ; tmp = SCP( psi_next(iter)) ){
+ if (EQ(SC_ID(scp), SC_ID(tmp))) {
+ parsemsg(LOG_DEBUG, func, "removing duplicate service %s", SC_NAME(scp));
+ sc_free(scp);
+ scp = NULL;
+ break;
+ }
+ }
+
+ if( scp && ! pset_add(sconfs, scp) )
{
out_of_memory( func );
pset_destroy(args);
}
pset_destroy(args);
- parsemsg( LOG_DEBUG, func, "added service %s", SC_NAME(scp));
+ if (scp) {
+ parsemsg( LOG_DEBUG, func, "added service %s", SC_NAME(scp));
+ }
return 0;
}