mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 09:45:47 +00:00
исправлена работа с относительными путями
This commit is contained in:
1 parent
68fd463de7
commit
af99c55423
7 files changed
+26
-18
No files matched your search
Binary file not shown.
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user