1/* dlmain.c -- hello test program that uses simulated dynamic linking 2 Copyright (C) 1996-1999 Free Software Foundation, Inc. 3 This file is part of GNU Libtool. 4 5This program is free software; you can redistribute it and/or modify 6it under the terms of the GNU General Public License as published by 7the Free Software Foundation; either version 2 of the License, or 8(at your option) any later version. 9 10This program is distributed in the hope that it will be useful, 11but WITHOUT ANY WARRANTY; without even the implied warranty of 12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13GNU General Public License for more details. 14 15You should have received a copy of the GNU General Public License 16along with this program; if not, write to the Free Software 17Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 18USA. */ 19 20#include "foo.h" 21#include <stdio.h> 22 23#ifdef HAVE_STRING_H 24#include <string.h> 25#endif 26 27struct lt_symlist 28{ 29 const char *name; 30 lt_ptr_t address; 31}; 32 33extern const struct lt_symlist lt_preloaded_symbols[]; 34 35int 36main (argc, argv) 37 int argc; 38 char **argv; 39{ 40 const struct lt_symlist *s; 41 int (*pfoo)() = 0; 42 int (*phello)() = 0; 43 int *pnothing = 0; 44 45 printf ("Welcome to *modular* GNU Hell!\n"); 46 47 /* Look up the symbols we require for this demonstration. */ 48 s = lt_preloaded_symbols; 49 while (s->name) 50 { 51 if (s->address) { 52 const char *name = s->name; 53 printf ("found symbol: %s\n", name); 54 if (!strcmp ("hello", name)) 55 phello = (int(*)())s->address; 56 else if (!strcmp ("foo", name)) 57 pfoo = (int(*)())s->address; 58 else if (!strcmp ("nothing", name)) 59#ifndef _WIN32 60 /* In an ideal world we could do this... */ 61 pnothing = (int*)s->address; 62#else /* !_WIN32 */ 63 /* In an ideal world a shared lib would be able to export data */ 64 pnothing = (int*)¬hing; 65#endif 66 } else 67 printf ("found file: %s\n", s->name); 68 s ++; 69 } 70 71 /* Try assigning to the nothing variable. */ 72 if (pnothing) 73 *pnothing = 1; 74 else 75 fprintf (stderr, "did not find the `nothing' variable\n"); 76 77 /* Just call the functions and check return values. */ 78 if (pfoo) 79 { 80 if ((*pfoo) () != FOO_RET) 81 return 1; 82 } 83 else 84 fprintf (stderr, "did not find the `foo' function\n"); 85 86 if (phello) 87 { 88 if ((*phello) () != HELLO_RET) 89 return 3; 90 } 91 else 92 fprintf (stderr, "did not find the `hello' function\n"); 93 94 return 0; 95} 96