dfmisc.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 153 行
C
153 行
/****************************************************************************
*
* Open Watcom Project
*
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* ========================================================================
*
* This file contains Original Code and/or Modifications of Original
* Code as defined in and that are subject to the Sybase Open Watcom
* Public License version 1.0 (the 'License'). You may not use this file
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
* provided with the Original Code and Modifications, and is also
* available at www.sybase.com/developer/opensource.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
* NON-INFRINGEMENT. Please see the License for the specific language
* governing rights and limitations under the License.
*
* ========================================================================
*
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
* DESCRIBE IT HERE!
*
****************************************************************************/
#include "dfdip.h"
#include "dfclean.h"
#include "dfld.h"
#include "dfcue.h"
#include "dfmod.h"
/*
Misc. stuff.
*/
char const DIPImpName[] = "DWARF";
df_cleaner *Cleaners;
static void CallCleaners( void ){
/********************************/
//Call all stacked resource cleanup
df_cleaner *curr;
curr = Cleaners;
while( curr != NULL ){
curr->rtn( curr->d );
curr = curr->prev;
}
Cleaners = NULL;
}
unsigned DIPENTRY DIPImpQueryHandleSize( handle_kind hk )
{
/*
Return the sizes of the individual handle types. This version
should be OK as given.
*/
static unsigned_8 Sizes[] = {
sizeof( imp_image_handle ),
sizeof( imp_type_handle ),
sizeof( imp_cue_handle ),
sizeof( imp_sym_handle )
};
return( Sizes[ hk ] );
}
static imp_image_handle *Images;
extern void DFAddImage( imp_image_handle *ii ){
/**************************************/
ii->next = Images;
Images = ii;
}
extern void DFFreeImage( imp_image_handle *ii ){
/**************************************/
imp_image_handle *curr, **lnk;
lnk = &Images;
while( (curr = *lnk) != NULL ){
if( curr == ii ){
*lnk = curr->next;
}
lnk = &curr->next;
}
}
dip_status DIPENTRY DIPImpMoreMem( unsigned size )
{
/*
Return DS_OK if you could release some memory, DS_FAIL if you
couldn't.
*/
imp_image_handle *curr;
dip_status ret;
size = size;
ret = DS_FAIL;
curr = Images;
while( curr != NULL ){
if( ClearMods( curr ) ){
ret = DS_OK;
}
if( DRDbgClear( curr->dwarf->handle ) ){
ret = DS_OK;
}
if( FiniImpCueInfo( curr ) ){
ret = DS_OK;
}
curr = curr->next;
}
return( ret );
}
dip_status DIPENTRY DIPImpStartup(void)
{
/*
Return DS_OK if startup initialization when OK, or a DS_ERR|DS_?
constant if something went wrong.
*/
Cleaners = NULL;
Images = NULL;
DRInit();
return( DS_OK );
}
void DIPENTRY DIPImpShutdown( void )
{
/*
Shutting down and unloading. Last chance to free up stuff.
*/
Images = NULL;
DRFini();
}
void DIPENTRY DIPImpCancel( void )
{
/*
The client is about to longjmp, and may bypass
returns through the DIP. All handles remain valid though.
*/
CallCleaners();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?