diff options
author | Florian Klink <flokli@flokli.de> | 2019-08-16 15:48:11 +0200 |
---|---|---|
committer | Florian Klink <flokli@flokli.de> | 2019-08-17 16:45:52 +0200 |
commit | e1b80a5a99a3013c6556ec2e2e73ef6ca8e8b80b (patch) | |
tree | 128c6e574c1f2ddea22f35d1a4d9f3a3e10f755c /pkgs/stdenv | |
parent | d6ab8baa1bba68800fa6b7b743a96011d2633ab3 (diff) |
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')
-rw-r--r-- | pkgs/stdenv/generic/setup.sh | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index ebcedce60b87a..311292169ecde 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() { |