changeset 7908:2d605a73a1fd

(init_system_name): New function, replaces get_system_name.
author Karl Heuer <kwzh@gnu.org>
date Wed, 15 Jun 1994 05:29:08 +0000
parents 148ad20d6774
children 4d8abd0e1acb
files src/sysdep.c
diffstat 1 files changed, 76 insertions(+), 100 deletions(-) [+]
line wrap: on
line diff
--- a/src/sysdep.c	Wed Jun 15 05:28:51 1994 +0000
+++ b/src/sysdep.c	Wed Jun 15 05:29:08 1994 +0000
@@ -1958,17 +1958,14 @@
 
 #endif /* not CANNOT_DUMP */
 
-/* get_system_name returns as its value
- a string for the Lisp function system-name to return. */
+/* init_system_name sets up the string for the Lisp function
+   system-name to return. */
 
 #ifdef BSD4_1
 #include <whoami.h>
 #endif
 
-/* Can't have this within the function since `static' is #defined to 
-   nothing for some USG systems.  */
-static char *get_system_name_cache;
-static int get_system_name_predump_p;
+extern Lisp_Object Vsystem_name;
 
 #ifndef BSD4_1
 #ifndef VMS
@@ -1979,116 +1976,95 @@
 #endif /* not VMS */
 #endif /* not BSD4_1 */
 
-char *
-get_system_name ()
+void
+init_system_name ()
 {
 #ifdef BSD4_1
-  return sysname;
+  Vsystem_name = build_string (sysname);
 #else
-#ifndef CANNOT_DUMP
-  /* If the cached value is from before the dump, and we've dumped
-     since then, then the cached value is no good. */
-  if (get_system_name_predump_p && initialized && get_system_name_cache)
-    {
-      xfree (get_system_name_cache);
-      get_system_name_cache = 0;
-    }
-#endif
-  if (!get_system_name_cache)
-    {
-      /* No cached value, so get the name from the system.  */
 #ifdef VMS
-      char *sp;
-      if ((sp = egetenv ("SYS$NODE")) == 0)
-	sp = "vax-vms";
-      else
-	{
-	  char *end;
-
-	  if ((end = index (sp, ':')) != 0)
-	    *end = '\0';
-	}
-      get_system_name_cache = (char *) xmalloc (strlen (sp) + 1);
-      strcpy (get_system_name_cache, sp);
+  char *sp, *end;
+  if ((sp = egetenv ("SYS$NODE")) == 0)
+    Vsystem_name = build_string ("vax-vms");
+  else if ((end = index (sp, ':')) == 0)
+    Vsystem_name = build_string (sp);
+  else
+    Vsystem_name = make_string (sp, end - sp);
 #else
 #ifndef HAVE_GETHOSTNAME
-      struct utsname uts;
-      uname (&uts);
-      get_system_name_cache = (char *) xmalloc (strlen (uts.nodename) + 1);
-      strcpy (get_system_name_cache, uts.nodename);
+  struct utsname uts;
+  uname (&uts);
+  Vsystem_name = build_string (uts.nodename);
 #else /* HAVE_GETHOSTNAME */
-      {
-	int hostname_size = 256;
-	char *hostname = (char *) xmalloc (hostname_size);
-
-	/* Try to get the host name; if the buffer is too short, try
-	   again.  Apparently, the only indication gethostname gives of
-	   whether the buffer was large enough is the presence or absence
-	   of a '\0' in the string.  Eech.  */
-	for (;;)
-	  {
-	    gethostname (hostname, hostname_size - 1);
-	    hostname[hostname_size - 1] = '\0';
-
-	    /* Was the buffer large enough for the '\0'?  */
-	    if (strlen (hostname) < hostname_size - 1)
-	      break;
-
-	    hostname_size <<= 1;
-	    hostname = (char *) xrealloc (hostname, hostname_size);
-	  }
-	get_system_name_cache = hostname;
+  int hostname_size = 256;
+  char *hostname = (char *) alloca (hostname_size);
+
+  /* Try to get the host name; if the buffer is too short, try
+     again.  Apparently, the only indication gethostname gives of
+     whether the buffer was large enough is the presence or absence
+     of a '\0' in the string.  Eech.  */
+  for (;;)
+    {
+      gethostname (hostname, hostname_size - 1);
+      hostname[hostname_size - 1] = '\0';
+
+      /* Was the buffer large enough for the '\0'?  */
+      if (strlen (hostname) < hostname_size - 1)
+	break;
+
+      hostname_size <<= 1;
+      hostname = (char *) alloca (hostname_size);
+    }
 #ifdef HAVE_SOCKETS
-	/* Turn the hostname into the official, fully-qualified hostname.
-	   Don't do this if we're going to dump; this can confuse system
-	   libraries on some machines and make the dumped emacs core dump. */
+  /* Turn the hostname into the official, fully-qualified hostname.
+     Don't do this if we're going to dump; this can confuse system
+     libraries on some machines and make the dumped emacs core dump. */
 #ifndef CANNOT_DUMP
-	if (initialized)
+  if (initialized)
 #endif /* not CANNOT_DUMP */
-	  {
-	    struct hostent *hp = gethostbyname (hostname);
-	    if (hp)
-	      {
-		char *fqdn = hp->h_name;
-		char *p;
-
-		if (!index (fqdn, '.'))
-		  {
-		    /* We still don't have a fully qualified domain name.
-		       Try to find one in the list of alternate names */
-		    char **alias = hp->h_aliases;
-		    while (*alias && !index (*alias, '.'))
-		      alias++;
-		    if (*alias)
-		      fqdn = *alias;
-		  }
-		hostname = (char *) xrealloc (hostname, strlen (fqdn) + 1);
-		strcpy (hostname, fqdn);
+    {
+      struct hostent *hp = gethostbyname (hostname);
+      if (hp)
+	{
+	  char *fqdn = hp->h_name;
+	  char *p;
+
+	  if (!index (fqdn, '.'))
+	    {
+	      /* We still don't have a fully qualified domain name.
+		 Try to find one in the list of alternate names */
+	      char **alias = hp->h_aliases;
+	      while (*alias && !index (*alias, '.'))
+		alias++;
+	      if (*alias)
+		fqdn = *alias;
+	    }
+	  hostname = fqdn;
 #if 0
-		/* Convert the host name to lower case.  */
-		/* Using ctype.h here would introduce a possible locale
-		   dependence that is probably wrong for hostnames.  */
-		p = hostname
-		while (*p)
-		  {
-		    if (*p >= 'A' && *p <= 'Z')
-		      *p += 'a' - 'A';
-		    p++;
-		  }
+	  /* Convert the host name to lower case.  */
+	  /* Using ctype.h here would introduce a possible locale
+	     dependence that is probably wrong for hostnames.  */
+	  p = hostname;
+	  while (*p)
+	    {
+	      if (*p >= 'A' && *p <= 'Z')
+		*p += 'a' - 'A';
+	      p++;
+	    }
 #endif
-	      }
-	  }
+	}
+    }
 #endif /* HAVE_SOCKETS */
-	get_system_name_cache = hostname;
-      }
+  Vsystem_name = build_string (hostname);
 #endif /* HAVE_GETHOSTNAME */
 #endif /* VMS */
-#ifndef CANNOT_DUMP
-      get_system_name_predump_p = !initialized;
-#endif
-    }
-  return (get_system_name_cache);
 #endif /* BSD4_1 */
+  {
+    unsigned char *p;
+    for (p = XSTRING (Vsystem_name)->data; *p; p++)
+      if (*p == ' ' || *p == '\t')
+	*p = '-';
+  }
 }
 
 #ifndef VMS