objprobe.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
objprobe.c (573B)
---
1 #include <stdio.h>
2
3 #include <scc/mach.h>
4
5 #include "libmach.h"
6
7 #include "elf/fun.h"
8 #include "coff32/fun.h"
9
10 static int (*ops[NFORMATS])(unsigned char *, char **) = {
11 [COFF32] = coff32probe,
12 [ELF] = elfprobe,
13 };
14
15 int
16 objprobe(FILE *fp, char **name)
17 {
18 int n, t;
19 fpos_t pos;
20 int (**bp)(unsigned char *, char **);
21 unsigned char buf[NBYTES];
22
23 fgetpos(fp, &pos);
24 n = fread(buf, NBYTES, 1, fp);
25 fsetpos(fp, &pos);
26
27 if (n != 1 || ferror(fp))
28 return -1;
29
30 for (bp = ops; bp < &ops[NFORMATS]; ++bp) {
31 if ((t = (**bp)(buf, name)) >= 0)
32 return t;
33 }
34
35 return -1;
36 }