исправлена работа с относительными путями

This commit is contained in:
AntKrotov committed 2020-11-27 13:08:30 +03:00
1 parent 68fd463de7
commit af99c55423
7 files changed
+26 -18

No files matched your search

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+3 -6
View File
@@ -400,12 +400,9 @@ VAR
n: INTEGER;
BEGIN
GetArg(0, path);
n := LENGTH(path) - 1;
WHILE path[n] # slash DO
DEC(n)
END;
path[n + 1] := 0X
n := K.sysfunc4(30, 2, SYSTEM.ADR(path[0]), LEN(path) - 2);
path[n - 1] := slash;
path[n] := 0X
END GetCurrentDirectory;
+5 -5
View File
@@ -44,6 +44,7 @@ VAR
time : PROCEDURE [linux] (ptr: INTEGER): INTEGER;
clock_gettime : PROCEDURE [linux] (clock_id: INTEGER; VAR tp: TP): INTEGER;
exit : PROCEDURE [linux] (code: INTEGER);
getcwd : PROCEDURE [linux] (dir, len: INTEGER): INTEGER;
PROCEDURE ExitProcess* (code: INTEGER);
@@ -78,11 +79,9 @@ VAR
n: INTEGER;
BEGIN
GetArg(0, path);
n := LENGTH(path) - 1;
WHILE path[n] # slash DO
DEC(n)
END;
n := getcwd(SYSTEM.ADR(path[0]), LEN(path) - 2);
n := LENGTH(path);
path[n] := slash;
path[n + 1] := 0X
END GetCurrentDirectory;
@@ -241,6 +240,7 @@ BEGIN
GetSym(libc, "chmod", SYSTEM.ADR(_chmod));
GetSym(libc, "time", SYSTEM.ADR(time));
GetSym(libc, "exit", SYSTEM.ADR(exit));
GetSym(libc, "getcwd", SYSTEM.ADR(getcwd));
GetSym(libc, "stdout", SYSTEM.ADR(stdout)); SYSTEM.GET(stdout - SYSTEM.SIZE(INTEGER), stdout);
librt := API.dlopen(SYSTEM.SADR("librt.so.1"), RTLD_LAZY);
+5 -5
View File
@@ -44,6 +44,7 @@ VAR
time : PROCEDURE [linux] (ptr: INTEGER): INTEGER;
clock_gettime : PROCEDURE [linux] (clock_id: INTEGER; VAR tp: TP): INTEGER;
exit : PROCEDURE [linux] (code: INTEGER);
getcwd : PROCEDURE [linux] (dir, len: INTEGER): INTEGER;
PROCEDURE ExitProcess* (code: INTEGER);
@@ -78,11 +79,9 @@ VAR
n: INTEGER;
BEGIN
GetArg(0, path);
n := LENGTH(path) - 1;
WHILE path[n] # slash DO
DEC(n)
END;
n := getcwd(SYSTEM.ADR(path[0]), LEN(path) - 2);
n := LENGTH(path);
path[n] := slash;
path[n + 1] := 0X
END GetCurrentDirectory;
@@ -247,6 +246,7 @@ BEGIN
GetSym(libc, "chmod", SYSTEM.ADR(_chmod));
GetSym(libc, "time", SYSTEM.ADR(time));
GetSym(libc, "exit", SYSTEM.ADR(exit));
GetSym(libc, "getcwd", SYSTEM.ADR(getcwd));
GetSym(libc, "stdout", SYSTEM.ADR(stdout)); SYSTEM.GET(stdout - SYSTEM.SIZE(INTEGER), stdout);
librt := API.dlopen(SYSTEM.SADR("librt.so.1"), RTLD_LAZY);
+8 -1
View File
@@ -177,7 +177,14 @@ BEGIN
options.checking := ST.chkALL;
PATHS.GetCurrentDirectory(app_path);
lib_path := app_path;
UTILS.GetArg(0, temp);
PATHS.split(temp, path, modname, ext);
IF PATHS.isRelative(path) THEN
PATHS.RelPath(app_path, path, temp);
path := temp
END;
lib_path := path;
UTILS.GetArg(1, inname);
+5 -1
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2018-2019, Anton Krotov
Copyright (c) 2018-2020, Anton Krotov
All rights reserved.
*)
@@ -67,6 +67,10 @@ BEGIN
error := FALSE;
j := 0;
IF (relative[0] = ".") & (relative[1] = slash) THEN
j := 2
END;
WHILE ~error & (relative[j] # 0X) DO
IF (relative[j] = ".") & (relative[j + 1] = ".") & (relative[j + 2] = slash) & (i > 0) & (res[i - 1] = slash) THEN
DEC(i, 2);