From ee01f97392351939072dbe3c782f00c8b2c5ec48 Mon Sep 17 00:00:00 2001 From: David Brown Date: Tue, 24 Apr 2018 18:51:39 +0100 Subject: [PATCH] Expose file name and path max lengths in Files.Mod. --- src/runtime/Files.Mod | 5 +++++ src/runtime/Platformunix.Mod | 13 ++++++++++++- src/runtime/Platformwindows.Mod | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/runtime/Files.Mod b/src/runtime/Files.Mod index b63553d7..5ce79071 100644 --- a/src/runtime/Files.Mod +++ b/src/runtime/Files.Mod @@ -54,6 +54,9 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files VAR + MaxPathLength-: INTEGER; + MaxNameLength-: INTEGER; + files: POINTER [1] TO FileDesc; (* List of files backed by an OS file, whether open, registered or temporary. *) tempno: INTEGER; HOME: ARRAY 1024 OF CHAR; @@ -741,4 +744,6 @@ BEGIN tempno := -1; Heap.FileCount := 0; HOME := ""; Platform.GetEnv("HOME", HOME); + MaxPathLength := Platform.MaxPathLength(); + MaxNameLength := Platform.MaxNameLength(); END Files. diff --git a/src/runtime/Platformunix.Mod b/src/runtime/Platformunix.Mod index ff03a960..bcf11137 100644 --- a/src/runtime/Platformunix.Mod +++ b/src/runtime/Platformunix.Mod @@ -44,6 +44,7 @@ PROCEDURE -Aincludeerrno '#include '; PROCEDURE -Astdlib '#include '; PROCEDURE -Astdio '#include '; PROCEDURE -Aerrno '#include '; +PROCEDURE -Alimits '#include '; @@ -66,7 +67,6 @@ PROCEDURE -EINTR(): ErrorCode 'EINTR'; - PROCEDURE TooManyFiles*(e: ErrorCode): BOOLEAN; BEGIN RETURN (e = EMFILE()) OR (e = ENFILE()) END TooManyFiles; @@ -95,6 +95,17 @@ BEGIN RETURN e = EINTR() END Interrupted; +(* Expose file and path name length limits *) + +PROCEDURE -NAMEMAX(): INTEGER 'NAME_MAX'; +PROCEDURE -PATHMAX(): INTEGER 'PATH_MAX'; + +PROCEDURE MaxNameLength*(): INTEGER; BEGIN RETURN NAMEMAX() END MaxNameLength; +PROCEDURE MaxPathLength*(): INTEGER; BEGIN RETURN PATHMAX() END MaxPathLength; + + + + (* OS memory allocaton *) PROCEDURE -allocate (size: SYSTEM.ADDRESS): SYSTEM.ADDRESS "(ADDRESS)((void*)malloc((size_t)size))"; diff --git a/src/runtime/Platformwindows.Mod b/src/runtime/Platformwindows.Mod index 4087c75b..63c90a69 100644 --- a/src/runtime/Platformwindows.Mod +++ b/src/runtime/Platformwindows.Mod @@ -91,6 +91,17 @@ BEGIN RETURN e = EINTR() END Interrupted; + +(* Expose file and path name length limits (same on Windows) *) + +PROCEDURE -MAXPATH(): INTEGER 'MAX_PATH'; + +PROCEDURE MaxNameLength*(): INTEGER; BEGIN RETURN MAXPATH() END MaxNameLength; +PROCEDURE MaxPathLength*(): INTEGER; BEGIN RETURN MAXPATH() END MaxPathLength; + + + + (* OS memory allocaton *) PROCEDURE -allocate(size: SYSTEM.ADDRESS): SYSTEM.ADDRESS "(ADDRESS)((void*)HeapAlloc(GetProcessHeap(), 0, (size_t)size))";