diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-11-22 21:44:59 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-11-22 21:52:12 +0100 |
commit | 91ee959b03e9e45727761823a4fcc1046e0aa450 (patch) | |
tree | b37db50a259a85a7f7650a5e153088a25a2e6b53 | |
parent | 50b87bd54b7fd5fe5cb3482d7801d5e74d0c2fb3 (diff) |
utils: Add 'ar-file?'.
* guix/build/utils.scm (%ar-magic-bytes): New variable.
(ar-file?): New procedure.
-rw-r--r-- | guix/build/utils.scm | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm index fcf6dfc12c..0ea22ec657 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -37,6 +37,7 @@ executable-file? call-with-ascii-input-file elf-file? + ar-file? with-directory-excursion mkdir-p copy-recursively @@ -118,6 +119,21 @@ return values of applying PROC to the port." (equal? (get-header) #vu8(#x7f #x45 #x4c #x46))) ;"\177ELF" +(define %ar-magic-bytes + ;; Magic bytes of archives created by 'ar'. See <ar.h>. + (u8-list->bytevector (map char->integer (string->list "!<arch>\n")))) + +(define (ar-file? file) + "Return true if FILE starts with the magic bytes of archives as created by +'ar'." + (define (get-header) + (call-with-input-file file + (lambda (port) + (get-bytevector-n port 8)) + #:binary #t #:guess-encoding #f)) + + (equal? (get-header) %ar-magic-bytes)) + (define-syntax-rule (with-directory-excursion dir body ...) "Run BODY with DIR as the process's current directory." (let ((init (getcwd))) |