aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-11-22 12:44:56 +0100
committerLudovic Courtès <ludo@gnu.org>2014-11-22 12:44:56 +0100
commit99533da50db89318c7ab7ae3e7a28c261fb88e84 (patch)
tree706b22c063b3ec29b9cb63be7ac8aa1bcdb8b865
parente6039b9c70c658d648723a2d331f1c9637b49126 (diff)
downloadgnu-guix-99533da50db89318c7ab7ae3e7a28c261fb88e84.tar
gnu-guix-99533da50db89318c7ab7ae3e7a28c261fb88e84.tar.gz
utils: Add 'elf-file?'.
* guix/build/utils.scm (elf-file?): New procedure.
-rw-r--r--guix/build/utils.scm13
1 files changed, 13 insertions, 0 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index bfbc4dd43e..fcf6dfc12c 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)