2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: free.c /main/1 1996/04/21 19:23:16 drk $ */
25 * (c) Copyright 1993, 1994 Hewlett-Packard Company
26 * (c) Copyright 1993, 1994 International Business Machines Corp.
27 * (c) Copyright 1993, 1994 Novell, Inc.
28 * (c) Copyright 1993, 1994 Sun Microsystems, Inc.
31 #include <EUSCompat.h>
36 #define _DtCM_OUR_MEMORY 0x55555555
38 typedef void (*_DtCmFreeProc)(uint num_elem, void *ptr);
46 /******************************************************************************
47 * forward declaration of static functions used within the file
48 ******************************************************************************/
49 static void _DtCm_free_calendar_users(uint num_elem, void *vptr);
51 /*****************************************************************************
52 * extern functions used in the library
53 *****************************************************************************/
55 extern CSA_calendar_user *
56 _DtCm_alloc_calendar_users(uint num_elem)
61 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) +
62 sizeof(CSA_calendar_user) * num_elem)) == NULL)
65 hptr = (_DtCmMemHeader *)ptr;
66 hptr->mark = _DtCM_OUR_MEMORY;
67 hptr->num_elem = num_elem;
68 hptr->fproc = _DtCm_free_calendar_users;
69 return ((CSA_calendar_user *)(ptr + sizeof(_DtCmMemHeader)));
74 _DtCm_alloc_character_pointers(uint num_elem)
79 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) +
80 sizeof(char *) * num_elem)) == NULL)
83 hptr = (_DtCmMemHeader *)ptr;
84 hptr->mark = _DtCM_OUR_MEMORY;
85 hptr->num_elem = num_elem;
86 hptr->fproc = _DtCm_free_character_pointers;
87 return ((char **)(ptr + sizeof(_DtCmMemHeader)));
91 extern CSA_attribute *
92 _DtCm_alloc_attributes(uint num_elem)
96 extern void _DtCm_free_attributes(uint size, void *attrs);
98 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) +
99 sizeof(CSA_attribute) * num_elem)) == NULL)
102 hptr = (_DtCmMemHeader *)ptr;
103 hptr->mark = _DtCM_OUR_MEMORY;
104 hptr->num_elem = num_elem;
105 hptr->fproc = _DtCm_free_attributes;
106 return ((CSA_attribute *)(ptr + sizeof(_DtCmMemHeader)));
110 extern CSA_entry_handle *
111 _DtCm_alloc_entry_handles(uint num_elem)
114 _DtCmMemHeader *hptr;
115 extern void _DtCm_free_entry_handles(uint num_entries, void *entries);
117 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) +
118 sizeof(CSA_entry_handle) * num_elem)) == NULL)
121 hptr = (_DtCmMemHeader *)ptr;
122 hptr->mark = _DtCM_OUR_MEMORY;
123 hptr->num_elem = num_elem;
124 hptr->fproc = _DtCm_free_entry_handles;
125 return ((CSA_entry_handle *)(ptr + sizeof(_DtCmMemHeader)));
130 _DtCm_alloc_entry(uint size)
133 _DtCmMemHeader *hptr;
134 extern void _DtCm_free_entry_content(uint dummy, void *entry);
136 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) + size)) == NULL)
139 hptr = (_DtCmMemHeader *)ptr;
140 hptr->mark = _DtCM_OUR_MEMORY;
142 hptr->fproc = _DtCm_free_entry_content;
143 return ((void *)(ptr + sizeof(_DtCmMemHeader)));
147 extern CSA_reminder_reference *
148 _DtCm_alloc_reminder_references(uint num_elem)
151 _DtCmMemHeader *hptr;
152 extern void _DtCm_free_reminder_references(uint num_rems, void *rems);
154 if ((ptr = calloc(1, sizeof(_DtCmMemHeader) +
155 sizeof(CSA_reminder_reference) * num_elem)) == NULL)
158 hptr = (_DtCmMemHeader *)ptr;
159 hptr->mark = _DtCM_OUR_MEMORY;
160 hptr->num_elem = num_elem;
161 hptr->fproc = _DtCm_free_reminder_references;
162 return ((CSA_reminder_reference *)(ptr +
163 sizeof(_DtCmMemHeader)));
167 extern CSA_return_code
168 _DtCm_free(void *ptr)
170 _DtCmMemHeader *hptr;
173 return (CSA_E_INVALID_MEMORY);
175 hptr = (_DtCmMemHeader *)(((char *)ptr) - sizeof(_DtCmMemHeader));
177 if (hptr->mark != _DtCM_OUR_MEMORY)
178 return (CSA_E_INVALID_MEMORY);
181 hptr->fproc(hptr->num_elem, ptr);
183 return (CSA_SUCCESS);
188 _DtCm_free_character_pointers(uint num_elem, void *vptr)
190 char **ptr = (char **)vptr;
193 for (i = 0; i < num_elem; i++) {
201 /******************************************************************************
202 * static functions used within in the file
203 ******************************************************************************/
206 _DtCm_free_calendar_users(uint num_elem, void *vptr)
208 CSA_calendar_user *ptr = (CSA_calendar_user *)vptr;
211 for (i = 0; i < num_elem; i++) {
212 if (ptr[i].user_name)
213 free(ptr[i].user_name);
215 if (ptr[i].calendar_address)
216 free(ptr[i].calendar_address);