source: trunk/emx/src/libomflib/omflibam.c

Last change on this file was 3663, checked in by bird, 15 years ago

libomflib/emxomfar: detect non-OMF objects before adding them to a library.

  • Property cvs2svn:cvs-rev set to 1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.4 KB
Line 
1/* omflibam.c (emx+gcc) -- Copyright (c) 1993-1996 by Eberhard Mattes */
2
3/* Add an OBJ module to an OMFLIB. */
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8#include "omflib0.h"
9#include <sys/omflib.h>
10
11int omflib_add_module (struct omflib *p, const char *fname, char *error)
12{
13 FILE *f;
14 char name[256];
15 char obj_fname[256+4];
16 byte libhdr[4];
17 int ret;
18
19 omflib_module_name (name, fname);
20 strcpy (obj_fname, fname);
21 _defext (obj_fname, "obj");
22 f = fopen (obj_fname, "rb");
23 if (f == NULL)
24 return omflib_set_error (error);
25
26 /* this may be a library, check so we don't create invalid libraries
27 (#579?) */
28 memset (libhdr, 0, sizeof(libhdr));
29 if (fread (&libhdr[0], 1, sizeof(libhdr), f) >= 1)
30 {
31 if (libhdr[0] == LIBHDR)
32 {
33 struct omflib * src = omflib_open (fname, error);
34 if (!src)
35 return -1;
36 ret = omflib_copy_lib (p, src, error);
37 omflib_close (src, error);
38 fclose (f);
39 return ret;
40 }
41 if (libhdr[0] != THEADR)
42 {
43 fclose (f);
44 if (memcmp(libhdr, "\177ELF", 4) == 0)
45 strcpy (error, "ELF object, use AR instead of EMXOMFAR");
46 else
47 strcpy (error, "not OMF obj");
48 return -1;
49 }
50 }
51
52 fseek(f, 0, SEEK_SET);
53
54 ret = omflib_copy_module (p, p->f, NULL, f, name, error);
55 fclose (f);
56 return ret;
57}
Note: See TracBrowser for help on using the repository browser.