summaryrefslogtreecommitdiff
path: root/packages/libmrss/files/fix_atom_date_locale.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/libmrss/files/fix_atom_date_locale.patch')
-rw-r--r--packages/libmrss/files/fix_atom_date_locale.patch122
1 files changed, 122 insertions, 0 deletions
diff --git a/packages/libmrss/files/fix_atom_date_locale.patch b/packages/libmrss/files/fix_atom_date_locale.patch
new file mode 100644
index 0000000000..4d46033d10
--- /dev/null
+++ b/packages/libmrss/files/fix_atom_date_locale.patch
@@ -0,0 +1,122 @@
+The Atom date formating code tries to create a RFC822 date. This date
+requires to use the C locale for the date (for weekday-names and month-names).
+
+This patch uses new POSIX functionality to create a C locale and strftime_l
+to create a right RFC822 date.
+
+Index: libmrss-0.17/src/mrss.h
+===================================================================
+--- libmrss-0.17.orig/src/mrss.h 2007-04-01 00:29:06.000000000 +0200
++++ libmrss-0.17/src/mrss.h 2007-04-01 01:22:25.000000000 +0200
+@@ -364,6 +364,9 @@
+ mrss_element_t element;
+ int allocated;
+
++ /** For internal use only: */
++ void* c_locale;
++
+ /* Data: */
+
+ char *file;
+Index: libmrss-0.17/src/mrss_free.c
+===================================================================
+--- libmrss-0.17.orig/src/mrss_free.c 2007-04-01 00:32:56.000000000 +0200
++++ libmrss-0.17/src/mrss_free.c 2007-04-01 15:45:44.000000000 +0200
+@@ -22,9 +22,14 @@
+ # error Use configure; make; make install
+ #endif
+
++#define _GNU_SOURCE
++
+ #include "mrss.h"
+ #include "mrss_internal.h"
+
++#include <locale.h>
++
++
+ static void __mrss_free_channel (mrss_t * mrss);
+ static void __mrss_free_category (mrss_category_t * category);
+ static void __mrss_free_hour (mrss_hour_t * hour);
+@@ -202,6 +207,9 @@
+ __mrss_free_item ((mrss_item_t *) old);
+ }
+
++ if (mrss->c_locale)
++ freelocale (mrss->c_locale);
++
+ if (mrss->allocated)
+ free (mrss);
+ }
+Index: libmrss-0.17/src/mrss_parser.c
+===================================================================
+--- libmrss-0.17.orig/src/mrss_parser.c 2007-03-30 01:07:56.000000000 +0200
++++ libmrss-0.17/src/mrss_parser.c 2007-04-01 16:40:57.000000000 +0200
+@@ -22,9 +22,13 @@
+ # error Use configure; make; make install
+ #endif
+
++#define _GNU_SOURCE
++
+ #include "mrss.h"
+ #include "mrss_internal.h"
+
++#include <locale.h>
++
+ static void
+ __mrss_parse_tag_insert (mrss_tag_t ** where, mrss_tag_t * what)
+ {
+@@ -133,7 +137,7 @@
+ }
+
+ static char *
+-__mrss_atom_prepare_date (char *datestr)
++__mrss_atom_prepare_date (mrss_t *data, char *datestr)
+ {
+ char *ret = NULL;
+ if (datestr)
+@@ -150,8 +154,14 @@
+ stm.tm_year -= 1900;
+ char datebuf[256];
+ free (datestr);
+- strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %H:%M:%S %z",
+- &stm);
++
++ if (!data->c_locale) {
++ printf( "Creating the locale\n" );
++ data->c_locale = newlocale(LC_ALL_MASK,"C",NULL);
++ }
++
++ strftime_l (datebuf, sizeof (datebuf), "%a, %d %b %Y %H:%M:%S %z",
++ &stm, data->c_locale);
+ ret = strdup (datebuf);
+ }
+ }
+@@ -269,16 +279,16 @@
+ else if (!strcmp (cur->value, "published") && !item->pubDate
+ && data->version == MRSS_VERSION_ATOM_1_0)
+ item->pubDate =
+- __mrss_atom_prepare_date (nxmle_get_string (cur, NULL));
++ __mrss_atom_prepare_date (data, nxmle_get_string (cur, NULL));
+ else if (!strcmp(cur->value, "updated" ) && !item->pubDate
+ && data->version == MRSS_VERSION_ATOM_1_0)
+ item->pubDate =
+- __mrss_atom_prepare_date (nxmle_get_string (cur, NULL));
++ __mrss_atom_prepare_date (data, nxmle_get_string (cur, NULL));
+
+ /* issued -> pubDate (Atom 0.3) */
+ else if (!strcmp (cur->value, "issued") && !item->pubDate)
+ item->pubDate =
+- __mrss_atom_prepare_date (nxmle_get_string (cur, NULL));
++ __mrss_atom_prepare_date (data, nxmle_get_string (cur, NULL));
+
+ /* id -> guid */
+ else if (!strcmp (cur->value, "id") && !item->guid
+@@ -701,7 +711,7 @@
+ /* updated -> lastBuildDate */
+ else if (!strcmp (cur->value, "updated"))
+ data->lastBuildDate =
+- __mrss_atom_prepare_date (nxmle_get_string (cur, NULL));
++ __mrss_atom_prepare_date (data, nxmle_get_string (cur, NULL));
+
+ /* author -> managingeditor */
+ else if (!strcmp (cur->value, "author"))