summary refs log tree commit diff
path: root/pkgs/stdenv/generic
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2019-08-16 15:48:11 +0200
committerFlorian Klink <flokli@flokli.de>2019-08-17 16:45:52 +0200
commite1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b (patch)
tree128c6e574c1f2ddea22f35d1a4d9f3a3e10f755c /pkgs/stdenv/generic
parentd6ab8baa1bba68800fa6b7b743a96011d2633ab3 (diff)
downloadnixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar.gz
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar.bz2
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar.lz
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar.xz
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.tar.zst
nixpkgs-e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b.zip
setup.sh introduce isELFExec, isELFDyn
These can be used to determine whether a ELF file with ELF header is an
executable or shared library.

We can't implement it in pure bash, as bash has problems with null
bytes.
Diffstat (limited to 'pkgs/stdenv/generic')
-rw-r--r--pkgs/stdenv/generic/setup.sh12
1 files changed, 12 insertions, 0 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index ebcedce60b8..311292169ec 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -212,6 +212,18 @@ isELF() {
     if [ "$magic" = $'\177ELF' ]; then return 0; else return 1; fi
 }
 
+# Return success if the specified file is an ELF object
+# and its e_type is ET_EXEC (executable file)
+isELFExec() {
+    grep -ao -P '^\177ELF.{11}\x00\x02' "$1" >/dev/null
+}
+
+# Return success if the specified file is an ELF object
+# and its e_type is ET_DYN (shared object file)
+isELFDyn() {
+    grep -ao -P '^\177ELF.{11}\x00\x03' "$1" >/dev/null
+}
+
 # Return success if the specified file is a script (i.e. starts with
 # "#!").
 isScript() {