diff options
Diffstat (limited to 'source/xap/pan')
-rwxr-xr-x | source/xap/pan/pan.SlackBuild | 21 | ||||
-rw-r--r-- | source/xap/pan/pan.gcc44.diff | 50 | ||||
-rw-r--r-- | source/xap/pan/pan.gmime2.4.diff | 1271 |
3 files changed, 14 insertions, 1328 deletions
diff --git a/source/xap/pan/pan.SlackBuild b/source/xap/pan/pan.SlackBuild index 4bfbcf7f..0aab423c 100755 --- a/source/xap/pan/pan.SlackBuild +++ b/source/xap/pan/pan.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ PKGNAM=pan VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | cut -d - -f 2 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -56,12 +56,9 @@ mkdir -p $TMP $PKG cd $TMP rm -rf ${PKGNAM}-${VERSION} -tar xvf $CWD/${PKGNAM}-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1 cd ${PKGNAM}-$VERSION || exit 1 -zcat $CWD/pan.gmime2.4.diff.gz | patch -p1 || exit 1 -zcat $CWD/pan.gcc44.diff.gz | patch -p1 || exit 1 - # Make sure ownerships and permissions are sane: chown -R root:root . find . \ @@ -115,8 +112,18 @@ fi # Add a documentation directory: mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION cp -a \ - AUTHORS COPYING* INSTALL NEWS README TODO \ + AUTHORS COPYING* NEWS README* TODO \ $PKG/usr/doc/${PKGNAM}-$VERSION +# junk removal +rm -f $PKG/usr/doc/${PKGNAM}-$VERSION/{README.mingw,README.windows*} + +# If there's a ChangeLog, installing at least part of the recent history +# is useful, but don't let it get totally out of control: +if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog +fi mkdir -p $PKG/install #zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh diff --git a/source/xap/pan/pan.gcc44.diff b/source/xap/pan/pan.gcc44.diff deleted file mode 100644 index 22df125f..00000000 --- a/source/xap/pan/pan.gcc44.diff +++ /dev/null @@ -1,50 +0,0 @@ ---- ./pan/usenet-utils/numbers.cc.orig 2008-07-04 10:01:53.000000000 -0500 -+++ ./pan/usenet-utils/numbers.cc 2010-02-03 18:06:16.000000000 -0600 -@@ -19,6 +19,7 @@ - - #include <config.h> - #include <cctype> -+#include <cstdio> - #include <pan/general/string-view.h> - #include "numbers.h" - #include <algorithm> ---- ./pan/tasks/nntp.cc.orig 2008-07-05 14:16:06.000000000 -0500 -+++ ./pan/tasks/nntp.cc 2010-02-03 18:07:19.000000000 -0600 -@@ -20,6 +20,7 @@ - #include <config.h> - #include <cassert> - #include <cstdarg> -+#include <cstdio> - #include <cstdlib> // abort, atoi, strtoul - extern "C" { - #include <glib.h> ---- ./pan/tasks/nntp-pool.cc.orig 2008-07-05 01:39:27.000000000 -0500 -+++ ./pan/tasks/nntp-pool.cc 2010-02-03 18:07:55.000000000 -0600 -@@ -19,6 +19,7 @@ - - #include <config.h> - #include <ctime> -+#include <cstdio> - #include <glib/gi18n.h> - #include <pan/general/debug.h> - #include <pan/general/log.h> ---- ./pan/general/progress.cc.orig 2007-08-01 12:00:01.000000000 -0500 -+++ ./pan/general/progress.cc 2010-02-03 18:05:38.000000000 -0600 -@@ -19,6 +19,7 @@ - - #include <config.h> - #include <cstdarg> -+#include <cstdio> - #include "progress.h" - #include "string-view.h" - ---- ./pan/general/log.cc.orig 2007-08-01 12:00:01.000000000 -0500 -+++ ./pan/general/log.cc 2010-02-03 18:05:19.000000000 -0600 -@@ -20,6 +20,7 @@ - #include <config.h> - #include <iostream> - #include <cstdarg> -+#include <cstdio> - #include "log.h" - - using namespace pan; diff --git a/source/xap/pan/pan.gmime2.4.diff b/source/xap/pan/pan.gmime2.4.diff deleted file mode 100644 index 4816ea6c..00000000 --- a/source/xap/pan/pan.gmime2.4.diff +++ /dev/null @@ -1,1271 +0,0 @@ -diff -ru pan-0.133.orig/configure pan-0.133/configure ---- pan-0.133.orig/configure 2008-07-29 19:02:08.000000000 -0700 -+++ pan-0.133/configure 2009-09-12 14:58:05.000000000 -0700 -@@ -2377,7 +2377,7 @@ - - PCRE_REQUIRED=5.0 - GLIB_REQUIRED=2.4.0 --GMIME_REQUIRED=2.1.9 -+GMIME_REQUIRED=2.3.5 - GTK_REQUIRED=2.4.0 - GTKSPELL_REQUIRED=2.0.7 - -@@ -7957,12 +7957,12 @@ - pkg_cv_GMIME_CFLAGS="$GMIME_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ -- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gmime-2.0 >= \$GMIME_REQUIRED\"") >&5 -- ($PKG_CONFIG --exists --print-errors "gmime-2.0 >= $GMIME_REQUIRED") 2>&5 -+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gmime-2.4 >= \$GMIME_REQUIRED\"") >&5 -+ ($PKG_CONFIG --exists --print-errors "gmime-2.4 >= $GMIME_REQUIRED") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- pkg_cv_GMIME_CFLAGS=`$PKG_CONFIG --cflags "gmime-2.0 >= $GMIME_REQUIRED" 2>/dev/null` -+ pkg_cv_GMIME_CFLAGS=`$PKG_CONFIG --cflags "gmime-2.4 >= $GMIME_REQUIRED" 2>/dev/null` - else - pkg_failed=yes - fi -@@ -7973,12 +7973,12 @@ - pkg_cv_GMIME_LIBS="$GMIME_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ -- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gmime-2.0 >= \$GMIME_REQUIRED\"") >&5 -- ($PKG_CONFIG --exists --print-errors "gmime-2.0 >= $GMIME_REQUIRED") 2>&5 -+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gmime-2.4 >= \$GMIME_REQUIRED\"") >&5 -+ ($PKG_CONFIG --exists --print-errors "gmime-2.4 >= $GMIME_REQUIRED") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- pkg_cv_GMIME_LIBS=`$PKG_CONFIG --libs "gmime-2.0 >= $GMIME_REQUIRED" 2>/dev/null` -+ pkg_cv_GMIME_LIBS=`$PKG_CONFIG --libs "gmime-2.4 >= $GMIME_REQUIRED" 2>/dev/null` - else - pkg_failed=yes - fi -@@ -7996,14 +7996,14 @@ - _pkg_short_errors_supported=no - fi - if test $_pkg_short_errors_supported = yes; then -- GMIME_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gmime-2.0 >= $GMIME_REQUIRED" 2>&1` -+ GMIME_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gmime-2.4 >= $GMIME_REQUIRED" 2>&1` - else -- GMIME_PKG_ERRORS=`$PKG_CONFIG --print-errors "gmime-2.0 >= $GMIME_REQUIRED" 2>&1` -+ GMIME_PKG_ERRORS=`$PKG_CONFIG --print-errors "gmime-2.4 >= $GMIME_REQUIRED" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GMIME_PKG_ERRORS" >&5 - -- { { echo "$as_me:$LINENO: error: Package requirements (gmime-2.0 >= $GMIME_REQUIRED) were not met: -+ { { echo "$as_me:$LINENO: error: Package requirements (gmime-2.4 >= $GMIME_REQUIRED) were not met: - - $GMIME_PKG_ERRORS - -@@ -8014,7 +8014,7 @@ - and GMIME_LIBS to avoid the need to call pkg-config. - See the pkg-config man page for more details. - " >&5 --echo "$as_me: error: Package requirements (gmime-2.0 >= $GMIME_REQUIRED) were not met: -+echo "$as_me: error: Package requirements (gmime-2.4 >= $GMIME_REQUIRED) were not met: - - $GMIME_PKG_ERRORS - -diff -ru pan-0.133.orig/configure.in pan-0.133/configure.in ---- pan-0.133.orig/configure.in 2008-07-29 19:00:01.000000000 -0700 -+++ pan-0.133/configure.in 2009-09-12 14:52:37.000000000 -0700 -@@ -18,7 +18,7 @@ - - PCRE_REQUIRED=5.0 - GLIB_REQUIRED=2.4.0 --GMIME_REQUIRED=2.1.9 -+GMIME_REQUIRED=2.3.5 - GTK_REQUIRED=2.4.0 - GTKSPELL_REQUIRED=2.0.7 - AC_SUBST(PCRE_REQUIRED) -@@ -50,7 +50,7 @@ - - PKG_CHECK_MODULES(PCRE, libpcre >= $PCRE_REQUIRED) - AM_PATH_GLIB_2_0($GLIB_REQUIRED,,exit 1,gobject gmodule gthread) --PKG_CHECK_MODULES(GMIME, gmime-2.0 >= $GMIME_REQUIRED) -+PKG_CHECK_MODULES(GMIME, gmime-2.4 >= $GMIME_REQUIRED) - AM_PATH_GTK_2_0($GTK_REQUIRED,,exit 1,gthread) - - ---- pan-0.133.orig/pan/general/utf8-utils.cc 2008-07-04 23:13:14.000000000 -0700 -+++ pan-0.133/pan/general/utf8-utils.cc 2009-09-12 14:38:13.000000000 -0700 -@@ -136,7 +136,7 @@ - { - std::string s = content_to_utf8 (header, fallback_charset1, fallback_charset2); - if (header.strstr ("=?")) { -- char * decoded (g_mime_utils_8bit_header_decode ((const guchar*) s.c_str())); -+ char * decoded (g_mime_utils_header_decode_text (s.c_str())); - s = clean_utf8 (decoded); - g_free (decoded); - } -@@ -147,15 +147,26 @@ - pan :: mime_part_to_utf8 (GMimePart * part, - const char * fallback_charset) - { -+ GMimeDataWrapper *content; -+ GMimeStream *stream; -+ const char *charset; -+ GByteArray *buffer; - std::string ret; - - g_return_val_if_fail (GMIME_IS_PART(part), ret); - -- size_t content_len (0); -- const char * specified_charset (g_mime_object_get_content_type_parameter (GMIME_OBJECT (part), "charset")); -- const char * content = g_mime_part_get_content (part, &content_len); -- if (content && content_len) -- ret = content_to_utf8 (StringView (content, content_len), specified_charset, fallback_charset); -+ charset = g_mime_object_get_content_type_parameter (GMIME_OBJECT (part), "charset"); -+ content = g_mime_part_get_content_object (part); -+ -+ stream = g_mime_stream_mem_new (); -+ g_mime_data_wrapper_write_to_stream (content, stream); -+//g_object_unref(content); //SKG gmime 2.4 don't unref returned data wrapper -+ -+ buffer = ((GMimeStreamMem *) stream)->buffer; -+ -+ ret = content_to_utf8 (StringView ((const char *) buffer->data, buffer->len), charset, fallback_charset); -+ -+ g_object_unref (stream); - - return ret; - } -diff -ru pan-0.133.orig/pan/gui/body-pane.cc pan-0.133/pan/gui/body-pane.cc ---- pan-0.133.orig/pan/gui/body-pane.cc 2008-07-06 07:20:54.000000000 -0700 -+++ pan-0.133/pan/gui/body-pane.cc 2009-09-12 14:41:46.000000000 -0700 -@@ -837,7 +837,7 @@ - } - - g_object_unref (mem_stream); -- g_object_unref (wrapper); -+ //g_object_unref (wrapper); //SKG gmime 2.4 don't unref returned data wrapper - } - - // flush the loader -@@ -874,7 +874,7 @@ - return; - - GMimePart * part = GMIME_PART (obj); -- const GMimeContentType * type = g_mime_object_get_content_type (GMIME_OBJECT (part)); -+ GMimeContentType * type = g_mime_object_get_content_type (GMIME_OBJECT (part)); - - // decide whether or not this part is a picture - bool is_image (g_mime_content_type_is_type (type, "image", "*")); -@@ -952,11 +952,11 @@ - GtkTextIter iter; - gtk_text_buffer_get_end_iter (_buffer, &iter); - gtk_text_buffer_insert (_buffer, &iter, pch, -1); -- g_free (pch); -+// g_free (pch); //SKG don't unref returned const char * - } - } - void --BodyPane :: foreach_part_cb (GMimeObject* o, gpointer self) -+BodyPane :: foreach_part_cb (GMimeObject* /*parent*/, GMimeObject* o, gpointer self) - { - if (GMIME_IS_MULTIPART (o)) - g_mime_multipart_foreach (GMIME_MULTIPART (o), foreach_part_cb, self); -@@ -978,7 +978,7 @@ - const char * key, - const char * fallback_charset) - { -- const char * val (message ? g_mime_message_get_header (message, key) : ""); -+ const char * val (message ? g_mime_object_get_header ((GMimeObject *) message, key) : ""); - const std::string utf8_val (header_to_utf8 (val, fallback_charset)); - char * e (0); - if (strcmp (key, "From")) -@@ -1015,7 +1015,7 @@ - const char * key, - const char * fallback_charset) - { -- const char * val (msg ? g_mime_message_get_header (msg, key) : ""); -+ const char * val (msg ? g_mime_object_get_header ((GMimeObject *) msg, key) : ""); - return add_header_line (s, key_i18n, key, val, fallback_charset); - } - } -@@ -1037,19 +1037,19 @@ - - // conditional headers... - if (message) { -- const StringView newsgroups (g_mime_message_get_header (message, "Newsgroups")); -+ const StringView newsgroups (g_mime_object_get_header ((GMimeObject *) message, "Newsgroups")); - if (newsgroups.strchr(',')) { - l = add_header_line (s, message, _("Newsgroups"), "Newsgroups", fallback_charset); - w = std::max (w, l); - } -- const StringView followup_to (g_mime_message_get_header (message, "Followup-To")); -+ const StringView followup_to (g_mime_object_get_header ((GMimeObject *) message, "Followup-To")); - if (!followup_to.empty() && (followup_to!=newsgroups)) { - l = add_header_line (s, message, _("Followup-To"), "Followup-To", fallback_charset); - w = std::max (w, l); - } -- const StringView reply_to (g_mime_message_get_header (message, "Reply-To")); -+ const StringView reply_to (g_mime_object_get_header ((GMimeObject *) message, "Reply-To")); - if (!reply_to.empty()) { -- const StringView from (g_mime_message_get_header (message, "From")); -+ const StringView from (g_mime_object_get_header ((GMimeObject *) message, "From")); - StringView f_addr, f_name, rt_addr, rt_name; - GNKSA :: do_check_from (from, f_addr, f_name, false); - GNKSA :: do_check_from (reply_to, rt_addr, rt_name, false); -@@ -1070,7 +1070,7 @@ - - // set the x-face... - GdkPixbuf * pixbuf (0); -- const char * pch = message ? g_mime_message_get_header (message, "X-Face") : 0; -+ const char * pch = message ? g_mime_object_get_header ((GMimeObject *) message, "X-Face") : 0; - if (pch && _xface->window) - pixbuf = pan_gdk_pixbuf_create_from_x_face (gtk_widget_get_colormap(_xface), _xface->window, pch); - gtk_image_set_from_pixbuf (GTK_IMAGE(_xface), pixbuf); -@@ -1101,7 +1101,7 @@ - // maybe add the headers - const bool do_show_headers (_prefs.get_flag ("show-all-headers", false)); - if (message && do_show_headers) { -- char * headers (g_mime_message_get_headers (message)); -+ char * headers (g_mime_object_get_headers ((GMimeObject *) message)); - GtkTextIter end; - gtk_text_buffer_get_end_iter (_buffer, &end); - StringView line, v(headers); -@@ -1119,7 +1119,7 @@ - - // set the text buffer... - if (message) -- g_mime_message_foreach_part (message, foreach_part_cb, this); -+ g_mime_message_foreach (message, foreach_part_cb, this); - - // if there was a picture, scroll to it. - // otherwise scroll to the top of the body. -@@ -1514,7 +1514,7 @@ - const char * fallback_charset_1, - const char * fallback_charset_2) - { -- const StringView v (g_mime_message_get_header (msg, key)); -+ const StringView v (g_mime_object_get_header ((GMimeObject *) msg, key)); - std::string s; - if (!v.empty()) - s = header_to_utf8 (v, fallback_charset_1, fallback_charset_2); -@@ -1527,7 +1527,7 @@ - std::string body; - }; - -- void get_utf8_body_foreach_part (GMimeObject *o, gpointer user_data) -+ void get_utf8_body_foreach_part (GMimeObject * /*parent*/, GMimeObject *o, gpointer user_data) - { - if (GMIME_IS_MULTIPART(o)) - { -@@ -1538,7 +1538,7 @@ - else - { - GMimePart * part = GMIME_PART (o); -- const GMimeContentType * type = g_mime_object_get_content_type (o); -+ GMimeContentType * type = g_mime_object_get_content_type (o); - const bool is_text (g_mime_content_type_is_type (type, "text", "*")); - if (is_text) - { -@@ -1555,7 +1555,7 @@ - if (fallback_charset) - tmp.fallback_charset = fallback_charset; - if (source) -- g_mime_message_foreach_part (source, get_utf8_body_foreach_part, &tmp); -+ g_mime_message_foreach (source, get_utf8_body_foreach_part, &tmp); - return tmp.body; - } - } -@@ -1571,7 +1571,7 @@ - - // fallback character encodings - const char * group_charset (_charset.c_str()); -- const GMimeContentType * type (g_mime_object_get_content_type (GMIME_OBJECT(_message))); -+ GMimeContentType * type (g_mime_object_get_content_type (GMIME_OBJECT(_message))); - const char * message_charset (type ? g_mime_content_type_get_parameter (type, "charset") : 0); - - /// -@@ -1585,14 +1585,14 @@ - const std::string reply_to (get_header (_message, "Reply-To", message_charset, group_charset)); - if (is_reply || fup_to=="poster") { - const std::string& to (reply_to.empty() ? from : reply_to); -- g_mime_message_add_recipients_from_string (msg, (char*)GMIME_RECIPIENT_TYPE_TO, to.c_str()); -+ g_mime_message_add_recipients_from_string (msg, GMIME_RECIPIENT_TYPE_TO, to.c_str()); - } else { - const std::string& groups (fup_to.empty() ? newsgroups : fup_to); -- g_mime_message_add_header (msg, "Newsgroups", groups.c_str()); -+ g_mime_object_append_header ((GMimeObject *) msg, "Newsgroups", groups.c_str()); - } - - // Subject: -- StringView v = g_mime_message_get_header (_message, "Subject"); -+ StringView v = g_mime_object_get_header ((GMimeObject *) _message, "Subject"); - std::string h = header_to_utf8 (v, message_charset, group_charset); - std::string val (normalize_subject_re (h)); - if (val.find ("Re:") != 0) // add "Re: " if we don't have one -@@ -1601,22 +1601,22 @@ - - // attribution lines - -- const char * cpch = g_mime_message_get_header (_message, "From"); -+ const char * cpch = g_mime_object_get_header ((GMimeObject *) _message, "From"); - h = header_to_utf8 (cpch, message_charset, group_charset); -- g_mime_message_add_header (msg, "X-Draft-Attribution-Author", h.c_str()); -+ g_mime_object_append_header ((GMimeObject *) msg, "X-Draft-Attribution-Author", h.c_str()); - - cpch = g_mime_message_get_message_id (_message); - h = header_to_utf8 (cpch, message_charset, group_charset); -- g_mime_message_add_header (msg, "X-Draft-Attribution-Id", h.c_str()); -+ g_mime_object_append_header ((GMimeObject *) msg, "X-Draft-Attribution-Id", h.c_str()); - -- char * tmp = g_mime_message_get_date_string (_message); -+ char * tmp = g_mime_message_get_date_as_string (_message); - h = header_to_utf8 (tmp, message_charset, group_charset); -- g_mime_message_add_header (msg, "X-Draft-Attribution-Date", h.c_str()); -+ g_mime_object_append_header ((GMimeObject *) msg, "X-Draft-Attribution-Date", h.c_str()); - g_free (tmp); - - // references - const char * header = "References"; -- v = g_mime_message_get_header (_message, header); -+ v = g_mime_object_get_header ((GMimeObject *) _message, header); - val.assign (v.str, v.len); - if (!val.empty()) - val += ' '; -@@ -1624,7 +1624,7 @@ - val += g_mime_message_get_message_id (_message); - val += ">"; - val = GNKSA :: trim_references (val); -- g_mime_message_add_header (msg, header, val.c_str()); -+ g_mime_object_append_header ((GMimeObject *) msg, header, val.c_str()); - - /// - /// BODY -@@ -1660,17 +1660,17 @@ - // set the clone's content object with our modified body - GMimeStream * stream = g_mime_stream_mem_new (); - g_mime_stream_write_string (stream, s.c_str()); -- GMimeDataWrapper * wrapper = g_mime_data_wrapper_new_with_stream (stream, GMIME_PART_ENCODING_8BIT); -+ GMimeDataWrapper * wrapper = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_8BIT); - GMimePart * part = g_mime_part_new (); - GMimeContentType * new_type = g_mime_content_type_new_from_string ("text/plain; charset=UTF-8"); -- g_mime_part_set_content_type (part, new_type); -+ g_mime_object_set_content_type ((GMimeObject *) part, new_type); - g_mime_part_set_content_object (part, wrapper); -- g_mime_part_set_encoding (part, GMIME_PART_ENCODING_8BIT); -+ g_mime_part_set_content_encoding (part, GMIME_CONTENT_ENCODING_8BIT); - g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); - g_object_unref (wrapper); - g_object_unref (part); - g_object_unref (stream); --//std::cerr << LINE_ID << " here is the modified clone\n [" << g_mime_message_to_string(msg) << ']' << std::endl; -+//std::cerr << LINE_ID << " here is the modified clone\n [" << g_mime_object_to_string((GMimeObject *) msg) << ']' << std::endl; - } - - return msg; -diff -ru pan-0.133.orig/pan/gui/body-pane.h pan-0.133/pan/gui/body-pane.h ---- pan-0.133.orig/pan/gui/body-pane.h 2008-07-04 10:57:39.000000000 -0700 -+++ pan-0.133/pan/gui/body-pane.h 2009-09-08 20:40:40.000000000 -0700 -@@ -86,7 +86,7 @@ - void append_part (GMimeObject*, GtkAllocation*); - static gboolean expander_activated_idle (gpointer self); - static void expander_activated_cb (GtkExpander*, gpointer self); -- static void foreach_part_cb (GMimeObject*, gpointer self); -+ static void foreach_part_cb (GMimeObject*, GMimeObject*, gpointer self); - static void text_size_allocated (GtkWidget*, GtkAllocation*, gpointer); - static gboolean text_size_allocated_idle_cb (gpointer p); - void text_size_allocated_idle (); -diff -ru pan-0.133.orig/pan/gui/gui.cc pan-0.133/pan/gui/gui.cc ---- pan-0.133.orig/pan/gui/gui.cc 2008-07-05 00:14:56.000000000 -0700 -+++ pan-0.133/pan/gui/gui.cc 2009-09-12 14:44:06.000000000 -0700 -@@ -31,6 +31,7 @@ - #include <pan/general/file-util.h> - #include <pan/general/macros.h> - #include <pan/usenet-utils/scorefile.h> -+#include <pan/usenet-utils/mime-utils.h> - #include <pan/tasks/task-article.h> - #include <pan/tasks/task-groups.h> - #include <pan/tasks/task-xover.h> -@@ -567,7 +568,7 @@ - ArticleCache& c, const Article& a, const std::string& path): - _data(d), _queue(q), _root(r), _prefs(p), _cache(c), _article(a), _path(path) {} - -- static void foreach_part_cb (GMimeObject *o, gpointer self) -+ static void foreach_part_cb (GMimeObject * /*parent*/, GMimeObject *o, gpointer self) - { - static_cast<SaveArticlesFromNZB*>(self)->foreach_part (o); - } -@@ -591,7 +592,7 @@ - if (!tasks.empty()) - _queue.add_tasks (tasks, Queue::BOTTOM); - g_object_unref (mem_stream); -- g_object_unref (wrapper); -+// g_object_unref (wrapper); //SKG gmime 2.4 don't unref returned data wrapper - } - } - -@@ -601,7 +602,7 @@ - { - if (status == OK) { - GMimeMessage * message = _cache.get_message (_article.get_part_mids()); -- g_mime_message_foreach_part (message, foreach_part_cb, this); -+ g_mime_message_foreach (message, foreach_part_cb, this); - g_object_unref (message); - } - delete this; -@@ -1041,19 +1042,19 @@ - const char * cpch; - char * old_mid (g_strdup_printf ("<%s>", g_mime_message_get_message_id(message))); - GMimeMessage * new_message (g_mime_message_new (false)); -- g_mime_message_set_header (new_message, "Supersedes", old_mid); -+ g_mime_object_set_header ((GMimeObject *) new_message, "Supersedes", old_mid); - g_mime_message_set_sender (new_message, g_mime_message_get_sender (message)); - g_mime_message_set_subject (new_message, g_mime_message_get_subject (message)); -- g_mime_message_set_header (new_message, "Newsgroups", g_mime_message_get_header (message, "Newsgroups")); -- g_mime_message_set_header (new_message, "References", g_mime_message_get_header (message, "References")); -+ g_mime_object_set_header ((GMimeObject *) new_message, "Newsgroups", g_mime_object_get_header ((GMimeObject *) message, "Newsgroups")); -+ g_mime_object_set_header ((GMimeObject *) new_message, "References", g_mime_object_get_header ((GMimeObject *) message, "References")); - if ((cpch = g_mime_message_get_reply_to (message))) - g_mime_message_set_reply_to (new_message, cpch); -- if ((cpch = g_mime_message_get_header (message, "Followup-To"))) -- g_mime_message_set_header (new_message, "Followup-To", cpch); -+ if ((cpch = g_mime_object_get_header ((GMimeObject *) message, "Followup-To"))) -+ g_mime_object_set_header ((GMimeObject *) new_message, "Followup-To", cpch); - gboolean unused (false); -- char * body (g_mime_message_get_body (message, true, &unused)); -+ char * body (g_mime_message_get_body (message, &unused)); - GMimeStream * stream = g_mime_stream_mem_new_with_buffer (body, strlen(body)); -- GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_PART_ENCODING_DEFAULT); -+ GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); - GMimePart * part = g_mime_part_new (); - g_mime_part_set_content_object (part, content_object); - g_mime_message_set_mime_part (new_message, GMIME_OBJECT(part)); -@@ -1111,11 +1112,11 @@ - char * cancel_message = g_strdup_printf ("cancel <%s>", g_mime_message_get_message_id(message)); - g_mime_message_set_sender (cancel, g_mime_message_get_sender (message)); - g_mime_message_set_subject (cancel, "Cancel"); -- g_mime_message_set_header (cancel, "Newsgroups", g_mime_message_get_header (message, "Newsgroups")); -- g_mime_message_set_header (cancel, "Control", cancel_message); -+ g_mime_object_set_header ((GMimeObject *) cancel, "Newsgroups", g_mime_object_get_header ((GMimeObject *) message, "Newsgroups")); -+ g_mime_object_set_header ((GMimeObject *) cancel, "Control", cancel_message); - const char * body ("Ignore\r\nArticle canceled by author using " PACKAGE_STRING "\r\n"); - GMimeStream * stream = g_mime_stream_mem_new_with_buffer (body, strlen(body)); -- GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_PART_ENCODING_DEFAULT); -+ GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); - GMimePart * part = g_mime_part_new (); - g_mime_part_set_content_object (part, content_object); - g_mime_message_set_mime_part (cancel, GMIME_OBJECT(part)); -@@ -1194,12 +1195,12 @@ - newsgroups = group; - } - if (!newsgroups.empty()) -- g_mime_message_add_header (message, "Newsgroups", newsgroups.c_str()); -+ g_mime_object_append_header ((GMimeObject *) message, "Newsgroups", newsgroups.c_str()); - - // content type - GMimePart * part = g_mime_part_new (); -- g_mime_part_set_content_type (part, g_mime_content_type_new_from_string ("text/plain; charset=UTF-8")); -- g_mime_part_set_encoding (part, GMIME_PART_ENCODING_8BIT); -+ g_mime_object_set_content_type ((GMimeObject *) part, g_mime_content_type_new_from_string ("text/plain; charset=UTF-8")); -+ g_mime_part_set_content_encoding (part, GMIME_CONTENT_ENCODING_8BIT); - g_mime_message_set_mime_part (message, GMIME_OBJECT(part)); - g_object_unref (part); - -@@ -1754,8 +1755,8 @@ - g_snprintf (str, sizeof(str), "%s: %u/%u", _("Tasks"), running, size); - - // build the tooltip -- gulong queued, unused, stopped; -- guint64 KiB_remain; -+ long unsigned int queued, unused, stopped; //SKG MacPorts can't find function -+ uint64_t KiB_remain; //SKG using gulong and guint64 types. - double KiBps; - int hr, min, sec; - _queue.get_stats (queued, unused, stopped, -diff -ru pan-0.133.orig/pan/gui/pan.cc pan-0.133/pan/gui/pan.cc ---- pan-0.133.orig/pan/gui/pan.cc 2008-07-04 11:30:29.000000000 -0700 -+++ pan-0.133/pan/gui/pan.cc 2009-09-12 13:39:13.000000000 -0700 -@@ -211,7 +211,7 @@ - textdomain (GETTEXT_PACKAGE); - - g_thread_init (0); -- g_mime_init (GMIME_INIT_FLAG_UTF8); -+ g_mime_init (GMIME_ENABLE_RFC2047_WORKAROUNDS); - - bool gui(true), nzb(false); - std::string url; -diff -ru pan-0.133.orig/pan/gui/post-ui.cc pan-0.133/pan/gui/post-ui.cc ---- pan-0.133.orig/pan/gui/post-ui.cc 2008-07-13 06:32:11.000000000 -0700 -+++ pan-0.133/pan/gui/post-ui.cc 2009-09-12 13:04:51.000000000 -0700 -@@ -529,8 +529,8 @@ - { - std::string url, to, groups; - gboolean unused; -- char * headers (g_mime_message_get_headers (message)); -- char * body (g_mime_message_get_body (message, true, &unused)); -+ char * headers (g_mime_object_get_headers ((GMimeObject *) message)); -+ char * body (g_mime_message_get_body (message, &unused)); - StringView key, val, v(headers); - v.trim (); - while (v.pop_token (val, '\n') && val.pop_token(key,':')) { -@@ -629,7 +629,7 @@ - *** If this is email only, skip the rest of the posting... - *** we only stayed this long to get check_message() - **/ -- const StringView groups (g_mime_message_get_header (message, "Newsgroups")); -+ const StringView groups (g_mime_object_get_header ((GMimeObject *) message, "Newsgroups")); - if (groups.empty()) { - maybe_mail_message (message); - return true; -@@ -903,9 +903,9 @@ - */ - void pan_g_mime_message_set_message_id (GMimeMessage *msg, const char *mid) - { -- g_mime_message_add_header (msg, "Message-ID", mid); -+ g_mime_object_append_header ((GMimeObject *) msg, "Message-ID", mid); - char * bracketed = g_strdup_printf ("<%s>", mid); -- g_mime_header_set (GMIME_OBJECT(msg)->headers, "Message-ID", bracketed); -+ g_mime_header_list_set (GMIME_OBJECT(msg)->headers, "Message-ID", bracketed); - g_free (bracketed); - } - } -@@ -928,27 +928,27 @@ - // headers from the ui: To - const StringView to (gtk_entry_get_text (GTK_ENTRY(_to_entry))); - if (!to.empty()) -- g_mime_message_add_recipients_from_string (msg, (char*)GMIME_RECIPIENT_TYPE_TO, to.str); -+ g_mime_message_add_recipients_from_string (msg, GMIME_RECIPIENT_TYPE_TO, to.str); - - // headers from the ui: Newsgroups - const StringView groups (gtk_entry_get_text (GTK_ENTRY(_groups_entry))); - if (!groups.empty()) -- g_mime_message_set_header (msg, "Newsgroups", groups.str); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str); - - // headers from the ui: Followup-To - const StringView followupto (gtk_entry_get_text (GTK_ENTRY(_followupto_entry))); - if (!followupto.empty()) -- g_mime_message_set_header (msg, "Followup-To", followupto.str); -+ g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str); - - // headers from the ui: Reply-To - const StringView replyto (gtk_entry_get_text (GTK_ENTRY(_replyto_entry))); - if (!replyto.empty()) -- g_mime_message_set_header (msg, "Reply-To", replyto.str); -+ g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str); - - // add the 'hidden headers' - foreach_const (str2str_t, _hidden_headers, it) - if ((mode==DRAFTING) || (it->first.find ("X-Draft-")!=0)) -- g_mime_message_set_header (msg, it->first.c_str(), it->second.c_str()); -+ g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str()); - - // build headers from the 'more headers' entry field - std::map<std::string,std::string> headers; -@@ -964,14 +964,14 @@ - val.trim (); - std::string key_str (key.to_string()); - if (extra_header_is_editable (key, val)) -- g_mime_message_set_header (msg, key.to_string().c_str(), -- val.to_string().c_str()); -+ g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), -+ val.to_string().c_str()); - } - g_free (pch); - - // User-Agent - if (mode==POSTING && _prefs.get_flag (USER_AGENT_PREFS_KEY, true)) -- g_mime_message_set_header (msg, "User-Agent", get_user_agent()); -+ g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent()); - - // Message-ID - if (mode==POSTING && _prefs.get_flag (MESSAGE_ID_PREFS_KEY, false)) { -@@ -987,22 +987,22 @@ - const std::string charset ((mode==POSTING && !_charset.empty()) ? _charset : "UTF-8"); - if (charset != "UTF-8") { - // add a wrapper to convert from UTF-8 to $charset -- GMimeStream * tmp = g_mime_stream_filter_new_with_stream (stream); -+ GMimeStream * tmp = g_mime_stream_filter_new (stream); - g_object_unref (stream); - GMimeFilter * filter = g_mime_filter_charset_new ("UTF-8", charset.c_str()); - g_mime_stream_filter_add (GMIME_STREAM_FILTER(tmp), filter); - g_object_unref (filter); - stream = tmp; - } -- GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_PART_ENCODING_DEFAULT); -+ GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); - g_object_unref (stream); - GMimePart * part = g_mime_part_new (); - pch = g_strdup_printf ("text/plain; charset=%s", charset.c_str()); - GMimeContentType * type = g_mime_content_type_new_from_string (pch); - g_free (pch); -- g_mime_part_set_content_type (part, type); // part owns type now. type isn't refcounted. -+ g_mime_object_set_content_type ((GMimeObject *) part, type); // part owns type now. type isn't refcounted. - g_mime_part_set_content_object (part, content_object); -- g_mime_part_set_encoding (part, GMIME_PART_ENCODING_8BIT); -+ g_mime_part_set_content_encoding (part, GMIME_CONTENT_ENCODING_8BIT); - g_object_unref (content_object); - g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); - g_object_unref (part); -@@ -1036,7 +1036,7 @@ - - errno = 0; - std::ofstream o (filename); -- char * pch = g_mime_message_to_string (msg); -+ char * pch = g_mime_object_to_string ((GMimeObject *) msg); - o << pch; - o.close (); - -@@ -1504,16 +1504,16 @@ - std::string s = utf8ize (g_mime_message_get_subject (message)); - gtk_entry_set_text (GTK_ENTRY(_subject_entry), s.c_str()); - -- s = utf8ize (g_mime_message_get_header (message, "Newsgroups")); -+ s = utf8ize (g_mime_object_get_header ((GMimeObject *) message, "Newsgroups")); - gtk_entry_set_text (GTK_ENTRY(_groups_entry), s.c_str()); - -- s = utf8ize (g_mime_message_get_header (message, "Followup-To")); -+ s = utf8ize (g_mime_object_get_header ((GMimeObject *) message, "Followup-To")); - gtk_entry_set_text (GTK_ENTRY(_followupto_entry), s.c_str()); - -- s = utf8ize (g_mime_message_get_header (message, "Reply-To")); -+ s = utf8ize (g_mime_object_get_header ((GMimeObject *) message, "Reply-To")); - gtk_entry_set_text (GTK_ENTRY(_replyto_entry), s.c_str()); - -- const InternetAddressList * addresses = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO); -+ InternetAddressList * addresses = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO); - char * pch = internet_address_list_to_string (addresses, true); - s = utf8ize (pch); - gtk_entry_set_text (GTK_ENTRY(_to_entry), s.c_str()); -@@ -1521,16 +1521,34 @@ - - // update 'other headers' - SetMessageForeachHeaderData data; -- if (message->mime_part && g_mime_header_has_raw (message->mime_part->headers)) -- g_mime_header_foreach (message->mime_part->headers, set_message_foreach_header_func, &data); -- g_mime_header_foreach (GMIME_OBJECT(message)->headers, set_message_foreach_header_func, &data); -+ const char *name, *value; -+ GMimeHeaderIter iter; -+ -+ if (message->mime_part && g_mime_header_list_has_raw (message->mime_part->headers)) { -+ if (g_mime_header_list_get_iter (message->mime_part->headers, &iter)) { -+ do { -+ value = g_mime_header_iter_get_value (&iter); -+ name = g_mime_header_iter_get_name (&iter); -+ set_message_foreach_header_func (name, value, &data); -+ } while (g_mime_header_iter_next (&iter)); -+ } -+ } -+ -+ if (g_mime_header_list_get_iter (GMIME_OBJECT (message)->headers, &iter)) { -+ do { -+ value = g_mime_header_iter_get_value (&iter); -+ name = g_mime_header_iter_get_name (&iter); -+ set_message_foreach_header_func (name, value, &data); -+ } while (g_mime_header_iter_next (&iter)); -+ } -+ - s = utf8ize (data.visible_headers); - gtk_text_buffer_set_text (_headers_buf, s.c_str(), -1); - _hidden_headers = data.hidden_headers; - - // update body - int ignored; -- char * tmp = g_mime_message_get_body (message, true, &ignored); -+ char * tmp = g_mime_message_get_body (message, &ignored); - s = utf8ize (tmp); - g_free (tmp); - if (!s.empty()) { -diff -ru pan-0.133.orig/pan/usenet-utils/message-check-test.cc pan-0.133/pan/usenet-utils/message-check-test.cc ---- pan-0.133.orig/pan/usenet-utils/message-check-test.cc 2007-08-01 09:59:59.000000000 -0700 -+++ pan-0.133/pan/usenet-utils/message-check-test.cc 2009-09-12 13:41:22.000000000 -0700 -@@ -22,6 +22,20 @@ - std::cerr << LINE_ID << " [" << i << "][" << *it << ']' << std::endl; \ - } - -+static void -+mime_part_set_content (GMimePart *part, const char *str) -+{ -+ GMimeDataWrapper *content; -+ GMimeStream *stream; -+ -+ stream = g_mime_stream_mem_new_with_buffer (str, strlen (str)); -+ content = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); -+ g_object_unref (stream); -+ -+ g_mime_part_set_content_object (part, content); -+ g_object_unref (content); -+} -+ - int main (void) - { - g_mime_init (0); -@@ -41,11 +55,11 @@ - std::string message_id = GNKSA :: generate_message_id ("rebelbase.com"); - g_mime_message_set_message_id (msg, message_id.c_str()); - g_mime_message_set_subject (msg, "MAKE MONEY FAST"); -- g_mime_message_set_header (msg, "Organization", "Lazars Android Works"); -- g_mime_message_set_header (msg, "Newsgroups", "alt.test"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Organization", "Lazars Android Works"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", "alt.test"); - GMimePart * part = g_mime_part_new_with_type ("text", "plain"); - const char * cpch = "Hello World!"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); - // this should pass the tests - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); -@@ -54,7 +68,7 @@ - - // all quoted - cpch = "> Hello World!\n> All quoted text."; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - std::vector<std::string> e (errors.begin(), errors.end()); - check (errors.size() == 2) -@@ -64,7 +78,7 @@ - - // mostly quoted - cpch = "> Hello World!\n> quoted\n> text\n> foo\n> bar\nnew text"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -73,14 +87,14 @@ - - // mostly quoted border condition: 20% of message is new content (should pass) - cpch = "> Hello World!\n> quoted\n> text\n> foo\nnew text"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - check (errors.empty()) - check (goodness.is_ok()) - - // sig check: too long - cpch = "Hello!\n\n-- \nThis\nSig\nIs\nToo\nLong\n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -95,7 +109,7 @@ - "This sig line is greater than 80 characters wide. In fact, it's 84 characters wide.\n" - "This sig line is greater than 80 characters wide. In fact, it measures 95 characters in width!\n" - "This sig line is less than 80 characters wide."; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -104,7 +118,7 @@ - - // sig check: sig marker, no sig - cpch = "Hello!\n\n-- \n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -113,7 +127,7 @@ - - // sig check: okay sig - cpch = "Hello!\n\n-- \nThis is a short, narrow sig.\nIt should pass.\n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - check (errors.empty()) - check (goodness.is_ok()) -@@ -146,7 +160,7 @@ - "This sig line is greater than 80 characters wide. In fact, it's 84 characters wide.\n" - "This sig line is greater than 80 characters wide. In fact, it measures 95 characters in width!\n" - "This sig line is less than 80 characters wide."; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -155,7 +169,7 @@ - - // body empty - cpch = "\n\t\n \n-- \nThis is the sig."; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 2) -@@ -163,7 +177,7 @@ - check (e[0] == "Error: Message appears to have no new content."); - check (e[1] == "Error: Message is empty."); - cpch = "Some valid message."; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - - // empty subject - g_mime_message_set_subject (msg, ""); -@@ -175,17 +189,17 @@ - g_mime_message_set_subject (msg, "Happy Lucky Feeling"); - - // newsgroups -- g_mime_message_set_header (msg, "Newsgroups", "alt.test,unknown.group"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", "alt.test,unknown.group"); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) - check (goodness.is_warn()) - check (e[0] == "Warning: The posting profile's server doesn't carry newsgroup\n\t\"unknown.group\".\n\tIf the group name is correct, switch profiles in the \"From:\"\n\tline or edit the profile with \"Edit|Manage Posting Profiles\".") -- g_mime_message_set_header (msg, "Newsgroups", "alt.test"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", "alt.test"); - - // newsgroups w/o followup -- g_mime_message_set_header (msg, "Newsgroups", "alt.test,alt.religion.kibology,alt.binaries.sounds.mp3.indie"); -- g_mime_header_remove (GMIME_OBJECT(msg)->headers, "Followup-To"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", "alt.test,alt.religion.kibology,alt.binaries.sounds.mp3.indie"); -+ g_mime_header_list_remove (GMIME_OBJECT(msg)->headers, "Followup-To"); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -193,8 +207,8 @@ - check (e[0] == "Warning: Crossposting without setting Followup-To header.") - - // unknown follow-up -- g_mime_message_set_header (msg, "Newsgroups", "alt.test"); -- g_mime_message_set_header (msg, "Followup-To", "alt.test,unknown.group"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", "alt.test"); -+ g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", "alt.test,unknown.group"); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -203,11 +217,11 @@ - g_mime_object_remove_header (GMIME_OBJECT(msg), "Followup-To"); - - // top posting -- g_mime_message_set_header (msg, "References", "<asdf@foo.com>"); -+ g_mime_object_set_header ((GMimeObject *) msg, "References", "<asdf@foo.com>"); - cpch = "How Fascinating!\n" - "\n" - "> Blah blah blah.\n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -216,7 +230,7 @@ - g_mime_object_remove_header (GMIME_OBJECT(msg), "References"); - - // top posting -- g_mime_message_set_header (msg, "References", "<asdf@foo.com>"); -+ g_mime_object_set_header ((GMimeObject *) msg, "References", "<asdf@foo.com>"); - cpch = "How Fascinating!\n" - "\n" - "> Blah blah blah.\n" -@@ -224,7 +238,7 @@ - "-- \n" - "Pan shouldn't mistake this signature for\n" - "original content in the top-posting check.\n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -@@ -238,7 +252,7 @@ - "\n" - "--\n" - "This is my signature.\n"; -- g_mime_part_set_content (part, cpch, strlen(cpch)); -+ mime_part_set_content (part, cpch); - MessageCheck :: message_check (msg, attribution, groups_our_server_has, errors, goodness); - e.assign (errors.begin(), errors.end()); - check (errors.size() == 1) -diff -ru pan-0.133.orig/pan/usenet-utils/message-check.cc pan-0.133/pan/usenet-utils/message-check.cc ---- pan-0.133.orig/pan/usenet-utils/message-check.cc 2008-07-04 23:15:22.000000000 -0700 -+++ pan-0.133/pan/usenet-utils/message-check.cc 2009-09-12 13:42:37.000000000 -0700 -@@ -30,6 +30,7 @@ - #include "gnksa.h" - #include "message-check.h" - #include "text-massager.h" -+#include "mime-utils.h" - - using namespace pan; - -@@ -62,7 +63,7 @@ - std::string body (body_in.to_string()); - - // strip attribution -- const char * attribution = g_mime_message_get_header (message, PAN_ATTRIBUTION); -+ const char * attribution = g_mime_object_get_header ((GMimeObject *) message, PAN_ATTRIBUTION); - if (attribution && *attribution) - { - std::string::size_type attrib_start_pos = body.find (attribution); -@@ -99,7 +100,7 @@ - GMimeMessage * message) - { - // if it's not a reply, then top-posting check is moot -- if (g_mime_message_get_header (message, "References") == NULL) -+ if (g_mime_object_get_header ((GMimeObject *) message, "References") == NULL) - return; - - bool quoted_found (false); -@@ -414,7 +415,6 @@ - } - } - -- - void - MessageCheck :: message_check (const GMimeMessage * message_const, - const StringView & attribution, -@@ -432,7 +432,7 @@ - check_subject (errors, goodness, g_mime_message_get_subject (message)); - - // check the author... -- if (GNKSA::check_from (g_mime_message_get_header (message, "From"), true)) { -+ if (GNKSA::check_from (g_mime_object_get_header ((GMimeObject *) message, "From"), true)) { - errors.insert (_("Error: Bad email address.")); - goodness.raise_to_warn (); - } -@@ -440,17 +440,17 @@ - // check the body... - TextMassager tm; - gboolean is_html; -- char * body = g_mime_message_get_body (message, true, &is_html); -+ char * body = g_mime_message_get_body (message, &is_html); - if (is_html) { - errors.insert (_("Warning: Most newsgroups frown upon HTML posts.")); - goodness.raise_to_warn (); - } - check_body (errors, goodness, tm, message, body, attribution); - g_free (body); -- -+ - // check the optional followup-to... - bool followup_to_set (false); -- const char * cpch = g_mime_message_get_header (message, "Followup-To"); -+ const char * cpch = g_mime_object_get_header ((GMimeObject *) message, "Followup-To"); - if (cpch && *cpch) { - quarks_t groups; - get_nntp_rcpts (cpch, groups); -@@ -460,7 +460,7 @@ - - // check the groups... - size_t group_qty (0); -- cpch = g_mime_message_get_header (message, "Newsgroups"); -+ cpch = g_mime_object_get_header ((GMimeObject *) message, "Newsgroups"); - if (cpch && *cpch) { - quarks_t groups; - get_nntp_rcpts (cpch, groups); -@@ -469,7 +469,7 @@ - } - - // one last error check -- const InternetAddressList * list (g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO)); -+ InternetAddressList * list (g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO)); - const int n_to (internet_address_list_length (list)); - if (!group_qty && !n_to) { - errors.insert (_("Error: No Recipients.")); -diff -ru pan-0.133.orig/pan/usenet-utils/mime-utils.cc pan-0.133/pan/usenet-utils/mime-utils.cc ---- pan-0.133.orig/pan/usenet-utils/mime-utils.cc 2008-07-04 23:15:24.000000000 -0700 -+++ pan-0.133/pan/usenet-utils/mime-utils.cc 2009-09-12 14:46:25.000000000 -0700 -@@ -455,10 +455,10 @@ - part->stream = g_mime_stream_mem_new (); - if (part->type != ENC_PLAIN) { - part->filter_stream = -- g_mime_stream_filter_new_with_stream (part->stream); -+ g_mime_stream_filter_new (part->stream); - part->filter = part->type == ENC_UU -- ? g_mime_filter_basic_new_type (GMIME_FILTER_BASIC_UU_DEC) -- : g_mime_filter_yenc_new (GMIME_FILTER_YENC_DIRECTION_DECODE); -+ ? g_mime_filter_basic_new (GMIME_CONTENT_ENCODING_UUENCODE, FALSE) -+ : g_mime_filter_yenc_new (FALSE); - g_mime_stream_filter_add (GMIME_STREAM_FILTER(part->filter_stream), - part->filter); - } -@@ -722,18 +722,21 @@ - { - // if the part is a multipart, check its subparts - if (GMIME_IS_MULTIPART (*part)) { -- GList * subparts = GMIME_MULTIPART (*part)->subparts; -- while (subparts) { -- GMimeObject * subpart = (GMimeObject *) subparts->data; -+ GMimeMultipart *multipart = (GMimeMultipart *) *part; -+ int count = g_mime_multipart_get_count(multipart); -+ int i; -+ -+ for (i = 0; i < count; i++) { -+ GMimeObject * subpart = g_mime_multipart_remove_at (multipart, i); - handle_uu_and_yenc_in_text_plain (&subpart); -- subparts->data = subpart; -- subparts = subparts->next; -+ g_mime_multipart_insert (multipart, i, subpart); -+ g_object_unref (subpart); - } - return; - } - - // we assume that inlined yenc and uu are only in text/plain blocks -- const GMimeContentType * content_type = g_mime_object_get_content_type (*part); -+ GMimeContentType * content_type = g_mime_object_get_content_type (*part); - if (!g_mime_content_type_is_type (content_type, "text", "plain")) - return; - -@@ -746,8 +749,8 @@ - GMimeStream * stream = g_mime_data_wrapper_get_stream (content); - g_mime_stream_reset (stream); - GMimeStream * istream = g_mime_stream_buffer_new (stream, GMIME_STREAM_BUFFER_BLOCK_READ); -- g_object_unref (stream); -- g_object_unref (content); -+// g_object_unref (stream); //SKG if this is unrefed, when istream is unrefed below, content loses its stream -+// g_object_unref (content); //SKG gmime 2.4 don't unref returned data wrapper - - // break it into separate parts for text, uu, and yenc pieces. - temp_parts_t parts; -@@ -774,22 +777,22 @@ - g_mime_part_set_filename (subpart, filename); - - GMimeStream * subpart_stream = tmp_part->stream; -- content = g_mime_data_wrapper_new_with_stream (subpart_stream, GMIME_PART_ENCODING_DEFAULT); -+ content = g_mime_data_wrapper_new_with_stream (subpart_stream, GMIME_CONTENT_ENCODING_DEFAULT); - g_mime_part_set_content_object (subpart, content); -- g_mime_multipart_add_part (GMIME_MULTIPART (multipart), GMIME_OBJECT (subpart)); -+ g_mime_multipart_add (GMIME_MULTIPART (multipart), GMIME_OBJECT (subpart)); - - g_object_unref (content); - g_object_unref (subpart); - } - - // replace the old part with the new multipart -- g_mime_object_unref (*part); -+ g_object_unref (*part); - *part = GMIME_OBJECT (multipart); - } - - foreach (temp_parts_t, parts, it) - delete *it; -- g_mime_stream_unref (istream); -+ g_object_unref (istream); - } - } - -@@ -831,15 +834,15 @@ - GMimeStream * stream = g_mime_data_wrapper_get_stream (wrapper); - g_mime_stream_reset (stream); - g_mime_stream_cat_add_source (GMIME_STREAM_CAT (cat), stream); -- g_object_unref (stream); -- g_object_unref (wrapper); -+// g_object_unref (stream); //SKG if this is unrefed cat loses its stream -+// g_object_unref (wrapper); //SKG gmime 2.4 don't unref returned data wrapper - } - - GMimeMessage * message = messages[0]; - GMimeDataWrapper * wrapper = g_mime_part_get_content_object (GMIME_PART(message->mime_part)); - g_mime_stream_reset (cat); - g_mime_data_wrapper_set_stream (wrapper, cat); -- g_object_unref (wrapper); -+// g_object_unref (wrapper); //SKG gmime 2.4 don't unref returned data wrapper - g_object_unref (cat); - } - -@@ -1007,3 +1010,174 @@ - { - normalize_subject (subject, STRIP_MULTIPART_NUMERATOR, setme); - } -+ -+static GMimeObject * -+handle_multipart_mixed (GMimeMultipart *multipart, gboolean *is_html); -+ -+static GMimeObject * -+handle_multipart_alternative (GMimeMultipart *multipart, gboolean *is_html) -+{ -+ GMimeObject *mime_part, *text_part = NULL; -+ GMimeContentType *type; -+ int count = g_mime_multipart_get_count (multipart); -+ -+ for (int i = 0; i < count; ++i) { -+ mime_part = g_mime_multipart_get_part (multipart, i); -+ -+ type = g_mime_object_get_content_type (mime_part); -+ if (g_mime_content_type_is_type (type, "text", "*")) { -+ if (!text_part || !g_ascii_strcasecmp (type->subtype, "plain")) { -+ *is_html = !g_ascii_strcasecmp (type->subtype, "html"); -+ text_part = mime_part; -+ } -+ } -+ } -+ -+ return text_part; -+} -+ -+static GMimeObject * -+handle_multipart_mixed (GMimeMultipart *multipart, gboolean *is_html) -+{ -+ GMimeObject *mime_part, *text_part = NULL; -+ GMimeContentType *type, *first_type = NULL; -+ int count = g_mime_multipart_get_count (multipart); -+ -+ for (int i = 0; i < count; ++i) { -+ mime_part = g_mime_multipart_get_part (multipart, i); -+ -+ type = g_mime_object_get_content_type (mime_part); -+ if (GMIME_IS_MULTIPART (mime_part)) { -+ multipart = GMIME_MULTIPART (mime_part); -+ if (g_mime_content_type_is_type (type, "multipart", "alternative")) { -+ mime_part = handle_multipart_alternative (multipart, is_html); -+ if (mime_part) -+ return mime_part; -+ } else { -+ mime_part = handle_multipart_mixed (multipart, is_html); -+ if (mime_part && !text_part) -+ text_part = mime_part; -+ } -+ } else if (g_mime_content_type_is_type (type, "text", "*")) { -+ if (!g_ascii_strcasecmp (type->subtype, "plain")) { -+ /* we got what we came for */ -+ *is_html = !g_ascii_strcasecmp (type->subtype, "html"); -+ return mime_part; -+ } -+ -+ /* if we haven't yet found a text part or if it is a type we can -+ * * understand and it is the first of that type, save it */ -+ if (!text_part || (!g_ascii_strcasecmp (type->subtype, "plain") && (first_type && -+ g_ascii_strcasecmp (type->subtype, first_type->subtype) != 0))) { -+ *is_html = !g_ascii_strcasecmp (type->subtype, "html"); -+ text_part = mime_part; -+ first_type = type; -+ } -+ } -+ } -+ -+ return text_part; -+} -+ -+#define NEEDS_DECODING(encoding) ((encoding == GMIME_CONTENT_ENCODING_BASE64) || \ -+ (encoding == GMIME_CONTENT_ENCODING_UUENCODE) || \ -+ (encoding == GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE)) -+ -+static const char * -+g_mime_part_get_content (const GMimePart *mime_part, size_t *len) -+{ -+ const char *retval = NULL; -+ GMimeStream *stream; -+ -+ g_return_val_if_fail (GMIME_IS_PART (mime_part), NULL); -+ -+ if (!mime_part->content || !mime_part->content->stream) { -+ g_warning ("no content set on this mime part"); -+ return NULL; -+ } -+ -+ stream = mime_part->content->stream; -+ if (!GMIME_IS_STREAM_MEM (stream) || NEEDS_DECODING (mime_part->content->encoding)) { -+ /* Decode and cache this mime part's contents... */ -+ GMimeStream *cache; -+ GByteArray *buf; -+ -+ buf = g_byte_array_new (); -+ cache = g_mime_stream_mem_new_with_byte_array (buf); -+ -+ g_mime_data_wrapper_write_to_stream (mime_part->content, cache); -+ -+ g_mime_data_wrapper_set_stream (mime_part->content, cache); -+ g_mime_data_wrapper_set_encoding (mime_part->content, GMIME_CONTENT_ENCODING_DEFAULT); -+ g_object_unref (cache); -+ -+ *len = buf->len; -+ retval = (char *) buf->data; -+ } else { -+ GByteArray *buf = GMIME_STREAM_MEM (stream)->buffer; -+ off_t end_index = (off_t) buf->len; -+ off_t start_index = 0; -+ -+ /* check boundaries */ -+ if (stream->bound_start >= 0) -+ start_index = CLAMP (stream->bound_start, 0, (off_t) buf->len); -+ if (stream->bound_end >= 0) -+ end_index = CLAMP (stream->bound_end, 0, (off_t) buf->len); -+ if (end_index < start_index) -+ end_index = start_index; -+ -+ *len = end_index - start_index; -+ retval = (char *) buf->data + start_index; -+ } -+ -+ return retval; -+} -+ -+char *g_mime_message_get_body (GMimeMessage *message, gboolean *is_html) -+{ -+ GMimeObject *mime_part = NULL; -+ GMimeContentType *type; -+ GMimeMultipart *multipart; -+ const char *content; -+ char *body = NULL; -+ size_t len = 0; -+ -+ g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL); -+ g_return_val_if_fail (is_html != NULL, NULL); -+ -+ type = g_mime_object_get_content_type (message->mime_part); -+ if (GMIME_IS_MULTIPART (message->mime_part)) { -+ /* let's see if we can find a body in the multipart */ -+ multipart = GMIME_MULTIPART (message->mime_part); -+ if (g_mime_content_type_is_type (type, "multipart", "alternative")) -+ mime_part = handle_multipart_alternative (multipart, is_html); -+ else -+ mime_part = handle_multipart_mixed (multipart, is_html); -+ } else if (g_mime_content_type_is_type (type, "text", "*")) { -+ /* this *has* to be the message body */ -+ if (g_mime_content_type_is_type (type, "text", "html")) -+ *is_html = TRUE; -+ else -+ *is_html = FALSE; -+ mime_part = message->mime_part; -+ } -+ -+ if (mime_part != NULL) { -+ content = g_mime_part_get_content (GMIME_PART (mime_part), &len); -+ body = g_strndup (content, len); -+ } -+ -+ return body; -+} -+ -+void g_mime_message_add_recipients_from_string (GMimeMessage *message, GMimeRecipientType type, const char *string) -+{ -+ InternetAddressList *addrlist; -+ if ((addrlist = internet_address_list_parse_string (string))) { -+ for (int i = 0; i < internet_address_list_length (addrlist); ++i) { -+ InternetAddress *ia = internet_address_list_get_address (addrlist, i); -+ if (INTERNET_ADDRESS_IS_MAILBOX(ia)) -+ g_mime_message_add_recipient (message, type, internet_address_get_name(ia), internet_address_mailbox_get_addr(INTERNET_ADDRESS_MAILBOX(ia))); -+ } -+ } -+} -diff -ru pan-0.133.orig/pan/usenet-utils/mime-utils.h pan-0.133/pan/usenet-utils/mime-utils.h ---- pan-0.133.orig/pan/usenet-utils/mime-utils.h 2007-08-01 09:59:59.000000000 -0700 -+++ pan-0.133/pan/usenet-utils/mime-utils.h 2009-09-12 13:20:11.000000000 -0700 -@@ -64,4 +64,8 @@ - }; - } - -+char *g_mime_message_get_body (GMimeMessage *message, gboolean *is_html); -+void g_mime_message_add_recipients_from_string (GMimeMessage *message, GMimeRecipientType type, const char *string); -+ -+ - #endif -diff -ru pan-0.133.orig/pan.spec pan-0.133/pan.spec ---- pan-0.133.orig/pan.spec 2008-07-29 19:05:05.000000000 -0700 -+++ pan-0.133/pan.spec 2009-09-12 14:58:20.000000000 -0700 -@@ -15,14 +15,14 @@ - - BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot - BuildRequires: glib2-devel >= 2.4.0 --BuildRequires: gmime-devel >= 2.1.9 -+BuildRequires: gmime-devel >= 2.3.5 - BuildRequires: gtk2-devel >= 2.4.0 - BuildRequires: pcre-devel >= 5.0 - %{!?_without_gtkspell:BuildRequires: gtkspell-devel >= 2.0.7} - - Requires: pcre >= 5.0 - Requires: glib2 >= 2.4.0 --Requires: gmime >= 2.1.9 -+Requires: gmime >= 2.3.5 - Requires: gtk2 >= 2.4.0 - %{!?_without_gtkspell:Requires: gtkspell >= 2.0.7} - |