⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 早期freebsd实现
💻 C
字号:
/*  *  init.cc:          Initialization and Finalization Code for Shared *                    Libraries. *  Author:           James Kempf *  Created On:       Fri Mar 29 14:01:48 1991 *  Last Modified By: James Kempf *  Last Modified On: Wed Apr 24 10:34:21 1991 *  Update Count:     7 */#include "dldefs.h"/************************************************************************* *              void INIT_FUN() *              void FINI_FUN() * Shared libraries should link a copy of this module into them. The * dynamic initialization/finalization function can look up these * functions and call them to do static ctor/dtor work. Also, the * main uses these for statically linked programs. ************************************************************************/static void __do_global_fn( int * );/*  * Semaphore for indicating whether the library has already been initialized.  */static int initialized = 0;/* * We do this, because init.c, in addition to being compiled standalone,  * is included in drt0.cc.  */extern int * __function_list_addr;void INIT_FUN(){    if ( __function_list_addr && ! initialized ) {	initialized = 1;	__do_global_fn( __function_list_addr);    }}void FINI_FUN(){    if ( __function_list_addr && initialized ) {	initialized = 0;	__do_global_fn( __function_list_addr );    }}inline staticint * _do_local_fn( int * off_ptr){  void_fn fn;  int i;  i = *off_ptr;  off_ptr++;  while( --i >= 0) {    fn = (void_fn)(((int)off_ptr) - ((int)(*off_ptr)));    fn();    off_ptr++;  }  return (* off_ptr ? (int*) *off_ptr : off_ptr);}staticvoid __do_global_fn( int * ip){  while( *ip > 0) {    ip = _do_local_fn(ip);  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -