]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix linux find-so failure if no old ld entries exist
authorChris Double <chris.double@double.co.nz>
Wed, 29 Jan 2020 12:00:38 +0000 (01:00 +1300)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 29 Jan 2020 14:17:37 +0000 (06:17 -0800)
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

index 71c85197e6af075ab56d8149e68f25249647cf3a..73d82bd52727b12a2b983751d8471fd9a31e982e 100644 (file)
@@ -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 ]