From 487141d4401eb1385a2ab36af7235a43c78e5dae Mon Sep 17 00:00:00 2001 From: Chris Double Date: Thu, 30 Jan 2020 01:00:38 +1300 Subject: [PATCH] Fix linux find-so failure if no old ld entries exist If '/etc/ld.so.cache' does not contain any old entries using the 'HeaderOld' struct then it fails with a bad-magic error before looking for the HeaderNew entries. My Ubuntu 19.10 system doesn't have any old entries so always fails here when using 'load-all', which results in the 'extra/llvm' vocab failing due to using 'find-so'. The fix implemented here is to catch the error and recover from it by seeking back to the start of the header before looking for the new header entries. --- extra/ldcache/ldcache.factor | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/extra/ldcache/ldcache.factor b/extra/ldcache/ldcache.factor index 71c85197e6..73d82bd527 100644 --- a/extra/ldcache/ldcache.factor +++ b/extra/ldcache/ldcache.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2017 Björn Lindqvist. ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien.c-types alien.strings assocs byte-arrays -classes.struct fry io io.encodings.binary io.encodings.string io.files -kernel math math.bitwise sequences system ; +classes.struct continuations fry io io.encodings.binary +io.encodings.string io.files kernel math math.bitwise sequences +system ; IN: ldcache ! General util @@ -75,8 +76,10 @@ STRUCT: EntryNew : parse ( -- entries ) ! Read the old header and jump past it. HeaderOld read-struct - [ HEADER_MAGIC_OLD check-ldcache-magic ] - [ nlibs>> EntryOld struct-size * seek-relative seek-input ] bi + [ + [ HEADER_MAGIC_OLD check-ldcache-magic ] + [ nlibs>> EntryOld struct-size * seek-relative seek-input ] bi + ] [ 2drop HeaderOld struct-size neg seek-relative seek-input ] recover HeaderNew read-struct [ HEADER_MAGIC_NEW check-ldcache-magic ] keep [ parse-new-entries ]