Pfade normalisieren beim Parsen.
Pfade normalisieren beim Erstellen der Filelisten,
dabei Platzhalter expandieren.
Es hier zu machen erspart dann auch normalisieren
bei jeder einzelnen spaeter ausgegebenen Datei.
Change-Id: If9d4057916e05a637632373255eb9605fcfa8467
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index cf7a4ed..41a8755 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -146,9 +146,7 @@
return 0;
int size=filedata[FILESIZE];
string path=filedata[PATHNAME];
- string *tmp=(string *)call_other(master(),"path_array",
- filedata[FULLNAME],getuid(), 0);
- string full=implode(tmp,"/");
+ string full=filedata[FULLNAME];
int dir=(size==FSIZE_DIR);
object ob=find_object(full);
int ftime=filedata[FILEDATE];
@@ -179,6 +177,7 @@
}
if (flags&LS_G)
{
+ string *tmp=explode(path, "/") - ({""});
if (sizeof(tmp))
{
switch(tmp[0])
diff --git a/std/shells/magier/parsing.c b/std/shells/magier/parsing.c
index 73320e5..f05457c 100644
--- a/std/shells/magier/parsing.c
+++ b/std/shells/magier/parsing.c
@@ -7,6 +7,7 @@
#include <wizlevels.h>
#include <logging.h>
#include <regexp.h>
+#include <defines.h>
#define NEED_PROTOTYPES
#include <magier.h>
#include <thing/properties.h>
@@ -163,7 +164,7 @@
files+=tmp;
data=data[3..];
}
-
+
if(sizeof(files)>300&&!IS_ARCH(this_object()))
// Tod allen Laggern :o)
raise_error("Zu viele Files (>300)!! Abgebrochen!\n");
@@ -190,11 +191,18 @@
{
//DEBUG("_GM: PM: " + pathmask[depth]);
//DEBUG("_GM: FM: " + filemask);
- mixed *data=get_dir(path+pathmask[depth++],GETDIR_NAMES|GETDIR_SIZES|
- GETDIR_DATES)||({});
+
+ // Pfad normalisieren (ggf. Platzhalter expandieren)
+ string p=master()->normalize_path(path+pathmask[depth++],
+ getuid(RPL||PL), 1);
+ mixed *data=get_dir(p, GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES)||({});
if (!sizeof(data))
return ({});
+ // Bemerkung: path beginnt als "/" und wird nach und nach mit base
+ // verlaengert, daher muss das nicht explizit normalisiert werden. dest
+ // wurde bereits vom Aufrufer normalisiert und wird hier nur durchgereicht.
+
mixed *files=({});
while(sizeof(data))
{
@@ -254,19 +262,25 @@
static varargs mixed *get_files(string filename, int mode, int recursive,
string dest, string filemask)
{
+ // Bemerkung. dest wurde bereits vom Aufrufer normalisiert.
+
// DEBUG("GF: " + filename);
// DEBUG("REC: " + recursive + " MODE: " + mode);
// if (dest[<1..<1]!="/") DEBUG("DEST: " + dest);
if (filename=="/")
- {
+ {
switch (mode)
{
case MODE_LSA: return ({({ "", -2, 0,"","","",0 })});
default: if (!recursive) return ({});
break;
}
- }
- string *patharray=explode(filename,"/");
+ }
+
+ // Normalisiertes Pfadarray besorgen
+ string *patharray=master()->path_array(filename, getuid(RPL||PL), 1);
+ // und daraus auch filename neu erzeugen
+ filename=implode(patharray, "/");
mixed *data=get_dir(filename,GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES)||({});
if(!sizeof(data)
@@ -350,6 +364,10 @@
{
string *list=({});
if (mask) mask=glob2regexp(mask);
+ // dest muss einmal normalisiert werden, dann muss es das in den gerufenen
+ // (rekursiven) Funktionen nicht immer nochmal gemacht werden.
+ dest=master()->normalize_path(dest, getuid(RPL||PL), 1);
+
foreach(string file: files)
{
// Abschliessenden / von Pfadnamen abschneiden, weil in diesem Fall