From: mquinson Date: Fri, 27 May 2005 19:43:13 +0000 (+0000) Subject: A proper (even if really KISS) implementation of gras_os_myname X-Git-Tag: v3.3~4058 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/404a5c6adee41f1161eee8e71278e2230abdd459?hp=d1090ad7375e9ffbd83c87cb3b7622aead1084b3 A proper (even if really KISS) implementation of gras_os_myname git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1297 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/ChangeLog b/ChangeLog index 77f4f92e00..35a29b2fec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,7 @@ SimGrid (2.95) unstable; urgency=low * bugfix in automatic type parsing: differentiate the types "char[22]" and "unsigned char[22]". "short" and "long" modifiers were also ignored; other modifier (such as reference level) are still ignored. [MQ] + * Real (even if simplistic) implementation of gras_os_myname() on RL [MQ] -- diff --git a/src/gras/Virtu/rl_dns.c b/src/gras/Virtu/rl_dns.c index a52a7bbbb4..83ae30aeca 100644 --- a/src/gras/Virtu/rl_dns.c +++ b/src/gras/Virtu/rl_dns.c @@ -8,16 +8,39 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "gras/Virtu/virtu_rl.h" +#include /* {end,set}hostent() gethostby{addr,name}() */ -/* A portable DNS resolver is a nightmare to do in a portable manner */ -/* the ADNS library is a good candidate for inclusion in the source tree, but - * it would be a bit too much. We need a stripped down version of it, and it's - * a bit too late for this tonight. - * - * Next time maybe ;) - */ +/* A portable DNS resolver is a nightmare to do in a portable manner. + keep it simple/stupid for now. */ + const char *gras_os_myname(void) { - return "(unknown host)"; + static char *myname = NULL; + + if (myname) + return (const char*) myname; + + myname = xbt_new(char, 255); + + if (gethostname(myname, 255) == -1) { + /* gethostname() failed! Trying with localhost instead. + We first need to query the DNS to make sure localhost is resolved + See the note in nws/Portability/dnsutil.c about {end,set}hostent() */ + struct hostent *tmp; + sethostent(0); + tmp = gethostbyname("localhost"); + endhostent(); + + if (tmp) { + strncat(myname, tmp->h_name, 255); + } else { + /* Erm. localhost cannot be resolved. There's something wrong in the user DNS setting */ + sprintf(myname, "(misconfigured host)"); + } + } + + myname[254] = '\0'; + + return myname; }