PERFORCE change 79472 for review
soc-bushman
soc-bushman at FreeBSD.org
Sun Jul 3 13:27:16 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=79472
Change 79472 by soc-bushman at soc-bushman_stinger on 2005/07/03 13:26:45
getservent sandbox test is mostly completed. compat source is left for tomorrow
Affected files ...
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservent.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/getservent/getservent.c#2 edit
Differences ...
==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservent.c#4 (text+ko) ====
@@ -719,6 +719,75 @@
/* nis backend implementation - end */
+/* compat backend implementation - begin */
+
+
+int compat_servent(void * retval, void * mdata, va_list ap)
+{
+}
+
+int compat_setservent(void * retval, void * mdata, va_list ap)
+{
+ static const ns_src compatsrc[] = {
+#ifdef YP
+ { NSSRC_NIS, NS_SUCCESS },
+#endif
+ { NULL, 0 }
+ };
+ ns_dtab dtab[] = {
+#ifdef YP
+ { NSSRC_NIS, nis_setservent, NULL },
+#endif
+ { NULL, NULL, NULL }
+ };
+ struct compat_state *st;
+ int rv, stayopen;
+
+/*#define set_setent(x, y) do { \
+ int i; \
+ \
+ for (i = 0; i < (sizeof(x)/sizeof(x[0])) - 1; i++) \
+ x[i].mdata = (void *)y; \
+} while (0)*/
+
+ rv = compat_getstate(&st);
+ if (rv != 0)
+ return (NS_UNAVAIL);
+/* switch ((enum constants)mdata) {
+ case SETGRENT:*/
+ stayopen = va_arg(ap, int);
+ if (st->fp != NULL)
+ rewind(st->fp);
+ else if (stayopen)
+ st->fp = fopen(_PATH_GROUP, "r");
+ set_setent(dtab, mdata);
+ (void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent",
+ compatsrc, 0);
+ break;
+/* case ENDGRENT:
+ if (st->fp != NULL) {
+ fclose(st->fp);
+ st->fp = NULL;
+ }
+ set_setent(dtab, mdata);
+ (void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "endgrent",
+ compatsrc, 0);
+ break;
+ default:
+ break;
+ }
+ st->compat = COMPAT_MODE_OFF;
+ free(st->name);
+ st->name = NULL;*/
+ return (NS_UNAVAIL);
+/* #undef set_setent */
+}
+
+int compat_endservent(void * retval, void * mdata, va_list ap)
+{
+}
+/* compat backend implementation - end */
+
int
my_getservbyname_r(const char * name, const char * proto,
struct servent * serv, char * buffer, size_t bufsize, struct servent ** result)
==== //depot/projects/soc2005/nsswitch_cached/tests/getservent/getservent.c#2 (text+ko) ====
@@ -57,62 +57,111 @@
#include "netdb_private.h"
/* debug part - begin */
+#define TRACE_WANTED 3
+
static int trace_level=0;
+static int trace_level_bk=0;
+#define TRACE_IN(x) __trace_in(#x,__FILE__,__LINE__)
+#define TRACE_POINT() __trace_point(__FILE__,__LINE__)
+#define TRACE_PTR(p) __trace_ptr(#p, p, __FILE__,__LINE__)
+#define TRACE_INT(i) __trace_int(#i, i, __FILE__,__LINE__)
+#define TRACE_STR(s) __trace_str(#s, s, __FILE__,__LINE__)
+#define TRACE_OUT(x) __trace_out(#x,__FILE__,__LINE__)
+#define TRACE_ON() __trace_on()
+#define TRACE_OFF() __trace_off()
+
static void __trace_in(char *s,char *f, int l)
{
int i;
- for (i=0;i<trace_level;++i)
- printf("\t");
+ if (trace_level<TRACE_WANTED)
+ {
+ for (i=0;i<trace_level;++i)
+ printf("\t");
+
+ printf("=> %s\n",s);
+ }
- printf("=> %s\n",s);
++trace_level;
}
static void __trace_point(char *f, int l)
{
int i;
- for (i=0;i<trace_level-1;++i)
- printf("\t");
+
+ if (trace_level<TRACE_WANTED)
+ {
+ for (i=0;i<trace_level-1;++i)
+ printf("\t");
- printf("= %s: %d\n",f,l);
+ printf("= %s: %d\n",f,l);
+ }
}
static void __trace_ptr(char *desc, void *p, char *f, int l)
{
int i;
- for (i=0;i<trace_level-1;++i)
- printf("\t");
+
+ if (trace_level<TRACE_WANTED)
+ {
+ for (i=0;i<trace_level-1;++i)
+ printf("\t");
+
+ printf("= PTR %s: %p, %s: %d\n",desc,p,f,l);
+ }
+}
+
+static void __trace_int(char * desc, int i, char *f, int l)
+{
+ int j;
+
+ if (trace_level<TRACE_WANTED)
+ {
+ for (j=0;i<trace_level-1;++j)
+ printf("\t");
- printf("= PTR %s: %p, %s: %d\n",desc,p,f,l);
+ printf("= INT %s: %i, %s: %d\n",desc,i,f,l);
+ }
}
static void __trace_str(char *desc, char *s, char *f, int l)
{
int i;
- for (i=0;i<trace_level-1;++i)
- printf("\t");
+
+ if (trace_level<TRACE_WANTED)
+ {
+ for (i=0;i<trace_level-1;++i)
+ printf("\t");
- printf("= PTR %s: '%s', %s: %d\n",desc,s,f,l);
+ printf("= PTR %s: '%s', %s: %d\n",desc,s,f,l);
+ }
}
static void __trace_out(char *s,char *f, int l)
{
int i;
- --trace_level;
- for (i=0;i<trace_level;++i)
- printf("\t");
+ --trace_level;
+ if (trace_level<TRACE_WANTED)
+ {
+ for (i=0;i<trace_level;++i)
+ printf("\t");
- printf("<= %s\n",s);
+ printf("<= %s\n",s);
+ }
}
-#define TRACE_IN(x) __trace_in(#x,__FILE__,__LINE__)
-#define TRACE_POINT() __trace_point(__FILE__,__LINE__)
-#define TRACE_PTR(p) __trace_ptr(#p, p, __FILE__,__LINE__);
-#define TRACE_STR(s) __trace_str(#s, s, __FILE__,__LINE__);
-#define TRACE_OUT(x) __trace_out(#x,__FILE__,__LINE__)
+static void __trace_on()
+{
+ trace_level=trace_level_bk;
+ trace_level_bk=0;
+}
+static void __trace_off()
+{
+ trace_level_bk=trace_level;
+ trace_level=1024;
+}
/* debug part - end */
/* nsswitch part - begin */
@@ -138,7 +187,8 @@
static const ns_src defaultsrc[] = {
//{ NSSRC_COMPAT, NS_SUCCESS },
- { NSSRC_FILES, NS_SUCCESS },
+ //{ NSSRC_FILES, NS_SUCCESS },
+ { NSSRC_NIS, NS_SUCCESS },
{ NULL, 0 }
};
@@ -186,15 +236,13 @@
{
FILE *fp;
int stayopen;
-/* char *name;
- enum _compat {
- COMPAT_MODE_OFF = 0,
- COMPAT_MODE_ALL,
- COMPAT_MODE_NAME
- } compat;*/
};
-//static void compat_endstate(void *);
-//NSS_TLS_HANDLING(compat);
+static void compat_endstate(void *);
+NSS_TLS_HANDLING(compat);
+
+static int compat_servent(void *, void *, va_list);
+static int compat_setservent(void *, void *, va_list);
+static int compat_setservent(void *, void *, va_list);
/* nsswitch part - end */
@@ -215,6 +263,7 @@
if (cp != NULL)
*cp = '\0';
serv->s_name = p;
+ TRACE_STR(serv->s_name);
p = strpbrk(p, " \t");
if (p == NULL) {
TRACE_POINT();
@@ -222,6 +271,7 @@
return -1;
}
*p++ = '\0';
+ TRACE_STR(serv->s_name);
while (*p == ' ' || *p == '\t')
p++;
cp = strpbrk(p, ",/");
@@ -237,28 +287,37 @@
TRACE_OUT(servent_unpack);
return -1;
}
+ TRACE_STR(serv->s_name);
serv->s_port = htons((in_port_t)l);
serv->s_proto = cp;
q = serv->s_aliases = aliases;
cp = strpbrk(cp, " \t");
+ TRACE_STR(serv->s_name);
if (cp != NULL)
*cp++ = '\0';
+ TRACE_STR(serv->s_name);
while (cp && *cp) {
if (*cp == ' ' || *cp == '\t') {
cp++;
+ TRACE_STR(serv->s_name);
continue;
}
if (q < &aliases[_MAXALIASES - 1]) {
*q++ = cp;
*q = '\0'; // my hack - should work - but will left the buffer in mess after the ending 0
+ TRACE_STR(serv->s_name);
}
cp = strpbrk(cp, " \t");
if (cp != NULL)
*cp++ = '\0';
+ TRACE_STR(serv->s_name);
}
+ TRACE_STR(serv->s_name);
*q = NULL;
+ TRACE_STR(serv->s_name);
TRACE_POINT();
+ TRACE_STR(serv->s_name);
TRACE_OUT(servent_unpack);
return 0;
}
@@ -390,7 +449,8 @@
TRACE_POINT();
rv=NS_NOTFOUND;
do {
- memset(serv,0,sizeof(*serv));
+ TRACE_PTR(serv);
+ memset(serv,0,sizeof(struct servent));
*aliases='\0';
if ((p = fgets(line,line_size, st->fp)) == NULL) {
@@ -585,6 +645,8 @@
/* files backend implementation - end */
/* nis backend implementation - begin */
+#ifdef YP
+
static void
nis_endstate(void *p)
{
@@ -595,6 +657,194 @@
free(p);
}
+static int
+nis_servent(void * retval, void * mdata, va_list ap)
+{
+ char *resultbuf,*lastkey;
+ int resultbuflen;
+ char buf[YPMAXRECORD + 2];
+
+ struct nis_state * ns;
+ int rv;
+ int stayopen;
+
+ enum nss_lookup_type how;
+ char * name;
+ char * proto;
+ int port;
+
+ struct servent * serv;
+ char * buffer;
+ size_t bufsize;
+ int * errnop;
+
+ char **aliases;
+ char * line;
+ size_t line_size;
+
+ char *p;
+ char **cp;//, **q, *endp;
+// long l;
+
+ TRACE_IN(nis_servent);
+ rv = nis_getstate(&ns);
+ if (rv != 0) {
+ TRACE_OUT(nis_servent);
+ return (NS_UNAVAIL);
+ }
+
+/* aliases=_ALIGN((char **)buffer);
+ line=aliases+sizeof(char *)*_MAXALIASES;
+ if (line>=buffer+buffer_size)
+ return (NS_TRYAGAIN);
+ line_size=buffer+buffer_size-line;
+
+ if (line_size<_MAXLINELEN+1)
+ return (NS_TRYAGAIN);*/
+
+ TRACE_POINT();
+ name = NULL;
+ proto = NULL;
+ how = (enum nss_lookup_type)mdata;
+ switch (how)
+ {
+ case nss_lt_name:
+ name = va_arg(ap, char *);
+ proto = va_arg(ap, char *);
+ stayopen=0;
+ TRACE_POINT();
+ break;
+ case nss_lt_id:
+ port = va_arg(ap, int);
+ proto = va_arg(ap, char *);
+ stayopen=0;
+ TRACE_POINT();
+ break;
+ case nss_lt_all:
+ stayopen=1;
+ TRACE_POINT();
+ break;
+ default:
+ TRACE_OUT(nis_servent);
+ return NS_NOTFOUND;
+ };
+
+ serv = va_arg(ap, struct servent *);
+ buffer = va_arg(ap, char *);
+ bufsize = va_arg(ap, size_t);
+ errnop = va_arg(ap,int *);
+
+ SERVENT_BUFFER_UNPACK(buffer, bufsize,line,line_size,aliases)
+ TRACE_PTR(buffer);
+ TRACE_PTR(line);
+ TRACE_PTR(aliases);
+
+ if (!ns->yp_domain) {
+ if (yp_get_default_domain(&ns->yp_domain)) {
+ TRACE_OUT(nis_servent);
+ return (NS_UNAVAIL);
+ }
+ }
+
+ TRACE_POINT();
+ do {
+ switch (how)
+ {
+ case nss_lt_name:
+ snprintf(buf, sizeof(buf), "%s/%s", name, proto);
+ if (yp_match(ns->yp_domain, "services.byname", buf, strlen(buf), &resultbuf, &resultbuflen)) {
+ TRACE_STR(ns->yp_domain);
+ TRACE_STR(buf);
+ TRACE_POINT();
+ rv = (NS_NOTFOUND);
+ } else {
+ snprintf(line, line_size, "%.*s\n", resultbuflen, resultbuf);
+ rv = (servent_unpack(line,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS);
+ free(resultbuf);
+ }
+ break;
+ case nss_lt_id:
+ snprintf(buf, sizeof(buf), "%d/%s", ntohs(port), proto);
+
+ /*
+ * We have to be a little flexible here. Ideally you're supposed
+ * to have both a services.byname and a services.byport map, but
+ * some systems have only services.byname. FreeBSD cheats a little
+ * by putting the services.byport information in the same map as
+ * services.byname so that either case will work. We allow for both
+ * possibilities here: if there is no services.byport map, we try
+ * services.byname instead.
+ */
+ if ((rv = yp_match(ns->yp_domain, "services.byport", buf, strlen(buf),
+ &resultbuf, &resultbuflen))) {
+ if (rv == YPERR_MAP) {
+ if (yp_match(ns->yp_domain, "services.byname", buf,strlen(buf), &resultbuf, &resultbuflen))
+ rv = (NS_NOTFOUND);
+ else
+ rv = (NS_SUCCESS);
+ } else
+ rv = (NS_NOTFOUND);
+ } else
+ rv = (NS_SUCCESS);
+ /* TODO: eliminate rv = (NS_SUCCESS) from the above fragment - make it
+ look better */
+
+ if (rv == NS_SUCCESS) {
+ snprintf(line, line_size, "%.*s\n", resultbuflen, resultbuf);
+ rv = (servent_unpack(line,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS);
+ free(resultbuf);
+ }
+ break;
+ case nss_lt_all:
+ memset(serv,0,sizeof(*serv));
+ *aliases='\0';
+
+ if (!ns->yp_stepping) {
+ free(ns->yp_key);
+ rv = yp_first(ns->yp_domain, "services.byname", &ns->yp_key,
+ &ns->yp_keylen, &resultbuf, &resultbuflen);
+ if (rv) {
+ ns->yp_stepping = 0;
+ rv = (NS_RETURN);
+ } else
+ rv = (NS_SUCCESS);
+ ns->yp_stepping = 1;
+ } else {
+ lastkey = ns->yp_key;
+ rv = yp_next(ns->yp_domain, "services.byname", ns->yp_key,
+ ns->yp_keylen, &ns->yp_key, &ns->yp_keylen, &resultbuf,
+ &resultbuflen);
+ free(lastkey);
+ if (rv) {
+ ns->yp_stepping = 0;
+ rv = (NS_RETURN);
+ } else
+ rv = (NS_SUCCESS);
+ }
+ /* TODO: same as above - eliminate rv = (NS_SUCCESS). Probably by
+ using labels */
+
+ if (rv == NS_SUCCESS) {
+ snprintf(line, line_size, "%.*s\n", resultbuflen, resultbuf);
+ rv = (servent_unpack(line,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS);
+ free(resultbuf);
+ }
+ break;
+ };
+
+ TRACE_INT(rv);
+ TRACE_INT(!(rv & NS_TERMINATE));
+ } while (!(rv & NS_TERMINATE) && (how==nss_lt_all));
+
+ if (rv==NS_SUCCESS) {
+ *(struct servent **)retval=serv;
+ TRACE_POINT();
+ }
+
+ TRACE_OUT(nis_servent);
+ return rv;
+}
+
static int
nis_getservbyname_r(void * result, void * mdata, va_list ap)
{
@@ -698,8 +948,7 @@
// snprintf(buf, sizeof(buf), "%d/%s", ntohs(sed->yp_port),
// sed->yp_proto);
- snprintf(buf, sizeof(buf), "%d/%s", ntohs(port),
- proto);
+ snprintf(buf, sizeof(buf), "%d/%s", ntohs(port), proto);
// sed->yp_port = 0;
// sed->yp_proto = NULL;
@@ -830,17 +1079,53 @@
return (NS_SUCCESS);
}
+#endif
+
/* nis backend implementation - end */
+/* compat backend implementation - begin */
+static void
+compat_endstate(void *p)
+{
+ TRACE_IN(compat_endstate);
+
+ FILE * f;
+
+ if (p == NULL)
+ return;
+
+ f = ((struct files_state *)p)->fp;
+ if (f != NULL)
+ fclose(f);
+
+ free(p);
+ TRACE_OUT(compat_endstate);
+}
+
+static int
+compat_servent(void * retval, void * mdata, va_list ap)
+{
+}
+
+static int
+compat_setservent(void * retval, void * mdata, va_list ap)
+{
+}
+
+compat_endservent(void * retval, void * mdata, va_list ap)
+{
+}
+/* compat backend implementation - end */
+
int
my_getservbyname_r(const char * name, const char * proto,
struct servent * serv, char * buffer, size_t bufsize, struct servent ** result)
{
static const ns_dtab dtab[] = {
{ NSSRC_FILES, files_servent, (void *)nss_lt_name },
-//#ifdef YP
- //{ NSSRC_NIS, nis_servent, (void *)nss_lt_name },
-//#endif
+#ifdef YP
+ { NSSRC_NIS, nis_servent, (void *)nss_lt_name },
+#endif
// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
{ NULL, NULL, NULL }
};
@@ -869,9 +1154,9 @@
{
static const ns_dtab dtab[] = {
{ NSSRC_FILES, files_servent, (void *)nss_lt_id },
-//#ifdef YP
- // { NSSRC_NIS, nis_servent, (void *)nss_lt_id },
-//#endif
+#ifdef YP
+ { NSSRC_NIS, nis_servent, (void *)nss_lt_id },
+#endif
// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
{ NULL, NULL, NULL }
};
@@ -893,10 +1178,10 @@
struct servent ** result)
{
static const ns_dtab dtab[] = {
- { NSSRC_FILES, files_servent, (void *)nss_lt_id },
-//#ifdef YP
-// { NSSRC_NIS, nis_servent, (void *)nss_lt_id },
-//#endif
+ { NSSRC_FILES, files_servent, (void *)nss_lt_all },
+#ifdef YP
+ { NSSRC_NIS, nis_servent, (void *)nss_lt_all },
+#endif
// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
{ NULL, NULL, NULL }
};
@@ -918,9 +1203,9 @@
{
static const ns_dtab dtab[] = {
{ NSSRC_FILES, files_setservent, NULL },
-//#ifdef YP
-// { NSSRC_NIS, nis_setservent, NULL },
-//#endif
+#ifdef YP
+ { NSSRC_NIS, nis_setservent, NULL },
+#endif
// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
{ NULL, NULL, NULL }
};
@@ -1245,6 +1530,7 @@
}
*/
+static
void result_info(int rv, struct servent * result)
{
if (rv == 0) {
@@ -1269,37 +1555,167 @@
printf("failure: code=%d, detailts='%s\n'",rv,strerror(rv));
}
-void byname_test1_r()
+static
+int result_compare(struct servent * serv1, struct servent * serv2)
+{
+ char **c1, **c2;
+
+ if (serv1 == serv2)
+ return 0;
+
+ if ((serv1 == NULL) || (serv2 == NULL))
+ return -1;
+
+ if ( (strcmp(serv1->s_name,serv2->s_name)!=0) ||
+ (strcmp(serv1->s_proto,serv2->s_proto)!=0) ||
+ (serv1->s_port != serv2->s_port))
+ return -1;
+
+ c1=serv1->s_aliases;
+ c2=serv2->s_aliases;
+ for (;*c1 && *c2; ++c1, ++c2)
+ if (strcmp(*c1,*c2)!=0)
+ return -1;
+
+ if ((*c1!='\0') || (*c2!='\0'))
+ return -1;
+
+ return 0;
+}
+
+static void
+byname_test1_r()
{
char buffer[SERVENT_BUFFER_SIZE];
struct servent serv;
struct servent * result;
- int rv;
+ int rv, i;
+
+ char *s[] = {
+ "ssh",
+ "ftp",
+ "rpc",
+ "http",
+ "https" };
+
+ printf("\ntesting getservbyname_r function\n");
+ for (i=0;i<sizeof s / sizeof(char *); ++i)
+ {
+ struct servent * result2;
+
+ printf("\n%s\n",s[i]);
+ rv=my_getservbyname_r(s[i],"tcp",&serv,buffer,sizeof buffer,&result);
+ result_info(rv,result);
+
+ result2=getservbyname(s[i],"tcp");
+ if (result_compare(result,result2)==0)
+ printf("EQUAL RESULTS\n");
+ else
+ printf("WARNING: DIFFERENT RESULTS\n");
+ }
+}
+
+static void
+byport_test1_r()
+{
+ char buffer[SERVENT_BUFFER_SIZE];
+ struct servent serv;
+ struct servent * result;
+
+ int rv, i;
+
+ int p[] = {
+ 22,
+ 80,
+ 8080,
+ 19,
+ 14 };
+
+ printf("\ntesting getservbyname_r function\n");
+ for (i=0;i<sizeof p / sizeof(int); ++i)
+ {
+ struct servent * result2;
+
+ printf("\n%d\n",p[i]);
+ rv=my_getservbyport_r(p[i],NULL,&serv,buffer,sizeof buffer,&result);
+ result_info(rv,result);
+
+ result2=getservbyport(p[i],NULL);
+ if (result_compare(result,result2)==0)
+ printf("EQUAL RESULTS\n");
+ else
+ printf("WARNING: DIFFERENT RESULTS\n");
+ }
+}
+
+static void
+ent_test1_r()
+{
+ char buffer[SERVENT_BUFFER_SIZE];
+ struct servent serv;
+ struct servent * result;
+
+ int rv, i;
+ struct servent * result2;
- printf("\ntesting getservbyname_r function\n");
+ printf("\ntesting getservent_r function\n");
+ my_setservent(1);
+ setservent(1);
+ do
+ {
+ TRACE_OFF();
+ rv=my_getservent_r(&serv,buffer,sizeof buffer,&result);
+ //result_info(rv,result);
- printf("\n%s\n","ssh");
- rv=my_getservbyname_r("ssh",NULL,&serv,buffer,sizeof buffer,&result);
- result_info(rv,result);
+ result2=getservent();
+ if (result_compare(result,result2)==0)
+ printf(".");
+ else {
+ printf("\nWARNING: DIFFERENT RESULTS\n");
+ break;
+ }
- printf("\n%s\n","ftp");
- rv=my_getservbyname_r("ftp",NULL,&serv,buffer,sizeof buffer,&result);
- result_info(rv,result);
+ TRACE_ON();
+ } while ((result!=NULL) && (result2!=NULL));
+
+ if ((result==NULL) && (result2==NULL))
+ printf("\nSUCCESS\n");
+ else
+ printf("\nFAILURE\n");
+}
- printf("\n%s\n","rpc");
- rv=my_getservbyname_r("rpc",NULL,&serv,buffer,sizeof buffer,&result);
- result_info(rv,result);
+static void
+ent_test2_r()
+{
+ char buffer[SERVENT_BUFFER_SIZE];
+ struct servent serv;
+ struct servent * result;
+
+ int rv;
- printf("\n%s\n","http");
- rv=my_getservbyname_r("http",NULL,&serv,buffer,sizeof buffer,&result);
- result_info(rv,result);
+ printf("\ntesting getservent_r function - simple iteration\n");
+ my_setservent(1);
+ do
+ {
+ //TRACE_OFF();
+ rv=my_getservent_r(&serv,buffer,sizeof buffer,&result);
+ result_info(rv,result);
+ //TRACE_ON();
+ } while (rv == 0 && result!=NULL );
+
+ if (rv == 0)
+ printf("\nSUCCESS\n");
+ else
+ printf("\nFAILURE\n");
}
int main()
{
printf("getserv* functions sandbox test (02.07.05)\n");
- byname_test1_r();
+// byname_test1_r();
+// byport_test1_r();
+ ent_test2_r();
return 0;
}
More information about the p4-projects
mailing list