1 1.7 he /* $NetBSD: exec_coff.c,v 1.7 2009/08/20 17:39:51 he Exp $ */ 2 1.1 msaitoh 3 1.1 msaitoh /* 4 1.4 cgd * Copyright (c) 1997 Christopher G. Demetriou 5 1.4 cgd * All rights reserved. 6 1.4 cgd * 7 1.1 msaitoh * Redistribution and use in source and binary forms, with or without 8 1.1 msaitoh * modification, are permitted provided that the following conditions 9 1.1 msaitoh * are met: 10 1.1 msaitoh * 1. Redistributions of source code must retain the above copyright 11 1.1 msaitoh * notice, this list of conditions and the following disclaimer. 12 1.1 msaitoh * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 msaitoh * notice, this list of conditions and the following disclaimer in the 14 1.1 msaitoh * documentation and/or other materials provided with the distribution. 15 1.1 msaitoh * 3. All advertising materials mentioning features or use of this software 16 1.1 msaitoh * must display the following acknowledgement: 17 1.4 cgd * This product includes software developed for the 18 1.6 salo * NetBSD Project. See http://www.NetBSD.org/ for 19 1.4 cgd * information about NetBSD. 20 1.1 msaitoh * 4. The name of the author may not be used to endorse or promote products 21 1.4 cgd * derived from this software without specific prior written permission. 22 1.4 cgd * 23 1.1 msaitoh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24 1.1 msaitoh * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 1.1 msaitoh * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 1.1 msaitoh * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27 1.1 msaitoh * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 28 1.1 msaitoh * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 1.1 msaitoh * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 1.1 msaitoh * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 1.1 msaitoh * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 32 1.1 msaitoh * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 1.4 cgd * 34 1.4 cgd * <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>> 35 1.1 msaitoh */ 36 1.1 msaitoh 37 1.1 msaitoh #include <sys/cdefs.h> 38 1.1 msaitoh #ifndef lint 39 1.7 he __RCSID("$NetBSD: exec_coff.c,v 1.7 2009/08/20 17:39:51 he Exp $"); 40 1.1 msaitoh #endif 41 1.1 msaitoh 42 1.1 msaitoh #include <stdio.h> 43 1.1 msaitoh #include <stdlib.h> 44 1.1 msaitoh #include <string.h> 45 1.1 msaitoh #include <unistd.h> 46 1.1 msaitoh #include <errno.h> 47 1.5 tsutsui #include <limits.h> 48 1.1 msaitoh #include <sys/types.h> 49 1.1 msaitoh #include <sys/stat.h> 50 1.1 msaitoh 51 1.1 msaitoh #include "extern.h" 52 1.1 msaitoh 53 1.1 msaitoh #if defined(NLIST_COFF) 54 1.1 msaitoh 55 1.2 msaitoh #include <sys/exec_coff.h> 56 1.1 msaitoh 57 1.1 msaitoh int 58 1.1 msaitoh check_coff(int fd, const char *filename) 59 1.1 msaitoh { 60 1.1 msaitoh struct coff_filehdr fh; 61 1.1 msaitoh struct stat sb; 62 1.1 msaitoh 63 1.1 msaitoh /* 64 1.1 msaitoh * Check the header to make sure it's an COFF file (of the 65 1.1 msaitoh * appropriate size). 66 1.1 msaitoh */ 67 1.1 msaitoh if (fstat(fd, &sb) == -1) 68 1.1 msaitoh return 0; 69 1.1 msaitoh if (sb.st_size > SIZE_T_MAX) 70 1.1 msaitoh return 0; 71 1.1 msaitoh if (read(fd, &fh, sizeof fh) != sizeof fh) 72 1.1 msaitoh return 0; 73 1.1 msaitoh 74 1.1 msaitoh if (COFF_BADMAG(&fh)) 75 1.1 msaitoh return 0; 76 1.1 msaitoh 77 1.1 msaitoh return 1; 78 1.1 msaitoh } 79 1.1 msaitoh 80 1.1 msaitoh int 81 1.1 msaitoh hide_coff(int fd, const char *filename) 82 1.1 msaitoh { 83 1.1 msaitoh 84 1.1 msaitoh fprintf(stderr, "%s: COFF executables not currently supported\n", 85 1.1 msaitoh filename); 86 1.1 msaitoh return 1; 87 1.1 msaitoh } 88 1.1 msaitoh 89 1.1 msaitoh #endif /* defined(NLIST_COFF) */ 90