- Handling error returned by gethostbyname() (Savannah Bug #67627)
authorZdeněk Šustr <sustr4@cesnet.cz>
Wed, 25 May 2011 08:07:01 +0000 (08:07 +0000)
committerZdeněk Šustr <sustr4@cesnet.cz>
Wed, 25 May 2011 08:07:01 +0000 (08:07 +0000)
org.glite.jobid.api-c/src/cjobid.c

index bfd4203..e046b0c 100644 (file)
@@ -51,6 +51,7 @@ int glite_jobid_recreate(const char* bkserver, int port, const char *unique, gli
     struct timeval tv;
     int skip;
     char* portbeg;
+    char* rndaddr = NULL;
 
     struct hostent* he;
 
@@ -58,16 +59,18 @@ int glite_jobid_recreate(const char* bkserver, int port, const char *unique, gli
         return EINVAL;
 
     if (unique == NULL) {
+       srandom(tv.tv_usec);
        gethostname(hostname, 100);
        he = gethostbyname(hostname);
-       assert(he->h_length > 0);
+       if (!he) asprintf(&rndaddr,"%d.%d.%d.%d",rand()%256,rand()%256,rand()%256,rand()%256);
        gettimeofday(&tv, NULL);
-       srandom(tv.tv_usec);
 
        skip = strlen(hostname);
        skip += sprintf(hostname + skip, "-IP:0x%x-pid:%d-rnd:%d-time:%d:%d",
-                   *((int*)he->h_addr_list[0]), getpid(), (int)random(),
-                   (int)tv.tv_sec, (int)tv.tv_usec);
+                   rndaddr ? rndaddr : *((int*)he->h_addr_list[0]),
+                   getpid(), (int)random(), (int)tv.tv_sec, (int)tv.tv_usec);
+       free(he);
+       free(rndaddr);
     }
 
     *jobId = NULL;