~ubuntu-branches/ubuntu/quantal/openmotif/quantal

« back to all changes in this revision

Viewing changes to demos/lib/Wsm/free.c

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Bauer
  • Date: 2010-06-23 12:12:31 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20100623121231-u89gxdp51sg9wjj2
Tags: 2.3.0-1
* New Maintainer (Closes: #379258) 
* Acknowledge NMU changes
* New upstream release (Closes: #494375)
* Get rid of security patches as they are already part of new upstream
  release (00-xpmvuln.openmotif.patch, 342092-CVE-2005-3964.patch)
* Bump Standards to 3.8.4
* Added {misc:Depends} to make the package lintian cleaner
* Fix weak-library-dev-dependency by adding ${binary:Version}) for the
  -dev Package of openmotif
* Let package depend on autotools-dev to use newer autotools-helper-files
* Work around an autoconf-bug (Gentoo-Bug #1475)
* Added Client-side anti-aliased fonts support via XFT
* Added UTF-8 and UTF8_STRING atom support
* Ability to show text and pixmaps in Label, LabelGadget and all
  derived widgets
* Support of PNG/JPEG image formats in the same way as XPM is supported
* Increase FILE_OFFSET_BITS to 64 to show files >2GB in file-selector
  Idea taken from Magne Oestlyngen (Closes: #288537)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $XConsortium: free.c /main/5 1995/07/15 20:42:41 drk $ */
 
2
/*
 
3
 * @OPENGROUP_COPYRIGHT@
 
4
 * COPYRIGHT NOTICE
 
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.
 
9
 * 
 
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.
 
15
 * 
 
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
 
19
 * this agreement.
 
20
 * 
 
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
 
26
 * 
 
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.
 
36
 * 
 
37
 */
 
38
/*
 
39
 * HISTORY
 
40
 */
 
41
 
 
42
#include "wsm_proto.h"
 
43
#include <X11/Xatom.h>
 
44
 
 
45
static void FreeWinData(
 
46
WSMWinData *data, int num
 
47
);
 
48
 
 
49
/*      Function Name: FreeRequest
 
50
 *      Description: Frees data in the request that has been allocated.
 
51
 *      Arguments: request - the request.
 
52
 *      Returns: none.
 
53
 */
 
54
 
 
55
void
 
56
FreeRequest(WSMRequest *request)
 
57
{
 
58
    register int i;
 
59
 
 
60
    if (!request->any.allocated)
 
61
        return;                 /* Nothing to free. */
 
62
 
 
63
    switch(request->any.type) {
 
64
    case WSM_CONNECT:
 
65
        XtFree((XtPointer) request->connect.known_versions);
 
66
        break;
 
67
    case WSM_EXTENSIONS:
 
68
        {
 
69
            register int num = request->extensions.num_extensions;
 
70
            register String *ptr;
 
71
 
 
72
            num = request->extensions.num_extensions;
 
73
            ptr = request->extensions.extension_suggestions;
 
74
            for (i = 0; i < num; i++, ptr++) 
 
75
                XtFree((XtPointer) *ptr);
 
76
 
 
77
            XtFree((XtPointer) request->extensions.extension_suggestions);
 
78
        }
 
79
        break;
 
80
    case WSM_SET_STATE:
 
81
        {
 
82
            register int num = request->set_state.num_win_info_list;
 
83
            WSMWinInfo *win_info = request->set_state.win_info_list;
 
84
 
 
85
            for (i = 0; i < num; i++, win_info++) 
 
86
                FreeWinData(win_info->data_list, win_info->num_data_list);
 
87
 
 
88
            XtFree((XtPointer) request->set_state.win_info_list);
 
89
        }
 
90
        break;
 
91
    default:
 
92
        break;
 
93
    }
 
94
}
 
95
 
 
96
/*      Function Name: FreeRequest
 
97
 *      Description: Frees data in the request that has been allocated.
 
98
 *      Arguments: reply - the reply.
 
99
 *      Returns: none.
 
100
 */
 
101
 
 
102
void
 
103
FreeReply(WSMReply *reply)
 
104
{
 
105
    register int i;
 
106
 
 
107
    if (!reply->any.allocated)
 
108
        return;                 /* Nothing to free. */
 
109
 
 
110
    switch(reply->any.type) {
 
111
    case WSM_EXTENSIONS:
 
112
        {
 
113
            register int num = reply->extensions.num_extensions;
 
114
            register String *ptr;
 
115
 
 
116
            num = reply->extensions.num_extensions;
 
117
            ptr = reply->extensions.extensions;
 
118
            for (i = 0; i < num; i++, ptr++) 
 
119
                XtFree((XtPointer) *ptr);
 
120
 
 
121
            XtFree((XtPointer) reply->extensions.extensions);
 
122
        }
 
123
        break;
 
124
    case WSM_GET_STATE:
 
125
        {
 
126
            WSMWinInfo *win_info = reply->get_state.win_info_list;
 
127
            register int num = reply->get_state.num_win_info_list;
 
128
 
 
129
            for (i = 0; i < num; i++, win_info++) 
 
130
                FreeWinData(win_info->data_list, win_info->num_data_list);
 
131
 
 
132
            XtFree((XtPointer) reply->get_state.win_info_list);
 
133
        }
 
134
        break;
 
135
    case WSM_REG_WINDOW:
 
136
        FreeWinData(reply->register_window.window_data,
 
137
                    reply->register_window.num_window_data);
 
138
        break;
 
139
    default:
 
140
        break;
 
141
    }
 
142
}
 
143
 
 
144
/************************************************************
 
145
 *
 
146
 *  Internal routines
 
147
 *
 
148
 ************************************************************/
 
149
 
 
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.
 
154
 *      Returns: none.
 
155
 */
 
156
 
 
157
static void
 
158
FreeWinData(WSMWinData *data, int num)
 
159
{
 
160
    register int i;
 
161
    WSMWinData *top = data;
 
162
 
 
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);
 
167
            break;
 
168
        case WSM_SHORT_LIST_DATA: 
 
169
            XtFree((XtPointer) data->data.short_ptr);
 
170
            break;
 
171
        case WSM_LONG_LIST_DATA:
 
172
            XtFree((XtPointer) data->data.long_ptr);
 
173
            break;
 
174
        default:
 
175
            break;
 
176
        }
 
177
    }
 
178
    
 
179
    XtFree((XtPointer) top);
 
180
}