From: Ralph Ronnquist Date: Wed, 7 Feb 2024 12:33:25 +0000 (+1100) Subject: Revised method for re-reading the executable as data. X-Git-Tag: 0.2 X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;ds=sidebyside;p=rrq%2Fnewlisp%2Fpacknl.git Revised method for re-reading the executable as data. --- diff --git a/incore.lsp b/incore.lsp index 7203047..658972a 100644 --- a/incore.lsp +++ b/incore.lsp @@ -22,14 +22,18 @@ ;; This is a hashmap of loaded files (new Tree 'archives) -;; A copy of the executable -(define core:core (read-file "/proc/self/exe")) +;; A copy of the executable (file descriptor 3) +(define core:core + (letn ((FD 3) (SZ (seek FD)) (BUFFER (dup "" SZ))) + (seek FD 0) (read FD BUFFER SZ) BUFFER)) +(map delete '(FD SZ BUFFER GNU GNU)) (context 'archive) - (setf main nil) - -(constant 'AR "/usr/bin/ar" 'TAR "/bin/tar" 'FILE "/usr/bin/file") +(constant + 'AR "/usr/bin/ar" + 'TAR (exists file? '("/bin/tar" "/usr/bin/tar")) + 'FILE "/usr/bin/file" ) (define (tar-able PATH) (when (file? FILE) diff --git a/incore.lsp.8.adoc b/incore.lsp.8.adoc index e7acf94..1783adf 100644 --- a/incore.lsp.8.adoc +++ b/incore.lsp.8.adoc @@ -59,10 +59,11 @@ referring to scripts within _ar_ aor _tar_ archive files. *core:core*:: -This is a data reference functor that gets set up by reading -"/proc/self/exe". This is only useful for an embedded binary where it -will contain application's inc-core archive. Any other use case will -need to redefine *core:core* for its in-core archive, if any. +This is a data reference functor that gets set up by re-reading the +executable as data block. This is only useful for an embedded binary +where it will contain application's in-core archive. Any other use +case will need to redefine *core:core* for its in-core archive +if any. (*archives* _FILENAME_ _ARCHIVE_)::