]> asedeno.scripts.mit.edu Git - 1ts-debian.git/commitdiff
r228@bucket (orig r224): kcr | 2007-12-24 21:10:00 -0500
authorkcr <kcr@cbed1d16-5ef5-0310-b6a1-d4a37b08ba1f>
Fri, 18 Jul 2008 20:38:07 +0000 (20:38 +0000)
committerkcr <kcr@cbed1d16-5ef5-0310-b6a1-d4a37b08ba1f>
Fri, 18 Jul 2008 20:38:07 +0000 (20:38 +0000)
 /afs/andrew.cmu.edu/usr18/cg2v/hesiod-fix.diff

git-svn-id: svn://svn.1ts.org/debian/trunk/zephyr@293 cbed1d16-5ef5-0310-b6a1-d4a37b08ba1f

server/server.c

index 4d68d92837193d3b30ea0844ede2ac332b571812..39558962d36b6bf55d31fe86a3c0e3ac6cef8b33 100644 (file)
@@ -93,6 +93,7 @@ static Code_t server_register();
 
 static struct in_addr *get_server_addrs __P((int *number));
 static char **get_server_list __P((char *file));
+static char **get_single_server __P((void));
 static void free_server_list __P((char **list));
 
 static Unacked *srv_nacktab[SRV_NACKTAB_HASHSIZE];
@@ -990,8 +991,12 @@ get_server_addrs(number)
     server_hosts_free = server_hosts;
 #ifdef HAVE_HESIOD
     if (!server_hosts)
-      server_hosts = hes_resolve("zephyr","sloc");
+       server_hosts = hes_resolve("zephyr","sloc");
 #endif
+    if (!server_hosts) {
+       server_hosts = get_single_server();
+       server_hosts_free = server_hosts;
+    }
     if (!server_hosts)
        return NULL;
     /* count up */
@@ -1034,36 +1039,55 @@ get_server_list(file)
     int nused = 0;
     char *newline;
 
+    fp = fopen(file, "r");
+    if (!fp)
+       return NULL;
     /* start with 16, realloc if necessary */
     nhosts = 16;
     ret_list = (char **) malloc(nhosts * sizeof(char *));
-
-    fp = fopen(file, "r");
-    if (fp) {
-       while (fgets(buf, MAXHOSTNAMELEN, fp)) {
-           /* nuke the newline, being careful not to overrun
-              the buffer searching for it with strlen() */
-           buf[MAXHOSTNAMELEN - 1] = '\0';
-           newline = strchr(buf, '\n');
-           if (newline)
-               *newline = '\0';
-
-           if (nused + 1 >= nhosts) {
-               /* get more pointer space if necessary */
-               /* +1 to leave room for null pointer */
-               ret_list = (char **) realloc(ret_list, nhosts * 2);
-               nhosts = nhosts * 2;
-           }
-           ret_list[nused++] = strsave(buf);
-       }
-       fclose(fp);
-    } else {
-       if (gethostname(buf, sizeof(buf)) < 0) {
-           free(ret_list);
-           return NULL;
+    if (!ret_list)
+       return NULL;
+
+    while (fgets(buf, MAXHOSTNAMELEN, fp)) {
+       /* nuke the newline, being careful not to overrun
+          the buffer searching for it with strlen() */
+       buf[MAXHOSTNAMELEN - 1] = '\0';
+       newline = strchr(buf, '\n');
+       if (newline)
+           *newline = '\0';
+
+       if (nused + 1 >= nhosts) {
+           /* get more pointer space if necessary */
+           /* +1 to leave room for null pointer */
+           ret_list = (char **) realloc(ret_list, nhosts * 2);
+           nhosts = nhosts * 2;
        }
        ret_list[nused++] = strsave(buf);
     }
+    fclose(fp);
+    if (!nused) {
+       free(ret_list);
+       return NULL;
+    }
+    ret_list[nused] = NULL;
+    return ret_list;
+}
+
+static char **
+get_single_server()
+{
+    char buf[MAXHOSTNAMELEN];
+    char **ret_list;
+    int nused = 0;
+    nhosts = 2;
+    ret_list = (char **) malloc(nhosts * sizeof(char *));
+    if (!ret_list)
+       return NULL;
+    if (gethostname(buf, sizeof(buf)) < 0) {
+       free(ret_list);
+       return NULL;
+    }
+    ret_list[nused++] = strsave(buf);
     ret_list[nused] = NULL;
     return ret_list;
 }