DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T g

⟦0dfb91393⟧ TextFile

    Length: 1526 (0x5f6)
    Types: TextFile
    Names: »gnulib3.c«

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦cc8755de2⟧ »./libg++-1.36.1.tar.Z« 
        └─⟦23757c458⟧ 
            └─⟦this⟧ »libg++/src/gnulib3.c« 

TextFile


#ifndef NO_GNULIB3  /* skip entire file if NO_GNULIB3 */

typedef struct set_vector
{
  int length;
  int vector[1];
  /* struct set_vector *next; */
} set_vector;

extern set_vector __CTOR_LIST__;
extern set_vector __DTOR_LIST__;
set_vector *__dlp;
int __dli;

extern void exit ();
extern void __do_global_init ();
extern void __do_global_cleanup ();
extern void on_exit(void*, void*);
\f


#if defined(i386)
#define COFF
#endif

#if defined(sun)
#define ON_EXIT(PROCP, ARG) \
  do { extern void PROCP (); on_exit (PROCP, ARG); } while (0)
#endif

int
__main ()
{
  /* Gross hack for GNU ld.  This is defined in `builtin.cc'
     from libg++.  */
#ifndef COFF
  extern int __1xyzzy__;
#endif

#ifdef ON_EXIT

#ifdef sun
  ON_EXIT (_cleanup, 0);
#endif

  ON_EXIT (__do_global_cleanup, 0);

#endif
  __dli = __DTOR_LIST__.length;
  __dlp = &__DTOR_LIST__;
#ifndef COFF
  __do_global_init (&__1xyzzy__);
#else
  __do_global_init ();
#endif
}

#ifndef ON_EXIT
void 
exit (status)
     int status;
{
  __do_global_cleanup ();
  _cleanup ();
  _exit (status);
}
#endif

void
__do_global_init ()
{
  register int i, len;
  register void (**ppf)() = (void (**)())__CTOR_LIST__.vector;

  len = __CTOR_LIST__.length;
  for (i = 0; i < len; i++)
    (*ppf[i])();
}

void
__do_global_cleanup ()
{
  while (__dlp)
    {
      while (--__dli >= 0)
	{
	  void (*pf)() = (void (*)())__dlp->vector[__dli];
	  (*pf)();
	}
      __dlp = (struct set_vector *)__dlp->vector[__dlp->length];
      if (__dlp) __dli = __dlp->length;
    }
}

#endif