X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/505d6b6136669e67fc42aa31fd1329e911d6aaf9..2738cbeaa7d9227b472a16fe30ef72b0a0e88a01:/src/gras/Virtu/rl_dns.c diff --git a/src/gras/Virtu/rl_dns.c b/src/gras/Virtu/rl_dns.c index 04e2f5408b..8e7f9e96aa 100644 --- a/src/gras/Virtu/rl_dns.c +++ b/src/gras/Virtu/rl_dns.c @@ -1,8 +1,7 @@ -/* $Id$ */ - /* rl_dns - name resolution (real life) */ -/* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved. */ +/* Copyright (c) 2005, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -13,37 +12,37 @@ /* 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) { - static char *myname = NULL; - - if (myname) - return (const char*) myname; - - myname = xbt_new(char, 255); - +const char *gras_os_myname(void) +{ + static char myname[255]; + static int initialized = 0; + + if (initialized) + return myname; + if (gethostname(myname, 255) == -1) { #ifdef HAVE_SYS_SOCKET_H - /* gethostname() failed! Trying with localhost instead. + /* 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 { + strncpy(myname, tmp->h_name, 255); + } else { /* Erm. localhost cannot be resolved. There's something wrong in the user DNS setting */ sprintf(myname, "(misconfigured host)"); } #else - sprintf(myname, "(misconfigured windows host)"); -#endif + sprintf(myname, "(misconfigured windows host)"); +#endif } - + myname[254] = '\0'; - + + initialized = 1; return myname; } -