Main Page | Data Structures | Directories | File List | Data Fields | Globals

mrss_free.c

Go to the documentation of this file.
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 */

Generated on Thu Jul 28 12:15:04 2005 for libmrss by  doxygen 1.4.3-20050530