#include "mrss.h"
#include "mrss_internal.h"
Include dependency graph for mrss_edit.c:
Go to the source code of this file.
|
Value: integer=(int *)value; \
*integer=x;
Definition at line 62 of file mrss_edit.c. Referenced by __mrss_get_channel(), and __mrss_get_item(). |
|
Value: string = (char **)value; \ if (!x) *string = NULL; \ else if(!(*string = strdup(x))) return MRSS_ERR_POSIX; Definition at line 57 of file mrss_edit.c. Referenced by __mrss_get_category(), __mrss_get_channel(), __mrss_get_day(), __mrss_get_hour(), and __mrss_get_item(). |
|
Definition at line 54 of file mrss_edit.c. Referenced by __mrss_set_channel(), and __mrss_set_item(). |
|
Value: if(x) free(x); \ if(value && !(x=strdup(value))) return MRSS_ERR_POSIX; \ else if(!value) x=NULL; Definition at line 49 of file mrss_edit.c. Referenced by __mrss_set_category(), __mrss_set_channel(), __mrss_set_day(), __mrss_set_hour(), and __mrss_set_item(). |
|
Definition at line 661 of file mrss_edit.c. References __MRSS_GET_STRING, mrss_category_t::category, mrss_category_t::domain, MRSS_ERR_DATA, MRSS_FLAG_CATEGORY, MRSS_FLAG_CATEGORY_DOMAIN, and MRSS_OK. Referenced by mrss_get(). 00662 { 00663 mrss_flag_t flag; 00664 void *value; 00665 char **string; 00666 00667 while ((flag = va_arg (va, mrss_flag_t))) 00668 { 00669 value = va_arg (va, void *); 00670 00671 switch (flag) 00672 { 00673 case MRSS_FLAG_CATEGORY: 00674 __MRSS_GET_STRING (data->category); 00675 break; 00676 00677 case MRSS_FLAG_CATEGORY_DOMAIN: 00678 __MRSS_GET_STRING (data->domain); 00679 break; 00680 00681 default: 00682 return MRSS_ERR_DATA; 00683 } 00684 } 00685 00686 return MRSS_OK; 00687 }
|
|
|
Definition at line 636 of file mrss_edit.c. References __MRSS_GET_STRING, mrss_day_t::day, MRSS_ERR_DATA, MRSS_FLAG_DAY, and MRSS_OK. Referenced by mrss_get(). 00637 { 00638 mrss_flag_t flag; 00639 void *value; 00640 char **string; 00641 00642 while ((flag = va_arg (va, mrss_flag_t))) 00643 { 00644 value = va_arg (va, void *); 00645 00646 switch (flag) 00647 { 00648 case MRSS_FLAG_DAY: 00649 __MRSS_GET_STRING (data->day); 00650 break; 00651 00652 default: 00653 return MRSS_ERR_DATA; 00654 } 00655 } 00656 00657 return MRSS_OK; 00658 }
|
|
Definition at line 611 of file mrss_edit.c. References __MRSS_GET_STRING, mrss_hour_t::hour, MRSS_ERR_DATA, MRSS_FLAG_HOUR, and MRSS_OK. Referenced by mrss_get(). 00612 { 00613 mrss_flag_t flag; 00614 void *value; 00615 char **string; 00616 00617 while ((flag = va_arg (va, mrss_flag_t))) 00618 { 00619 value = va_arg (va, void *); 00620 00621 switch (flag) 00622 { 00623 case MRSS_FLAG_HOUR: 00624 __MRSS_GET_STRING (data->hour); 00625 break; 00626 00627 default: 00628 return MRSS_ERR_DATA; 00629 } 00630 } 00631 00632 return MRSS_OK; 00633 }
|
|
|
Definition at line 790 of file mrss_edit.c. References mrss_t::category, mrss_t::item, MRSS_ELEMENT_CATEGORY, MRSS_ELEMENT_ITEM, MRSS_ELEMENT_SKIPDAYS, MRSS_ELEMENT_SKIPHOURS, MRSS_ERR_DATA, MRSS_ERR_POSIX, MRSS_OK, mrss_t::skipDays, and mrss_t::skipHours. Referenced by mrss_new_subdata(). 00792 { 00793 mrss_item_t **item; 00794 mrss_hour_t **hour; 00795 mrss_day_t **day; 00796 mrss_category_t **category; 00797 00798 switch (element) 00799 { 00800 case MRSS_ELEMENT_ITEM: 00801 item = (mrss_item_t **) data; 00802 00803 if (!*item && !(*item = (mrss_item_t *) malloc (sizeof (mrss_item_t)))) 00804 return MRSS_ERR_POSIX; 00805 00806 memset (*item, 0, sizeof (mrss_item_t)); 00807 00808 (*item)->element = MRSS_ELEMENT_ITEM; 00809 (*item)->next = mrss->item; 00810 mrss->item = (*item); 00811 00812 break; 00813 00814 case MRSS_ELEMENT_SKIPHOURS: 00815 hour = (mrss_hour_t **) data; 00816 00817 if (!*hour && !(*hour = (mrss_hour_t *) malloc (sizeof (mrss_hour_t)))) 00818 return MRSS_ERR_POSIX; 00819 00820 memset (*hour, 0, sizeof (mrss_hour_t)); 00821 00822 (*hour)->element = MRSS_ELEMENT_SKIPHOURS; 00823 (*hour)->next = mrss->skipHours; 00824 mrss->skipHours = (*hour); 00825 00826 break; 00827 00828 case MRSS_ELEMENT_SKIPDAYS: 00829 day = (mrss_day_t **) data; 00830 00831 if (!*day && !(*day = (mrss_day_t *) malloc (sizeof (mrss_day_t)))) 00832 return MRSS_ERR_POSIX; 00833 00834 memset (*day, 0, sizeof (mrss_day_t)); 00835 00836 (*day)->element = MRSS_ELEMENT_SKIPDAYS; 00837 (*day)->next = mrss->skipDays; 00838 mrss->skipDays = (*day); 00839 00840 break; 00841 00842 case MRSS_ELEMENT_CATEGORY: 00843 category = (mrss_category_t **) data; 00844 00845 if (!*category 00846 && !(*category = 00847 (mrss_category_t *) malloc (sizeof (mrss_category_t)))) 00848 return MRSS_ERR_POSIX; 00849 00850 memset (*category, 0, sizeof (mrss_category_t)); 00851 00852 (*category)->element = MRSS_ELEMENT_CATEGORY; 00853 (*category)->next = mrss->category; 00854 mrss->category = (*category); 00855 00856 break; 00857 00858 default: 00859 return MRSS_ERR_DATA; 00860 } 00861 00862 return MRSS_OK; 00863 }
|
|
Definition at line 866 of file mrss_edit.c. References mrss_item_t::category, MRSS_ELEMENT_CATEGORY, MRSS_ERR_DATA, MRSS_ERR_POSIX, and MRSS_OK. Referenced by mrss_new_subdata(). 00868 { 00869 mrss_category_t **category; 00870 00871 switch (element) 00872 { 00873 case MRSS_ELEMENT_CATEGORY: 00874 category = (mrss_category_t **) data; 00875 00876 if (!*category 00877 && !(*category = 00878 (mrss_category_t *) malloc (sizeof (mrss_category_t)))) 00879 return MRSS_ERR_POSIX; 00880 00881 memset (*category, 0, sizeof (mrss_category_t)); 00882 00883 (*category)->element = MRSS_ELEMENT_CATEGORY; 00884 (*category)->next = item->category; 00885 item->category = (*category); 00886 00887 break; 00888 00889 default: 00890 return MRSS_ERR_DATA; 00891 } 00892 00893 return MRSS_OK; 00894 }
|
|
Definition at line 918 of file mrss_edit.c. References mrss_t::category, mrss_t::element, mrss_t::item, MRSS_ELEMENT_CATEGORY, MRSS_ELEMENT_ITEM, MRSS_ELEMENT_SKIPDAYS, MRSS_ELEMENT_SKIPHOURS, MRSS_ERR_DATA, MRSS_OK, mrss_category_t::next, mrss_day_t::next, mrss_hour_t::next, mrss_item_t::next, mrss_t::skipDays, and mrss_t::skipHours. Referenced by mrss_remove_subdata(). 00919 { 00920 mrss_hour_t *hour, *hour_tmp, *hour_old; 00921 mrss_day_t *day, *day_tmp, *day_old; 00922 mrss_category_t *category, *category_tmp, *category_old; 00923 mrss_item_t *item, *item_tmp, *item_old; 00924 00925 int found = 0; 00926 00927 mrss_t *tmp = (mrss_t *) subdata; 00928 00929 switch (tmp->element) 00930 { 00931 case MRSS_ELEMENT_ITEM: 00932 item = (mrss_item_t *) subdata; 00933 00934 item_tmp = data->item; 00935 item_old = NULL; 00936 00937 while (item_tmp) 00938 { 00939 if (item_tmp == item) 00940 { 00941 found++; 00942 00943 if (item_old) 00944 item_old->next = item_tmp->next; 00945 else 00946 data->item = item_tmp->next; 00947 00948 break; 00949 } 00950 00951 item_old = item_tmp; 00952 item_tmp = item_tmp->next; 00953 } 00954 00955 if (!found) 00956 return MRSS_ERR_DATA; 00957 00958 break; 00959 00960 case MRSS_ELEMENT_SKIPHOURS: 00961 hour = (mrss_hour_t *) subdata; 00962 00963 hour_tmp = data->skipHours; 00964 hour_old = NULL; 00965 00966 while (hour_tmp) 00967 { 00968 if (hour_tmp == hour) 00969 { 00970 found++; 00971 00972 if (hour_old) 00973 hour_old->next = hour_tmp->next; 00974 else 00975 data->skipHours = hour_tmp->next; 00976 00977 break; 00978 } 00979 00980 hour_old = hour_tmp; 00981 hour_tmp = hour_tmp->next; 00982 } 00983 00984 if (!found) 00985 return MRSS_ERR_DATA; 00986 00987 break; 00988 00989 case MRSS_ELEMENT_SKIPDAYS: 00990 day = (mrss_day_t *) subdata; 00991 00992 day_tmp = data->skipDays; 00993 day_old = NULL; 00994 00995 while (day_tmp) 00996 { 00997 if (day_tmp == day) 00998 { 00999 found++; 01000 01001 if (day_old) 01002 day_old->next = day_tmp->next; 01003 else 01004 data->skipDays = day_tmp->next; 01005 01006 break; 01007 } 01008 01009 day_old = day_tmp; 01010 day_tmp = day_tmp->next; 01011 } 01012 01013 if (!found) 01014 return MRSS_ERR_DATA; 01015 01016 break; 01017 01018 case MRSS_ELEMENT_CATEGORY: 01019 category = (mrss_category_t *) subdata; 01020 01021 category_tmp = data->category; 01022 category_old = NULL; 01023 01024 while (category_tmp) 01025 { 01026 if (category_tmp == category) 01027 { 01028 found++; 01029 01030 if (category_old) 01031 category_old->next = category_tmp->next; 01032 else 01033 data->category = category_tmp->next; 01034 01035 break; 01036 } 01037 01038 category_old = category_tmp; 01039 category_tmp = category_tmp->next; 01040 } 01041 01042 if (!found) 01043 return MRSS_ERR_DATA; 01044 01045 break; 01046 01047 default: 01048 return MRSS_ERR_DATA; 01049 } 01050 01051 return MRSS_OK; 01052 }
|
|
Definition at line 1055 of file mrss_edit.c. References mrss_item_t::category, mrss_t::element, MRSS_ELEMENT_CATEGORY, MRSS_ERR_DATA, MRSS_OK, and mrss_category_t::next. Referenced by mrss_remove_subdata(). 01056 { 01057 mrss_category_t *category, *category_tmp, *category_old; 01058 01059 int found = 0; 01060 01061 mrss_t *tmp = (mrss_t *) subdata; 01062 01063 switch (tmp->element) 01064 { 01065 case MRSS_ELEMENT_CATEGORY: 01066 category = (mrss_category_t *) subdata; 01067 01068 category_tmp = data->category; 01069 category_old = NULL; 01070 01071 while (category_tmp) 01072 { 01073 if (category_tmp == category) 01074 { 01075 found++; 01076 01077 if (category_old) 01078 category_old->next = category_tmp->next; 01079 else 01080 data->category = category_tmp->next; 01081 01082 break; 01083 } 01084 01085 category_old = category_tmp; 01086 category_tmp = category_tmp->next; 01087 } 01088 01089 if (!found) 01090 return MRSS_ERR_DATA; 01091 01092 break; 01093 01094 default: 01095 return MRSS_ERR_DATA; 01096 } 01097 01098 return MRSS_OK; 01099 }
|
|
Definition at line 319 of file mrss_edit.c. References __MRSS_SET_STRING, mrss_category_t::category, mrss_category_t::domain, MRSS_ERR_DATA, MRSS_FLAG_CATEGORY, MRSS_FLAG_CATEGORY_DOMAIN, and MRSS_OK. Referenced by mrss_set(). 00320 { 00321 mrss_flag_t flag; 00322 void *value; 00323 00324 while ((flag = va_arg (va, mrss_flag_t))) 00325 { 00326 value = va_arg (va, void *); 00327 00328 switch (flag) 00329 { 00330 case MRSS_FLAG_CATEGORY: 00331 __MRSS_SET_STRING (data->category); 00332 break; 00333 00334 case MRSS_FLAG_CATEGORY_DOMAIN: 00335 __MRSS_SET_STRING (data->domain); 00336 break; 00337 00338 default: 00339 return MRSS_ERR_DATA; 00340 } 00341 } 00342 00343 return MRSS_OK; 00344 }
|
|
|
Definition at line 295 of file mrss_edit.c. References __MRSS_SET_STRING, mrss_day_t::day, MRSS_ERR_DATA, MRSS_FLAG_DAY, and MRSS_OK. Referenced by mrss_set(). 00296 { 00297 mrss_flag_t flag; 00298 void *value; 00299 00300 while ((flag = va_arg (va, mrss_flag_t))) 00301 { 00302 value = va_arg (va, void *); 00303 00304 switch (flag) 00305 { 00306 case MRSS_FLAG_DAY: 00307 __MRSS_SET_STRING (data->day); 00308 break; 00309 00310 default: 00311 return MRSS_ERR_DATA; 00312 } 00313 } 00314 00315 return MRSS_OK; 00316 }
|
|
Definition at line 271 of file mrss_edit.c. References __MRSS_SET_STRING, mrss_hour_t::hour, MRSS_ERR_DATA, MRSS_FLAG_HOUR, and MRSS_OK. Referenced by mrss_set(). 00272 { 00273 mrss_flag_t flag; 00274 void *value; 00275 00276 while ((flag = va_arg (va, mrss_flag_t))) 00277 { 00278 value = va_arg (va, void *); 00279 00280 switch (flag) 00281 { 00282 case MRSS_FLAG_HOUR: 00283 __MRSS_SET_STRING (data->hour); 00284 break; 00285 00286 default: 00287 return MRSS_ERR_DATA; 00288 } 00289 } 00290 00291 return MRSS_OK; 00292 }
|
|
|
This function returns the request arguments. The syntax is the same of mrss_set but the values of the list are pointer to data element (int *, char **). If the key needs a char **, the value will be allocated. mrss_get(category, MRSS_FLAG_CATEGORY_DOMAIN, &string, MRSS_FLAG_END); if(string) free(string);
Definition at line 423 of file mrss_edit.c. References __mrss_get_category(), __mrss_get_channel(), __mrss_get_day(), __mrss_get_hour(), __mrss_get_item(), mrss_t::element, MRSS_ELEMENT_CATEGORY, MRSS_ELEMENT_CHANNEL, MRSS_ELEMENT_ITEM, MRSS_ELEMENT_SKIPDAYS, MRSS_ELEMENT_SKIPHOURS, and MRSS_ERR_DATA. 00424 { 00425 va_list va; 00426 mrss_error_t err; 00427 mrss_t *tmp; 00428 00429 if (!data) 00430 return MRSS_ERR_DATA; 00431 00432 va_start (va, data); 00433 00434 tmp = (mrss_t *) data; 00435 switch (tmp->element) 00436 { 00437 case MRSS_ELEMENT_CHANNEL: 00438 err = __mrss_get_channel ((mrss_t *) data, va); 00439 break; 00440 00441 case MRSS_ELEMENT_ITEM: 00442 err = __mrss_get_item ((mrss_item_t *) data, va); 00443 break; 00444 00445 case MRSS_ELEMENT_SKIPHOURS: 00446 err = __mrss_get_hour ((mrss_hour_t *) data, va); 00447 break; 00448 00449 case MRSS_ELEMENT_SKIPDAYS: 00450 err = __mrss_get_day ((mrss_day_t *) data, va); 00451 break; 00452 00453 case MRSS_ELEMENT_CATEGORY: 00454 err = __mrss_get_category ((mrss_category_t *) data, va); 00455 break; 00456 00457 default: 00458 err = MRSS_ERR_DATA; 00459 break; 00460 } 00461 00462 va_end (va); 00463 return err; 00464 }
Here is the call graph for this function: ![]() |
|
If you want create a new feed RSS from scratch, you need use this function as the first.
mrss_t *d; mrss_error_t err; char *string; int integer; d=NULL; // ->this is important! mrss_new(&d); err=mrss_set (d, MRSS_FLAG_VERSION, MRSS_VERSION_0_92, MRSS_FLAG_TITLE, "the title!", MRSS_FLAG_TTL, 12, MRSS_FLAG_END); if(err!=MRSS_OK) printf("%s\n",mrss_strerror(err)); err=mrss_get (d, MRSS_FLAG_TITLE, &string, MRSS_FLAG_TTL, &integer, MRSS_FLAG_END); if(err!=MRSS_OK) printf("%s\n",mrss_strerror(err)); printf("The title is: '%s'\n", string); printf("The ttl is: '%d'\n", integer); free(string);
Definition at line 67 of file mrss_edit.c. References MRSS_ELEMENT_CHANNEL, MRSS_ERR_DATA, MRSS_ERR_POSIX, and MRSS_OK. 00068 { 00069 if (!data) 00070 return MRSS_ERR_DATA; 00071 00072 if (!*data && !(*data = (mrss_t *) malloc (sizeof (mrss_t)))) 00073 return MRSS_ERR_POSIX; 00074 00075 memset (*data, 0, sizeof (mrss_t)); 00076 (*data)->element = MRSS_ELEMENT_CHANNEL; 00077 00078 return MRSS_OK; 00079 }
|
|
This function adds an element to another element. For example you can add a item to a channel, or a category to a item, and so on. Look this example: mrss_item_t *item = NULL; mrss_hour_t *hour = NULL; mrss_day_t day; // If the element is no null, the function mrss_category_t category, // does not alloc it mrss_new_subdata(mrss, MRSS_ELEMENT_ITEM, &item); mrss_new_subdata(mrss, MRSS_ELEMENT_SKIPHOURS, &hour); mrss_new_subdata(mrss, MRSS_ELEMENT_SKIPDAYS, &day); mrss_new_subdata(item, MRSS_ELEMENT_ITEM_CATEGORY, &category);
Definition at line 768 of file mrss_edit.c. References __mrss_new_subdata_channel(), __mrss_new_subdata_item(), mrss_t::element, MRSS_ELEMENT_CHANNEL, MRSS_ELEMENT_ITEM, and MRSS_ERR_DATA. 00770 { 00771 mrss_t *tmp; 00772 00773 if (!data || !new) 00774 return MRSS_ERR_DATA; 00775 00776 tmp = (mrss_t *) data; 00777 00778 switch (tmp->element) 00779 { 00780 case MRSS_ELEMENT_CHANNEL: 00781 return __mrss_new_subdata_channel ((mrss_t *) data, element, new); 00782 case MRSS_ELEMENT_ITEM: 00783 return __mrss_new_subdata_item ((mrss_item_t *) data, element, new); 00784 default: 00785 return MRSS_ERR_DATA; 00786 } 00787 }
Here is the call graph for this function: ![]() |
|
This function remove a subdata element. As first argoment you must specify the parent, and second argoment the child. mrss_remove_subdata(mrss, item);
Definition at line 897 of file mrss_edit.c. References __mrss_remove_subdata_channel(), __mrss_remove_subdata_item(), mrss_t::element, MRSS_ELEMENT_CHANNEL, MRSS_ELEMENT_ITEM, and MRSS_ERR_DATA. 00898 { 00899 mrss_t *tmp; 00900 00901 if (!data || !subdata) 00902 return MRSS_ERR_DATA; 00903 00904 tmp = (mrss_t *) data; 00905 00906 switch (tmp->element) 00907 { 00908 case MRSS_ELEMENT_CHANNEL: 00909 return __mrss_remove_subdata_channel ((mrss_t *) data, subdata); 00910 case MRSS_ELEMENT_ITEM: 00911 return __mrss_remove_subdata_item ((mrss_item_t *) data, subdata); 00912 default: 00913 return MRSS_ERR_DATA; 00914 } 00915 }
Here is the call graph for this function: ![]() |
|
For insert/replace/remove a flags use this function as this example: mrss_set(mrss, MRSS_FLAG_TITLE, "hello world", MRSS_FLAG_END); mrss_set(item, MRSS_FLAG_DESCRIPTION, NULL, MRSS_FLAG_END);
Definition at line 82 of file mrss_edit.c. References __mrss_set_category(), __mrss_set_channel(), __mrss_set_day(), __mrss_set_hour(), __mrss_set_item(), mrss_t::element, MRSS_ELEMENT_CATEGORY, MRSS_ELEMENT_CHANNEL, MRSS_ELEMENT_ITEM, MRSS_ELEMENT_SKIPDAYS, MRSS_ELEMENT_SKIPHOURS, and MRSS_ERR_DATA. 00083 { 00084 va_list va; 00085 mrss_error_t err; 00086 mrss_t *tmp; 00087 00088 if (!data) 00089 return MRSS_ERR_DATA; 00090 00091 va_start (va, data); 00092 00093 tmp = (mrss_t *) data; 00094 switch (tmp->element) 00095 { 00096 case MRSS_ELEMENT_CHANNEL: 00097 err = __mrss_set_channel ((mrss_t *) data, va); 00098 break; 00099 00100 case MRSS_ELEMENT_ITEM: 00101 err = __mrss_set_item ((mrss_item_t *) data, va); 00102 break; 00103 00104 case MRSS_ELEMENT_SKIPHOURS: 00105 err = __mrss_set_hour ((mrss_hour_t *) data, va); 00106 break; 00107 00108 case MRSS_ELEMENT_SKIPDAYS: 00109 err = __mrss_set_day ((mrss_day_t *) data, va); 00110 break; 00111 00112 case MRSS_ELEMENT_CATEGORY: 00113 err = __mrss_set_category ((mrss_category_t *) data, va); 00114 break; 00115 00116 default: 00117 err = MRSS_ERR_DATA; 00118 break; 00119 } 00120 00121 va_end (va); 00122 return err; 00123 }
Here is the call graph for this function: ![]() |