return hostip;
}
+#if ENABLE_LL
+static int
+cmpstringp(const void *p1, const void *p2)
+{
+ /* The actual arguments to this function are "pointers to
+ pointers to char", but strcmp(3) arguments are "pointers
+ to char", hence the following cast plus dereference */
+
+ return strcmp(* (char * const *) p1, * (char * const *) p2);
+}
+#endif
/**
* Loads the set of host allocated by the LoadLeveler Job Scheduler. This
char *buf;
char *hostname;
char **hostnames;
- char **hostaddrs;
- const char *hostip;
struct GNUNET_TESTBED_Host **host_list;
ssize_t rsize;
uint64_t size;
} pstep;
unsigned int host;
unsigned int nhosts;
- unsigned int nhostaddrs;
if (NULL == (hostfile = getenv ("MP_SAVEHOSTFILE")))
{
pstep = SCAN;
hostname = NULL;
hostnames = NULL;
- hostaddrs = NULL;
nhosts = 0;
- nhostaddrs = 0;
while (offset < size)
{
switch (pstep)
GNUNET_free_non_null (buf);
if (NULL == hostnames)
return 0;
- for (host = 0; host < nhosts; host++)
- {
- hostip = simple_resolve (hostnames[host]);
- if (NULL == hostip)
- {
- nhosts = 0;
- goto cleanup;
- }
- GNUNET_array_append (hostaddrs, nhostaddrs, GNUNET_strdup (hostip));
- }
- GNUNET_assert (nhostaddrs == nhosts);
if (NULL == hosts)
goto cleanup;
- host_list = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Host *) * nhostaddrs);
+ qsort (hostnames, nhosts, sizeof (hostnames[0]), cmpstringp);
+ host_list = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Host *) * nhosts);
for (host = 0; host < nhosts; host++)
- host_list[host] = GNUNET_TESTBED_host_create (hostaddrs[host], NULL, cfg, 0);
+ host_list[host] = GNUNET_TESTBED_host_create (hostnames[host], NULL, cfg, 0);
*hosts = host_list;
cleanup:
for (host = 0; host < nhosts; host++)
GNUNET_free (hostnames[host]);
GNUNET_free(hostnames);
- for (host = 0; (NULL != hostaddrs) && (host < nhostaddrs); host++)
- GNUNET_free (hostaddrs[host]);
- GNUNET_free (hostaddrs);
return nhosts;
#endif
}