|
Packit |
b099d7 |
/* $XConsortium: free.c /main/5 1995/07/15 20:38:35 drk $ */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "wsm_proto.h"
|
|
Packit |
b099d7 |
#include <X11/Xatom.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void FreeWinData(
|
|
Packit |
b099d7 |
WSMWinData *data, int num
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FreeRequest
|
|
Packit |
b099d7 |
* Description: Frees data in the request that has been allocated.
|
|
Packit |
b099d7 |
* Arguments: request - the request.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
FreeRequest(WSMRequest *request)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!request->any.allocated)
|
|
Packit |
b099d7 |
return; /* Nothing to free. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch(request->any.type) {
|
|
Packit |
b099d7 |
case WSM_CONNECT:
|
|
Packit |
b099d7 |
XtFree((XtPointer) request->connect.known_versions);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_EXTENSIONS:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int num = request->extensions.num_extensions;
|
|
Packit |
b099d7 |
register String *ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = request->extensions.num_extensions;
|
|
Packit |
b099d7 |
ptr = request->extensions.extension_suggestions;
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, ptr++)
|
|
Packit |
b099d7 |
XtFree((XtPointer) *ptr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) request->extensions.extension_suggestions);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_SET_STATE:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int num = request->set_state.num_win_info_list;
|
|
Packit |
b099d7 |
WSMWinInfo *win_info = request->set_state.win_info_list;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, win_info++)
|
|
Packit |
b099d7 |
FreeWinData(win_info->data_list, win_info->num_data_list);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) request->set_state.win_info_list);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FreeRequest
|
|
Packit |
b099d7 |
* Description: Frees data in the request that has been allocated.
|
|
Packit |
b099d7 |
* Arguments: reply - the reply.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
FreeReply(WSMReply *reply)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!reply->any.allocated)
|
|
Packit |
b099d7 |
return; /* Nothing to free. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch(reply->any.type) {
|
|
Packit |
b099d7 |
case WSM_EXTENSIONS:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int num = reply->extensions.num_extensions;
|
|
Packit |
b099d7 |
register String *ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = reply->extensions.num_extensions;
|
|
Packit |
b099d7 |
ptr = reply->extensions.extensions;
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, ptr++)
|
|
Packit |
b099d7 |
XtFree((XtPointer) *ptr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) reply->extensions.extensions);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_GET_STATE:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
WSMWinInfo *win_info = reply->get_state.win_info_list;
|
|
Packit |
b099d7 |
register int num = reply->get_state.num_win_info_list;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, win_info++)
|
|
Packit |
b099d7 |
FreeWinData(win_info->data_list, win_info->num_data_list);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) reply->get_state.win_info_list);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_REG_WINDOW:
|
|
Packit |
b099d7 |
FreeWinData(reply->register_window.window_data,
|
|
Packit |
b099d7 |
reply->register_window.num_window_data);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Internal routines
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FreeWinData
|
|
Packit |
b099d7 |
* Description: Frees the data associated with this window.
|
|
Packit |
b099d7 |
* Arguments: data - The data to free.
|
|
Packit |
b099d7 |
* num - number of elements in data.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
FreeWinData(WSMWinData *data, int num)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
WSMWinData *top = data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, data++) {
|
|
Packit |
b099d7 |
switch (data->type) {
|
|
Packit |
b099d7 |
case WSM_CHAR_LIST_DATA:
|
|
Packit |
b099d7 |
XtFree((XtPointer) data->data.char_ptr);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_SHORT_LIST_DATA:
|
|
Packit |
b099d7 |
XtFree((XtPointer) data->data.short_ptr);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WSM_LONG_LIST_DATA:
|
|
Packit |
b099d7 |
XtFree((XtPointer) data->data.long_ptr);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) top);
|
|
Packit |
b099d7 |
}
|