Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix memory errors in gras_os_myname.
authoragiersch <agiersch@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 1 Dec 2010 22:00:55 +0000 (22:00 +0000)
committeragiersch <agiersch@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 1 Dec 2010 22:00:55 +0000 (22:00 +0000)
- Use a static buffer to avoid unfree'd buffer on exit.
- Use strncpy instead of strncat when myname might be uninitialized.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8849 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Virtu/rl_dns.c

index a92784b..8e7f9e9 100644 (file)
 
 const char *gras_os_myname(void)
 {
 
 const char *gras_os_myname(void)
 {
-  static char *myname = NULL;
+  static char myname[255];
+  static int initialized = 0;
 
 
-  if (myname)
-    return (const char *) myname;
-
-  myname = xbt_new(char, 255);
+  if (initialized)
+    return myname;
 
   if (gethostname(myname, 255) == -1) {
 #ifdef HAVE_SYS_SOCKET_H
 
   if (gethostname(myname, 255) == -1) {
 #ifdef HAVE_SYS_SOCKET_H
@@ -32,7 +31,7 @@ const char *gras_os_myname(void)
     endhostent();
 
     if (tmp) {
     endhostent();
 
     if (tmp) {
-      strncat(myname, tmp->h_name, 255);
+      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 {
       /* Erm. localhost cannot be resolved. There's something wrong in the user DNS setting */
       sprintf(myname, "(misconfigured host)");
@@ -44,5 +43,6 @@ const char *gras_os_myname(void)
 
   myname[254] = '\0';
 
 
   myname[254] = '\0';
 
+  initialized = 1;
   return myname;
 }
   return myname;
 }