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), "/");
+}
+