int vss_load( char *name, VSS_INFO *vss_info ) { FILE *stream ; int err = VSSERR_NOERROR ; char s[200] ; num_total = 0 ; memset( vss_info, 0, sizeof(VSS_INFO) ) ; stream = fopen( name, "rb" ) ; if ( stream != NULL ) { while ( !feof( stream ) && !err ) { vss_info->line_err++ ; if ( fgets( s, 200, stream ) != NULL ) err = vss_parse( s, vss_info ) ; } fclose( stream ) ; } else err = VSSERR_FILE ; vss_info->err = err ; return( err ) ; }
int VSS_resolver(const char *addr, const char *def_port, vss_resolved_f *func, void *priv, const char **err) { struct addrinfo hints, *res0, *res; struct suckaddr *vsa; char *h; char *adp, *hop; int ret; *err = NULL; h = strdup(addr); AN(h); *err = vss_parse(h, &hop, &adp); if (*err != NULL) { free(h); return (-1); } if (adp != NULL) def_port = adp; memset(&hints, 0, sizeof hints); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; ret = getaddrinfo(hop, def_port, &hints, &res0); free(h); if (ret != 0) { *err = gai_strerror(ret); return (-1); } for (res = res0; res != NULL; res = res->ai_next) { vsa = VSA_Malloc(res->ai_addr, res->ai_addrlen); if (vsa != NULL) { ret = func(priv, vsa); free(vsa); if (ret) break; } } freeaddrinfo(res0); return (ret); }