Преглед на файлове

sync with rev #8876

git-svn-id: https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk@8885 8c9fc860-2736-0410-a75d-ab315db34111
infsvn.durmanov преди 6 години
родител
ревизия
de41263537
променени са 1 файла, в които са добавени 10 реда и са изтрити 2 реда
  1. 10 2
      source/RelativeFiles64.Mod

+ 10 - 2
source/RelativeFiles64.Mod

@@ -7,7 +7,7 @@ TYPE PathName=ARRAY 272 OF CHAR;
 	VAR relTo: PathName; fs: Files.FileSystem;
 
 		PROCEDURE &InitFileSystem*( relTo: ARRAY OF CHAR; fs: Files.FileSystem);
-		VAR ch: CHAR;i: SIZE;
+		VAR ch: CHAR;i: SIZE; full: Files.FileName; flags: SET;
 		BEGIN
 			SELF.fs := fs;
 			INCL(flags,Files.NeedsPrefix);
@@ -22,7 +22,11 @@ TYPE PathName=ARRAY 272 OF CHAR;
 				RemovePrefix(relTo);
 			END;
 
+			IF fs.Has(relTo,full,flags) THEN
+				COPY(full,SELF.relTo);
+			ELSE (* should never happen, but as a fallback: *)
 			COPY(relTo,SELF.relTo);
+			END;
 		END InitFileSystem;
 
 		PROCEDURE MakeRel(VAR name,new: ARRAY OF CHAR);
@@ -107,7 +111,7 @@ TYPE PathName=ARRAY 272 OF CHAR;
 
 	(** NewFS - Create a new filesystem relative to a Windows path. does not protect paths higher than relTo! (xyz:/../../.. could be used) *)
 	PROCEDURE NewFS*(context : Files.Parameters);
-	VAR str,prefix,name: ARRAY 256 OF CHAR; fs: FileSystem; rel: Files.FileSystem; ft: Files.FileSystemTable;
+	VAR str,prefix,name, full: ARRAY 256 OF CHAR; fs: FileSystem; rel: Files.FileSystem; ft: Files.FileSystemTable; flags:SET;
 	BEGIN
 		IF context.arg.GetString(str) THEN
 			Files.SplitName(str,prefix,name);
@@ -118,8 +122,12 @@ TYPE PathName=ARRAY 272 OF CHAR;
 				rel := ft[0];
 			END;
 			IF rel # NIL THEN
+				IF rel.Has(str,full,flags) THEN
 				NEW(fs,str,rel);
 				Files.Add(fs, context.prefix);
+			ELSE
+					context.error.String("file system does not contain "); context.error.String(str); context.error.Ln;
+				END;
 			ELSE
 				context.out.String("file system could not be found: "); context.out.String(str); context.out.Ln;
 				context.result := Commands.CommandError;