Blame clients/mwm/WmWsmLib/free.c

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
}