libDtSearch: Coverity 86579
[oweals/cde.git] / cde / lib / csa / refree.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
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)
10  * any later version.
11  *
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
16  * details.
17  *
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
22  */
23 /* $XConsortium: refree.c /main/1 1996/04/21 19:24:08 drk $ */
24 /*
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.
29  */
30
31 #include <time.h>
32 #include <stdlib.h>
33 #include "rerule.h"
34
35 #define RE_DAILY(re)    (re->re_data.re_daily)
36 #define RE_WEEKLY(re)   (re->re_data.re_weekly)
37 #define RE_MONTHLY(re)  (re->re_data.re_monthly)
38 #define RE_YEARLY(re)   (re->re_data.re_yearly)
39
40 /* 
41  * Deallocate a RepeatEvent structure.
42  */
43 void
44 _DtCm_free_re(
45         RepeatEvent     *re)
46 {
47         int              i;
48
49         if (!re) return;
50
51         switch (re->re_type) {
52         case RT_MINUTE:
53                 break;
54         case RT_DAILY:
55                 if (RE_DAILY(re)->dd_ntime)
56                         free(RE_DAILY(re)->dd_time);
57                 if (RE_DAILY(re)) 
58                         free (RE_DAILY(re));
59                 break;
60         case RT_WEEKLY:
61                 if (RE_WEEKLY(re)->wd_ndaytime) {
62                         for (i = 0; i < RE_WEEKLY(re)->wd_ndaytime; i++) {
63                                 if (RE_WEEKLY(re)->wd_daytime[i].dt_ntime)
64                                         free(
65                                           RE_WEEKLY(re)->wd_daytime[i].dt_time);
66                         }
67                         free(RE_WEEKLY(re)->wd_daytime);
68                 }
69                 if (RE_WEEKLY(re)) 
70                         free (RE_WEEKLY(re));
71                 break;
72         case RT_MONTHLY_POSITION:
73                 if (RE_MONTHLY(re)->md_nitems) {
74                         for (i = 0; i < RE_MONTHLY(re)->md_nitems; i++) {
75                                 if (RE_MONTHLY(re)->md_weektime[i].wdt_nday)
76                                         free(RE_MONTHLY(re)->
77                                                 md_weektime[i].wdt_day);
78                                 if (RE_MONTHLY(re)->md_weektime[i].wdt_ntime)
79                                         free(RE_MONTHLY(re)->
80                                                 md_weektime[i].wdt_time);
81                                 if (RE_MONTHLY(re)->md_weektime[i].wdt_nweek)
82                                         free(RE_MONTHLY(re)->
83                                                 md_weektime[i].wdt_week);
84                         }
85                         free(RE_MONTHLY(re)->md_weektime);
86                 }
87                 if (RE_MONTHLY(re)) 
88                         free (RE_MONTHLY(re));
89                 break;
90         case RT_MONTHLY_DAY:
91                 if (RE_MONTHLY(re)->md_nitems)
92                         free(RE_MONTHLY(re)->md_days);
93                 if (RE_MONTHLY(re)) 
94                         free (RE_MONTHLY(re));
95                 break;
96         case RT_YEARLY_MONTH:
97         case RT_YEARLY_DAY:
98                 if (RE_YEARLY(re)->yd_nitems)
99                         free(RE_YEARLY(re)->yd_items);
100                 if (RE_YEARLY(re)) 
101                         free(RE_YEARLY(re));
102                 break;
103         }
104
105         free(re);
106 }
107
108 /* 
109  * Deallocate a RepeatEventState structure.
110  */
111 void
112 _DtCm_free_re_state(
113         RepeatEventState        *res)
114 {
115         if (!res) return;
116
117         free(res);
118 }