1
/* $XConsortium: free.c /main/5 1995/07/15 20:42:41 drk $ */
3
* @OPENGROUP_COPYRIGHT@
5
* Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
6
* Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group
7
* ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
8
* the full copyright text.
10
* This software is subject to an open license. It may only be
11
* used on, with or for operating systems which are themselves open
12
* source systems. You must contact The Open Group for a license
13
* allowing distribution and sublicensing of this software on, with,
14
* or for operating systems which are not Open Source programs.
16
* See http://www.opengroup.org/openmotif/license for full
17
* details of the license agreement. Any use, reproduction, or
18
* distribution of the program constitutes recipient's acceptance of
21
* EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
22
* PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
* KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
24
* WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
25
* OR FITNESS FOR A PARTICULAR PURPOSE
27
* EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
28
* NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
29
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
* DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
31
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
* ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
34
* EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
35
* POSSIBILITY OF SUCH DAMAGES.
42
#include "wsm_proto.h"
43
#include <X11/Xatom.h>
45
static void FreeWinData(
46
WSMWinData *data, int num
49
/* Function Name: FreeRequest
50
* Description: Frees data in the request that has been allocated.
51
* Arguments: request - the request.
56
FreeRequest(WSMRequest *request)
60
if (!request->any.allocated)
61
return; /* Nothing to free. */
63
switch(request->any.type) {
65
XtFree((XtPointer) request->connect.known_versions);
69
register int num = request->extensions.num_extensions;
72
num = request->extensions.num_extensions;
73
ptr = request->extensions.extension_suggestions;
74
for (i = 0; i < num; i++, ptr++)
75
XtFree((XtPointer) *ptr);
77
XtFree((XtPointer) request->extensions.extension_suggestions);
82
register int num = request->set_state.num_win_info_list;
83
WSMWinInfo *win_info = request->set_state.win_info_list;
85
for (i = 0; i < num; i++, win_info++)
86
FreeWinData(win_info->data_list, win_info->num_data_list);
88
XtFree((XtPointer) request->set_state.win_info_list);
96
/* Function Name: FreeRequest
97
* Description: Frees data in the request that has been allocated.
98
* Arguments: reply - the reply.
103
FreeReply(WSMReply *reply)
107
if (!reply->any.allocated)
108
return; /* Nothing to free. */
110
switch(reply->any.type) {
113
register int num = reply->extensions.num_extensions;
114
register String *ptr;
116
num = reply->extensions.num_extensions;
117
ptr = reply->extensions.extensions;
118
for (i = 0; i < num; i++, ptr++)
119
XtFree((XtPointer) *ptr);
121
XtFree((XtPointer) reply->extensions.extensions);
126
WSMWinInfo *win_info = reply->get_state.win_info_list;
127
register int num = reply->get_state.num_win_info_list;
129
for (i = 0; i < num; i++, win_info++)
130
FreeWinData(win_info->data_list, win_info->num_data_list);
132
XtFree((XtPointer) reply->get_state.win_info_list);
136
FreeWinData(reply->register_window.window_data,
137
reply->register_window.num_window_data);
144
/************************************************************
148
************************************************************/
150
/* Function Name: FreeWinData
151
* Description: Frees the data associated with this window.
152
* Arguments: data - The data to free.
153
* num - number of elements in data.
158
FreeWinData(WSMWinData *data, int num)
161
WSMWinData *top = data;
163
for (i = 0; i < num; i++, data++) {
164
switch (data->type) {
165
case WSM_CHAR_LIST_DATA:
166
XtFree((XtPointer) data->data.char_ptr);
168
case WSM_SHORT_LIST_DATA:
169
XtFree((XtPointer) data->data.short_ptr);
171
case WSM_LONG_LIST_DATA:
172
XtFree((XtPointer) data->data.long_ptr);
179
XtFree((XtPointer) top);