/* omflibam.c (emx+gcc) -- Copyright (c) 1993-1996 by Eberhard Mattes */ /* Add an OBJ module to an OMFLIB. */ #include #include #include #include "omflib0.h" #include int omflib_add_module (struct omflib *p, const char *fname, char *error) { FILE *f; char name[256]; char obj_fname[256+4]; byte libhdr[4]; int ret; omflib_module_name (name, fname); strcpy (obj_fname, fname); _defext (obj_fname, "obj"); f = fopen (obj_fname, "rb"); if (f == NULL) return omflib_set_error (error); /* this may be a library, check so we don't create invalid libraries (#579?) */ memset (libhdr, 0, sizeof(libhdr)); if (fread (&libhdr[0], 1, sizeof(libhdr), f) >= 1) { if (libhdr[0] == LIBHDR) { struct omflib * src = omflib_open (fname, error); if (!src) return -1; ret = omflib_copy_lib (p, src, error); omflib_close (src, error); fclose (f); return ret; } if (libhdr[0] != THEADR) { fclose (f); if (memcmp(libhdr, "\177ELF", 4) == 0) strcpy (error, "ELF object, use AR instead of EMXOMFAR"); else strcpy (error, "not OMF obj"); return -1; } } fseek(f, 0, SEEK_SET); ret = omflib_copy_module (p, p->f, NULL, f, name, error); fclose (f); return ret; }