home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / dld / ref.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  62 lines

  1. /* ref.c -- explicitly make a reference to a symbol so that the library
  2.    defining this symbol is loaded. */
  3.  
  4. /* This file is part of DLD, a dynamic link/unlink editor for C.
  5.    
  6.    Copyright (C) 1990 by W. Wilson Ho.
  7.  
  8.    The author can be reached electronically by how@cs.ucdavis.edu or
  9.    through physical mail at:
  10.  
  11.    W. Wilson Ho
  12.    Division of Computer Science
  13.    University of California at Davis
  14.    Davis, CA 95616
  15.  */
  16.  
  17. /* This program is free software; you can redistribute it and/or modify it
  18.    under the terms of the GNU General Public License as published by the
  19.    Free Software Foundation; either version 1, or (at your option) any
  20.    later version. */
  21.  
  22. #include "defs.h"
  23.  
  24. /*
  25.  *  explicitly create a reference to NAME so that a library routine
  26.  *  defining it is forced to be loaded.  (c.f. "ld -u" option)
  27.  *  It has no effect on non-library routines (plain object files).
  28.  */
  29. int
  30. dld_create_reference (name)
  31. char *name;
  32. {
  33.     register char *p = 0;
  34.     struct nlist dummy_nlist;        /* simulate a nlist entry so that
  35.                        _dld_entery_global_ref can be used. */
  36.     
  37.     if (name == 0)
  38.     return 0;
  39.  
  40.     if (setjmp (_dld_env)) {
  41.     if (p) free (p);
  42.     return dld_errno;
  43.     }
  44.  
  45.     if (_dld_dummy_entry == 0)
  46.     _dld_create_dummy_entry ();
  47.  
  48.     bzero (&dummy_nlist, sizeof (struct nlist));
  49.  
  50.     p = (char *) _dld_malloc (strlen(name) +2);
  51.     *p = '_';
  52.     strcpy (p+1, name);
  53.  
  54.     dummy_nlist.n_un.n_name = p;
  55.     dummy_nlist.n_type = N_EXT | N_UNDF;
  56.  
  57.     _dld_enter_global_ref (_dld_dummy_entry, &dummy_nlist, p);
  58.        
  59.     free (p);
  60.     return 0;
  61. } /* dld_create_reference */
  62.