changeset 224:8379f38f80c3

[project @ 1993-11-15 05:27:58 by jwe]
author jwe
date Mon, 15 Nov 1993 05:27:58 +0000
parents 82c050e70f7a
children 3af2558b9e66
files src/utils.cc
diffstat 1 files changed, 39 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -407,6 +407,7 @@
   char *oh = octave_home ();
   char *tmp = strconcat (oh, "/lib/octave/");
   ol = strconcat (tmp, version_string);
+  delete [] tmp;
   return ol;
 }
 
@@ -420,19 +421,52 @@
   return oi;
 }
 
+/*
+ * Handle OCTAVE_PATH from the environment like TeX handles TEXINPUTS.
+ * If the path starts with `:', prepend the standard path.  If it ends
+ * with `:' append the standard path.  If it begins and ends with
+ * `:', do both (which is useless, but the luser asked for it...).
+ *
+ * This function may eventually be called more than once, so be
+ * careful not to create memory leaks. 
+ */
 char *
 default_path (void)
 {
   static char *pathstring = (char *) NULL;
   delete [] pathstring;
+
+  static char *std_path = (char *) NULL;
+  delete [] std_path;
+
+  char *libdir = octave_lib_dir ();
+
+  std_path = strconcat (".:", libdir);
+
   char *oct_path = getenv ("OCTAVE_PATH");
+
   if (oct_path != (char *) NULL)
-    pathstring = strsave (oct_path);
+    {
+      pathstring = strsave (oct_path);
+
+      if (pathstring[0] == ':')
+	{
+	  char *tmp = pathstring;
+	  pathstring = strconcat (std_path, pathstring);
+	  delete [] tmp;
+	}
+
+      int tmp_len = strlen (pathstring);
+      if (pathstring[tmp_len-1] == ':')
+	{
+	  char *tmp = pathstring;
+	  pathstring = strconcat (pathstring, std_path);
+	  delete [] tmp;
+	}
+    }
   else
-    {
-      char *libdir = octave_lib_dir ();
-      pathstring = strconcat (".:", libdir);
-    }
+    pathstring = strsave (std_path);
+
   return pathstring;
 }