diff options
Diffstat (limited to 'tools/iself/iself.c')
-rw-r--r-- | tools/iself/iself.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/iself/iself.c b/tools/iself/iself.c new file mode 100644 index 0000000..e634a22 --- /dev/null +++ b/tools/iself/iself.c @@ -0,0 +1,36 @@ +#include <debug.h> +#include <unistd.h> + +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> + +int +main(int argc, char **argv) +{ + char *fname; + int fd; + char magic[4]; + + argc--, argv++; + FAILIF(argc != 1, "Expecting a file name!\n"); + fname = *argv; + + fd = open(fname, O_RDONLY); + FAILIF(fd < 0, "Error opening %s for reading: %s (%d)!\n", + fname, strerror(errno), errno); + + FAILIF(4 != read(fd, magic, 4), + "Could not read first 4 bytes from %s: %s (%d)!\n", + fname, strerror(errno), errno); + + if (magic[0] != 0x7f) return 1; + if (magic[1] != 'E') return 1; + if (magic[2] != 'L') return 1; + if (magic[3] != 'F') return 1; + + return 0; +} |