00001 /* mRss - Copyright (C) 2005 bakunin - Andrea Marchesini 00002 * <bakunin@autistici.org> 00003 * 00004 * This source code is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Public License as published 00006 * by the Free Software Foundation; either version 2 of the License, 00007 * or (at your option) any later version. 00008 * 00009 * This source code is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 * Please refer to the GNU Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Public License along with 00015 * this source code; if not, write to: 00016 * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifdef HAVE_CONFIG_H 00020 #include <config.h> 00021 #else 00022 # error Use configure; make; make install 00023 #endif 00024 00025 #include "mrss.h" 00026 #include "mrss_internal.h" 00027 00028 static void __mrss_free_channel (mrss_t * mrss); 00029 static void __mrss_free_category (mrss_category_t * category); 00030 static void __mrss_free_hour (mrss_hour_t * hour); 00031 static void __mrss_free_day (mrss_day_t * day); 00032 static void __mrss_free_item (mrss_item_t * item); 00033 00034 static void 00035 __mrss_free_channel (mrss_t * mrss) 00036 { 00037 mrss_hour_t *hour; 00038 mrss_day_t *day; 00039 mrss_category_t *category; 00040 mrss_item_t *item; 00041 void *old; 00042 00043 if (!mrss) 00044 return; 00045 00046 if (mrss->file) 00047 free (mrss->file); 00048 00049 if (mrss->title) 00050 free (mrss->title); 00051 00052 if (mrss->description) 00053 free (mrss->description); 00054 00055 if (mrss->link) 00056 free (mrss->link); 00057 00058 if (mrss->language) 00059 free (mrss->language); 00060 00061 if (mrss->rating) 00062 free (mrss->rating); 00063 00064 if (mrss->copyright) 00065 free (mrss->copyright); 00066 00067 if (mrss->pubDate) 00068 free (mrss->pubDate); 00069 00070 if (mrss->lastBuildDate) 00071 free (mrss->lastBuildDate); 00072 00073 if (mrss->docs) 00074 free (mrss->docs); 00075 00076 if (mrss->managingeditor) 00077 free (mrss->managingeditor); 00078 00079 if (mrss->webMaster) 00080 free (mrss->webMaster); 00081 00082 if (mrss->image_title) 00083 free (mrss->image_title); 00084 00085 if (mrss->image_url) 00086 free (mrss->image_url); 00087 00088 if (mrss->image_link) 00089 free (mrss->image_link); 00090 00091 if (mrss->image_description) 00092 free (mrss->image_description); 00093 00094 if (mrss->textinput_title) 00095 free (mrss->textinput_title); 00096 00097 if (mrss->textinput_description) 00098 free (mrss->textinput_description); 00099 00100 if (mrss->textinput_name) 00101 free (mrss->textinput_name); 00102 00103 if (mrss->textinput_link) 00104 free (mrss->textinput_link); 00105 00106 if (mrss->generator) 00107 free (mrss->generator); 00108 00109 if (mrss->cloud) 00110 free (mrss->cloud); 00111 00112 if (mrss->cloud_domain) 00113 free (mrss->cloud_domain); 00114 00115 if (mrss->cloud_path) 00116 free (mrss->cloud_path); 00117 00118 if (mrss->cloud_registerProcedure) 00119 free (mrss->cloud_registerProcedure); 00120 00121 if (mrss->cloud_protocol) 00122 free (mrss->cloud_protocol); 00123 00124 category = mrss->category; 00125 while (category) 00126 { 00127 old = category; 00128 category = category->next; 00129 00130 __mrss_free_category ((mrss_category_t *) old); 00131 } 00132 00133 hour = mrss->skipHours; 00134 while (hour) 00135 { 00136 old = hour; 00137 hour = hour->next; 00138 00139 __mrss_free_hour ((mrss_hour_t *) old); 00140 } 00141 00142 day = mrss->skipDays; 00143 while (day) 00144 { 00145 old = day; 00146 day = day->next; 00147 00148 __mrss_free_day ((mrss_day_t *) old); 00149 } 00150 00151 item = mrss->item; 00152 while (item) 00153 { 00154 old = item; 00155 item = item->next; 00156 00157 __mrss_free_item ((mrss_item_t *) old); 00158 } 00159 } 00160 00161 static void 00162 __mrss_free_category (mrss_category_t * category) 00163 { 00164 if (!category) 00165 return; 00166 00167 if (category->category) 00168 free (category->category); 00169 00170 if (category->domain) 00171 free (category->domain); 00172 00173 free (category); 00174 } 00175 00176 static void 00177 __mrss_free_hour (mrss_hour_t * hour) 00178 { 00179 if (!hour) 00180 return; 00181 00182 if (hour->hour) 00183 free (hour->hour); 00184 00185 free (hour); 00186 } 00187 00188 static void 00189 __mrss_free_day (mrss_day_t * day) 00190 { 00191 if (!day) 00192 return; 00193 00194 if (day->day) 00195 free (day->day); 00196 00197 free (day); 00198 } 00199 00200 static void 00201 __mrss_free_item (mrss_item_t * item) 00202 { 00203 mrss_category_t *category, *old; 00204 00205 if (!item) 00206 return; 00207 00208 if (item->title) 00209 free (item->title); 00210 00211 if (item->link) 00212 free (item->link); 00213 00214 if (item->description) 00215 free (item->description); 00216 00217 if (item->author) 00218 free (item->author); 00219 00220 if (item->comments) 00221 free (item->comments); 00222 00223 if (item->pubDate) 00224 free (item->pubDate); 00225 00226 if (item->guid) 00227 free (item->guid); 00228 00229 if (item->source) 00230 free (item->source); 00231 00232 if (item->source_url) 00233 free (item->source_url); 00234 00235 if (item->enclosure) 00236 free (item->enclosure); 00237 00238 if (item->enclosure_url) 00239 free (item->enclosure_url); 00240 00241 if (item->enclosure_type) 00242 free (item->enclosure_type); 00243 00244 category = item->category; 00245 while (category) 00246 { 00247 old = category; 00248 category = category->next; 00249 00250 __mrss_free_category (old); 00251 } 00252 00253 free (item); 00254 } 00255 00256 /*************************** EXTERNAL FUNCTION ******************************/ 00257 00258 mrss_error_t 00259 mrss_free (mrss_generic_t element) 00260 { 00261 mrss_t *tmp; 00262 00263 tmp = (mrss_t *) element; 00264 00265 switch (tmp->element) 00266 { 00267 case MRSS_ELEMENT_CHANNEL: 00268 __mrss_free_channel ((mrss_t *) element); 00269 break; 00270 00271 case MRSS_ELEMENT_ITEM: 00272 __mrss_free_item ((mrss_item_t *) element); 00273 break; 00274 00275 case MRSS_ELEMENT_SKIPHOURS: 00276 __mrss_free_hour ((mrss_hour_t *) element); 00277 break; 00278 00279 case MRSS_ELEMENT_SKIPDAYS: 00280 __mrss_free_day ((mrss_day_t *) element); 00281 break; 00282 00283 case MRSS_ELEMENT_CATEGORY: 00284 __mrss_free_category ((mrss_category_t *) element); 00285 break; 00286 00287 default: 00288 return MRSS_ERR_DATA; 00289 } 00290 00291 return MRSS_OK; 00292 } 00293 00294 /* EOF */