Expansion von Platzhaltern aus master verlegt

Die Funktionalitaet wird nun ganz aus dem Mastercode entfernt
und zieht um nach /std/util/path, von wo es geerbt werden kann.
Dort findet sich nun auch normalize_path().
Der Code im Master beschraenkt sich vollstaendig darauf,
Pfade "sane" zu machen.

Change-Id: I7a38366466aa206f858be9ff1d5fb9573504ce43
diff --git a/std/util/path.c b/std/util/path.c
new file mode 100644
index 0000000..3ae07b8
--- /dev/null
+++ b/std/util/path.c
@@ -0,0 +1,59 @@
+#pragma strict_types, rtt_checks, pedantic, range_check, no_clone
+
+#include <config.h>
+#include <shells.h>
+#include <defines.h>
+
+// Ersetzt Platzhalter im Pfad und versorgt relative Pfade mit P_CURRENTDIR
+// Funktionalitaet war mal im master() in der Rechtepruefung, gehoert da aber
+// wirklich nicht hin.
+string expand_path(string path, string user)
+{
+  string cwd;
+  if (!sizeof(path))
+    return path;
+  switch(path[0])
+  {
+    // expand nur fuer nicht-absolute Pfade
+    case '/':
+      break;
+    case '+':
+      if(sizeof(path)==1)
+        path="/"DOMAINDIR;
+      path="/"DOMAINDIR"/" + path[1..];
+      break;
+    case '~':
+      if (sizeof(path)==1)
+      {
+        if(user)
+          path="/"WIZARDDIR"/"+user;
+        else
+          path="/"WIZARDDIR;
+      }
+      else
+      {
+        if(user && sizeof(path)>1 && path[1]=='/') // "~/"
+          path="/"WIZARDDIR"/" + user + "/" + path[2..];
+        else
+          path="/"WIZARDDIR"/" + path[1..];
+      }
+      break;
+    default:
+      if(user && PL && getuid(PL) == user
+          && (cwd=(string)PL->QueryProp(P_CURRENTDIR)))
+        path=cwd + "/" + path;
+  }
+  return path;
+}
+
+// Besser benamste Version von _get_path() aus master().
+// Normalisiert den Pfad, expandiert Platzhalter auf Wunsch, benutzt ggf. RPL
+// oder PL als User, wenn nicht angegeben.
+varargs string normalize_path(string path, string user, int expand) {
+  if (!user && (RPL || PL))
+    user = getuid(RPL || PL);
+  if (expand)
+    path=expand_path(path, user);
+  return implode(master()->path_array(path), "/");
+}
+