guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/05: utils: Add 'elf-file?'.


From: Ludovic Courtès
Subject: 04/05: utils: Add 'elf-file?'.
Date: Sat, 22 Nov 2014 11:52:39 +0000

civodul pushed a commit to branch core-updates
in repository guix.

commit 99533da50db89318c7ab7ae3e7a28c261fb88e84
Author: Ludovic Courtès <address@hidden>
Date:   Sat Nov 22 12:44:56 2014 +0100

    utils: Add 'elf-file?'.
    
    * guix/build/utils.scm (elf-file?): New procedure.
---
 guix/build/utils.scm |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index bfbc4dd..fcf6dfc 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -36,6 +36,7 @@
             directory-exists?
             executable-file?
             call-with-ascii-input-file
+            elf-file?
             with-directory-excursion
             mkdir-p
             copy-recursively
@@ -106,6 +107,17 @@ return values of applying PROC to the port."
       (lambda ()
         (close-input-port port)))))
 
+(define (elf-file? file)
+  "Return true if FILE starts with the ELF magic bytes."
+  (define (get-header)
+    (call-with-input-file file
+      (lambda (port)
+        (get-bytevector-n port 4))
+      #:binary #t #:guess-encoding #f))
+
+  (equal? (get-header)
+          #vu8(#x7f #x45 #x4c #x46)))             ;"\177ELF"
+
 (define-syntax-rule (with-directory-excursion dir body ...)
   "Run BODY with DIR as the process's current directory."
   (let ((init (getcwd)))
@@ -783,6 +795,7 @@ the previous wrapper."
 
 ;;; Local Variables:
 ;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1)
+;;; eval: (put 'call-with-ascii-input-file 'scheme-indent-function 1)
 ;;; eval: (put 'with-throw-handler 'scheme-indent-function 1)
 ;;; eval: (put 'let-matches 'scheme-indent-function 3)
 ;;; eval: (put 'with-atomic-file-replacement 'scheme-indent-function 1)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]