123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: CleanUp.c /main/10 1996/01/29 12:19:40 cde-hp $ */
- /************************************<+>*************************************
- ****************************************************************************
- **
- ** File: CleanUp.c
- **
- ** Project: Cde DtHelp
- **
- ** Description:
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
- **
- ** (c) Copyright 1993, 1994 Hewlett-Packard Company
- ** (c) Copyright 1993, 1994 International Business Machines Corp.
- ** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
- ** (c) Copyright 1993, 1994 Novell, Inc.
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
- /*
- * system includes
- */
- #include <stdlib.h>
- #include <X11/Intrinsic.h>
- /*
- * Canvas Engine includes
- */
- #include "CanvasP.h"
- #include "CanvasSegP.h"
- #include "LinkMgrP.h"
- /*
- * private includes
- */
- #include "bufioI.h"
- #include "CleanUpI.h"
- #include "FontAttrI.h"
- #include "FormatUtilI.h"
- #include "RegionI.h"
- #include "StringFuncsI.h"
- #include "XInterfaceI.h"
- #ifdef NLS16
- #endif
- /******** Private Function Declarations ********/
- /******** End Private Function Declarations ********/
- /*****************************************************************************
- * Private Defines
- *****************************************************************************/
- /*****************************************************************************
- * Private Macros
- *****************************************************************************/
- #define AbbrevStr(x) (FrmtPrivInfoPtr(x)->abbrev)
- #define DupFlag(x) (FrmtPrivInfoPtr(x)->dup_flag)
- #define MatchInfo(x) (FrmtPrivInfoPtr(x)->match_info)
- #define TopFlag(x) (FrmtPrivInfoPtr(x)->top_block)
- /*****************************************************************************
- * Private Functions
- *****************************************************************************/
- static void
- CheckFreePrivInfo(_DtCvSegment *seg)
- {
- /*
- * free the match information
- */
- if (NULL != MatchInfo(seg))
- {
- SdlMatchData *m = (SdlMatchData *)(MatchInfo(seg));
- if (NULL != m->ssi)
- free(m->ssi);
- free(m);
- }
- /*
- * free any abbreviation
- */
- if (NULL != AbbrevStr(seg))
- free(AbbrevStr(seg));
- }
- static void
- FreePrivateAndSeg(_DtCvSegment *seg)
- {
- if (NULL != seg)
- {
- /*
- * free the private information block
- */
- if (NULL != FrmtPrivInfoPtr(seg))
- free(FrmtPrivInfoPtr(seg));
- /*
- * free the segment block
- */
- free(seg);
- }
- }
- /*****************************************************************************
- * Semi-Private Variables
- *****************************************************************************/
- /*****************************************************************************
- * Semi-Public Functions
- *****************************************************************************/
- /*****************************************************************************
- * Function: void _DtHelpFreeSegments (_DtCvSegment *seg_list)
- *
- * Parameters:
- * seg_list Specifies the Canvas Engine segment list.
- *
- * Returns: Nothing
- *
- * Purpose: Free all memory associated with an SDL list.
- *****************************************************************************/
- void
- _DtHelpFreeSegments (
- _DtCvSegment *seg_list,
- _DtCvStatus unresolved,
- void (*destroy_region)(),
- _DtCvPointer client_data)
- {
- int i;
- char dupFlag;
- char **strs;
- _DtCvSegment *nextSeg;
- _DtCvSegment *topSeg = NULL;
- _DtCvSegment *topTab = NULL;
- _DtCvSegment **tableSeg;
- while (seg_list != NULL)
- {
- dupFlag = DupFlag(seg_list);
- nextSeg = seg_list->next_seg;
- switch (_DtCvPrimaryTypeOfSeg(seg_list))
- {
- case _DtCvCONTAINER:
- /*
- * free the id block.
- */
- if (False == dupFlag &&
- NULL != _DtCvContainerIdOfSeg(seg_list))
- free(_DtCvContainerIdOfSeg(seg_list));
- /*
- * free the contents of the block
- */
- _DtHelpFreeSegments(_DtCvContainerListOfSeg(seg_list),
- unresolved,
- destroy_region,
- client_data);
- break;
- case _DtCvMARKER:
- if (False == dupFlag)
- free(_DtCvIdOfMarkerSeg(seg_list));
- break;
- case _DtCvREGION:
- if (False == dupFlag && NULL != destroy_region)
- (destroy_region)(client_data,
- _DtCvInfoOfRegionSeg(seg_list));
- break;
- case _DtCvSTRING:
- if (False == dupFlag)
- {
- free(_DtCvStringOfStringSeg(seg_list));
- if (True == unresolved &&
- NULL != _DtCvFontOfStringSeg(seg_list))
- free(_DtCvFontOfStringSeg(seg_list));
- }
- break;
- case _DtCvTABLE:
- if (True == dupFlag)
- break;
- /*
- * free the blocks
- */
- tableSeg = _DtCvCellsOfTableSeg(seg_list);
- while (NULL != tableSeg && NULL != *tableSeg)
- {
- /*
- * free the id block.
- */
- if (False == DupFlag(*tableSeg)
- && NULL != _DtCvContainerIdOfSeg(*tableSeg))
- free(_DtCvContainerIdOfSeg(*tableSeg));
- /*
- * free the contents of the block
- */
- _DtHelpFreeSegments(
- _DtCvContainerListOfSeg(*tableSeg),
- unresolved,
- destroy_region,
- client_data);
- tableSeg++;
- }
- /*
- * free each of the table cells
- */
- tableSeg = _DtCvCellsOfTableSeg(seg_list);
- while (NULL != tableSeg && NULL != *tableSeg)
- {
- if (True == TopFlag(*tableSeg))
- {
- FreePrivateAndSeg(topTab);
- topTab = *tableSeg;
- }
- CheckFreePrivInfo(*tableSeg);
- tableSeg++;
- }
- FreePrivateAndSeg(topTab);
- topTab = NULL;
- /*
- * free the list of cells
- */
- tableSeg = _DtCvCellsOfTableSeg(seg_list);
- free (tableSeg);
- /*
- * free the row ids.
- */
- _DtHelpCeFreeStringArray(
- _DtCvCellIdsOfTableSeg(seg_list));
- /*
- * free the column justification and width.
- */
- free((void *) _DtCvColJustifyOfTableSeg(seg_list));
- strs = _DtCvColWOfTableSeg(seg_list);
- for (i = 0;
- NULL != strs && i < _DtCvNumColsOfTableSeg(seg_list);
- i++, strs++)
- free((void *) *strs);
- if (NULL != _DtCvColWOfTableSeg(seg_list))
- free((void *) _DtCvColWOfTableSeg(seg_list));
- break;
- }
- CheckFreePrivInfo(seg_list);
- if (True == TopFlag(seg_list))
- {
- FreePrivateAndSeg(topSeg);
- topSeg = seg_list;
- }
- seg_list = nextSeg;
- }
- FreePrivateAndSeg(topSeg);
- } /* End _DtHelpFreeSegments */
- /*****************************************************************************
- * Function: void _DtHelpDestroyTopicData (
- * _DtCvSegment *seg_list)
- *
- * Parameters:
- * seg_list Specifies the SDL segment list.
- *
- * Returns: Nothing
- *
- * Purpose: Free all memory associated with an SDL list.
- *****************************************************************************/
- void
- _DtHelpDestroyTopicData (
- _DtCvTopicInfo *topic,
- void (*destroy_region)(),
- _DtCvPointer client_data)
- {
- if (NULL != topic)
- {
- /*
- * free the segment list
- */
- _DtHelpFreeSegments(topic->seg_list, _DtCvFALSE,
- destroy_region, client_data);
- /*
- * free the id string
- */
- if (NULL != topic->id_str)
- free(topic->id_str);
- /*
- * free the database
- */
- _DtLinkDbDestroy(topic->link_data);
- /*
- * free the structure
- */
- free(topic);
- }
- } /* End _DtHelpDestroyTopicData */
|