From nobody@FreeBSD.org  Thu Sep  2 19:52:41 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 86939106574E
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  2 Sep 2010 19:52:41 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 5B6568FC1A
	for <freebsd-gnats-submit@FreeBSD.org>; Thu,  2 Sep 2010 19:52:41 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o82Jqe0t024904
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 2 Sep 2010 19:52:40 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o82JqedD024893;
	Thu, 2 Sep 2010 19:52:40 GMT
	(envelope-from nobody)
Message-Id: <201009021952.o82JqedD024893@www.freebsd.org>
Date: Thu, 2 Sep 2010 19:52:40 GMT
From: Ben Grimm <freebsd-pr@bengrimm.net>
To: freebsd-gnats-submit@FreeBSD.org
Subject: conky 1.8 broken (sysutils/conky)
X-Send-Pr-Version: www-3.1
X-GNATS-Notify: ntarmos@cs.uoi.gr

>Number:         150233
>Category:       ports
>Synopsis:       conky 1.8 broken (sysutils/conky)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Sep 02 20:00:07 UTC 2010
>Closed-Date:    Sat Oct 30 18:45:42 UTC 2010
>Last-Modified:  Sat Oct 30 18:45:42 UTC 2010
>Originator:     Ben Grimm
>Release:        8.1-STABLE
>Organization:
>Environment:
FreeBSD box 8.1-STABLE FreeBSD 8.1-STABLE #0: Sun Jul 25 22:41:15 CEST 2010     toor@box:/usr/obj/usr/src/sys/BM64  amd64

>Description:
http://forums.freebsd.org/showthread.php?t=15824
http://forums.freebsd.org/showthread.php?t=17444
>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback 
State-Changed-By: edwin 
State-Changed-When: Thu Sep 2 20:00:19 UTC 2010 
State-Changed-Why:  
Awaiting maintainers feedback (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=150233 

From: Edwin Groothuis <edwin@FreeBSD.org>
To: ntarmos@cs.uoi.gr
Cc: bug-followup@FreeBSD.org
Subject: Re: ports/150233: conky 1.8 broken (sysutils/conky)
Date: Thu, 2 Sep 2010 20:00:16 UT

 Maintainer of sysutils/conky,
 
 Please note that PR ports/150233 has just been submitted.
 
 If it contains a patch for an upgrade, an enhancement or a bug fix
 you agree on, reply to this email stating that you approve the patch
 and a committer will take care of it.
 
 The full text of the PR can be found at:
     http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/150233
 
 -- 
 Edwin Groothuis via the GNATS Auto Assign Tool
 edwin@FreeBSD.org

From: Nikos Ntarmos <ntarmos@cs.uoi.gr>
To: bug-followup@FreeBSD.ORG
Cc:  
Subject: Re: ports/150233: conky 1.8 broken (sysutils/conky)
Date: Wed, 22 Sep 2010 10:40:52 +0300

 --1yeeQ81UyVL57Vl7
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 I've yet to find a 64-bit box to examine what's wrong with conky. For
 the time being, I'm backing out some of the patches incorporated in the
 previous version and attaching a shar archive of the new port. I can
 at least testify that this version works for me on FreeBSD/i386.
 
 \n\n
 
 --1yeeQ81UyVL57Vl7
 Content-Type: application/x-shar
 Content-Disposition: attachment; filename="conky.shar"
 Content-Transfer-Encoding: quoted-printable
 
 # This is a shell archive.  Save it in a file, remove anything before=0A# t=
 his line, and then unpack it by entering "sh file".  Note, it may=0A# creat=
 e directories; files and directories will be owned by you and=0A# have defa=
 ult permissions.=0A#=0A# This archive contains:=0A#=0A#	conky=0A#	conky/Mak=
 efile=0A#	conky/files=0A#	conky/files/patch-src-conky.c=0A#	conky/files/pat=
 ch-src-mixer.c=0A#	conky/files/patch-configure=0A#	conky/files/patch-src-co=
 mmon.c=0A#	conky/files/patch-src-i8k.c=0A#	conky/files/patch-src-diskio.c=
 =0A#	conky/files/patch-src-conky.h=0A#	conky/files/patch-src-mail.c=0A#	con=
 ky/files/patch-src-bmpx.c=0A#	conky/files/patch-src-top.c=0A#	conky/files/p=
 atch-src-logging.h=0A#	conky/files/patch-src-bmpx.h=0A#	conky/files/patch-s=
 rc-rss.c=0A#	conky/files/patch-lua-cairo.pkg=0A#	conky/files/patch-src-Make=
 file.in=0A#	conky/files/patch-src-core.c=0A#	conky/files/patch-src-freebsd.=
 c=0A#	conky/pkg-descr=0A#	conky/distinfo=0A#=0Aecho c - conky=0Amkdir -p co=
 nky > /dev/null 2>&1=0Aecho x - conky/Makefile=0Ased 's/^X//' >conky/Makefi=
 le << 'c6f03d61758ca6e484be3d23647891ea'=0AX# New ports collection makefile=
  for:	conky=0AX# Date created:				2005-08-27=0AX# Whom:					Roman Bogorodsk=
 iy <novel@FreeBSD.org>=0AX#=0AX# $FreeBSD: ports/sysutils/conky/Makefile,v =
 1.51 2010/01/28 01:59:34 amdmi3 Exp $=0AX#=0AX=0AXPORTNAME=3D	conky=0AXPORT=
 VERSION=3D	1.8.0=0AXPORTREVISION=3D	1=0AXCATEGORIES=3D	sysutils=0AXMASTER_S=
 ITES=3D	SF=0AX=0AXMAINTAINER=3D	ntarmos@cs.uoi.gr=0AXCOMMENT=3D	An advanced=
 , highly configurable system monitor for X=0AX=0AXCONFLICTS?=3D	conky-aweso=
 me-[0-9]*=0AXSLAVEDIRS=3D	sysutils/conky-awesome=0AX=0AXUSE_ICONV=3D	yes=0A=
 XUSE_BZIP2=3D	yes=0AXGNU_CONFIGURE=3D	yes=0AXUSE_XORG?=3D	x11 xext xdamage=
 =0AXUSE_GNOME?=3D	pkgconfig=0AXUSE_ICONV=3D	yes=0AXUSE_GMAKE=3D	yes=0AXCONF=
 IGURE_ARGS+=3D	--disable-portmon \=0AX			--disable-hddtemp=0AXCONFIGURE_ENV=
 +=3D	CPPFLAGS=3D"${CPPFLAGS} -I${LOCALBASE}/include" \=0AX		LDFLAGS=3D"${LD=
 FLAGS} -L${LOCALBASE}/lib"=0AX=0AXMAN1=3D		conky.1=0AXPLIST_FILES=3D	bin/co=
 nky=0AXPORTEXAMPLES=3D	conkyrc.sample=0AXPORTDOCS=3D	README AUTHORS ChangeL=
 og TODO NEWS \=0AX		docs.html variables.html config_settings.html=0AX=0AXOP=
 TIONS+=3D	APCUPSD "Enable APCUPSD support" Off \=0AX		AUDACIOUS "Enable Aud=
 acious support" Off \=0AX		BMPX "Enable BMPX support" Off \=0AX		MPD "Enabl=
 e MPD support" Off \=0AX		NCURSES "Enable ncurses support" Off \=0AX		RSS "=
 Enable RSS support" Off \=0AX		METAR "Enable METAR Weather support" Off \=
 =0AX		XOAP "Enable XOAP Weather support" Off \=0AX		XMMS2 "Enable XMMS2 sup=
 port" Off=0AX=0AX.if !empty(USE_XORG)=0AXOPTIONS+=3D	DOUBLE_BUFFER "Enable =
 double buffering" On \=0AX		IMLIB2 "Enable Imlib2 support" Off \=0AX		LUA "=
 Enable Lua support" Off \=0AX		LUA_CAIRO "Enable Lua-Cairo binding (impl. L=
 ua)" Off \=0AX		LUA_IMLIB2 "Enable Lua-Imlib2 binding (impl. Lua/Imlib2)" O=
 ff \=0AX		XFT "Enable Xft support" Off=0AX.else=0AXOPTIONS+=3D	LUA "Enable =
 Lua support" Off=0AX.endif=0AX=0AX.include <bsd.port.pre.mk>=0AX=0AX.if emp=
 ty(USE_XORG)=0AXWITHOUT_DOUBLE_BUFFER=3D	On=0AXCONFIGURE_ARGS+=3D	--disable=
 -x11 --disable-own-window=0AX.undef WITH_IMLIB2=0AX.undef WITH_LUA_CAIRO=0A=
 X.undef WITH_LUA_IMLIB2=0AX.undef WITH_XFT=0AX.endif=0AX=0AX.if defined(WIT=
 H_APCUPSD)=0AXRUN_DEPENDS+=3D		${LOCALBASE}/sbin/apcupsd:${PORTSDIR}/sysuti=
 ls/apcupsd=0AXCONFIGURE_ARGS+=3D	--enable-apcupsd=0AX.else=0AXCONFIGURE_ARG=
 S+=3D	--disable-apcupsd=0AX.endif=0AX=0AX.if defined(WITH_AUDACIOUS)=0AXLIB=
 _DEPENDS+=3D		audclient.2:${PORTSDIR}/multimedia/audacious=0AXCONFIGURE_ARG=
 S+=3D	--enable-audacious=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-audacious=
 =0AX.endif=0AX=0AX.if defined(WITH_BMPX)=0AXBUILD_DEPENDS+=3D		beep-media-p=
 layer-2:${PORTSDIR}/multimedia/bmpx=0AXRUN_DEPENDS+=3D		beep-media-player-2=
 :${PORTSDIR}/multimedia/bmpx=0AXLIB_DEPENDS+=3D		dbus-1.3:${PORTSDIR}/devel=
 /dbus=0AXCONFIGURE_ARGS+=3D	--enable-bmpx=0AX.else=0AXCONFIGURE_ARGS+=3D	--=
 disable-bmpx=0AX.endif=0AX=0AX.if defined(WITH_LUA) || defined(WITH_LUA_CAI=
 RO) || defined(WITH_LUA_IMLIB2)=0AXUSE_LUA=3D		5.1+=0AXCONFIGURE_ARGS+=3D	-=
 -enable-lua=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-lua=0AX.endif=0AX=0AX.=
 if defined(WITH_LUA_CAIRO)=0AXLIB_DEPENDS+=3D		cairo.2:${PORTSDIR}/graphics=
 /cairo=0AXBUILD_DEPENDS+=3D		tolua++-5.1:${PORTSDIR}/lang/tolua++=0AXRUN_DE=
 PENDS+=3D		tolua++-5.1:${PORTSDIR}/lang/tolua++=0AXCONFIGURE_ARGS+=3D	--ena=
 ble-lua-cairo=0AX.endif=0AX=0AX.if defined(WITH_IMLIB2) || defined(WITH_LUA=
 _IMLIB2)=0AXLIB_DEPENDS+=3D		Imlib2.5:${PORTSDIR}/graphics/imlib2=0AXCONFIG=
 URE_ARGS+=3D	--enable-imlib2=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-imlib=
 2=0AX.endif=0AX=0AX.if defined(WITH_LUA_IMLIB2)=0AXBUILD_DEPENDS+=3D		tolua=
 ++-5.1:${PORTSDIR}/lang/tolua++=0AXRUN_DEPENDS+=3D		tolua++-5.1:${PORTSDIR}=
 /lang/tolua++=0AXCONFIGURE_ARGS+=3D	--enable-lua-imlib2=0AX.endif=0AX=0AX.i=
 f defined(WITH_NCURSES)=0AXCONFIGURE_ARGS+=3D	--enable-ncurses=0AX.else=0AX=
 CONFIGURE_ARGS+=3D	--disable-ncurses=0AX.endif=0AX=0AX.if defined(WITH_XFT)=
 =0AXLIB_DEPENDS+=3D		Xft.2:${PORTSDIR}/x11-fonts/libXft=0AXCONFIGURE_ARGS+=
 =3D	--enable-xft=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-xft=0AX.endif=0AX=
 =0AX.if defined(WITHOUT_MPD)=0AXCONFIGURE_ARGS+=3D	--disable-mpd=0AX.endif=
 =0AX=0AX.if defined(WITH_RSS)=0AXLIB_DEPENDS+=3D		curl.6:${PORTSDIR}/ftp/cu=
 rl \=0AX			xml2.5:${PORTSDIR}/textproc/libxml2=0AXCONFIGURE_ARGS+=3D	--enab=
 le-rss=0AXUSE_GNOME+=3D		glib20=0AX.endif=0AX=0AX.if defined(WITH_METAR)=0A=
 XLIB_DEPENDS+=3D		curl.6:${PORTSDIR}/ftp/curl=0AXCONFIGURE_ARGS+=3D	--enabl=
 e-weather-metar=0AX.endif=0AX=0AX.if defined(WITH_XOAP)=0AXLIB_DEPENDS+=3D	=
 	curl.6:${PORTSDIR}/ftp/curl \=0AX			xml2.5:${PORTSDIR}/textproc/libxml2=0A=
 XCONFIGURE_ARGS+=3D	--enable-weather-xoap=0AX.endif=0AX=0AX.if defined(WITH=
 _XMMS2)=0AXLIB_DEPENDS+=3D		xmmsclient.5:${PORTSDIR}/audio/xmms2=0AXCONFIGU=
 RE_ARGS+=3D	--enable-xmms2=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-xmms2=
 =0AX.endif=0AX=0AX.if defined(WITHOUT_DOUBLE_BUFFER)=0AXCONFIGURE_ARGS+=3D	=
 --disable-double-buffer=0AX.endif=0AX=0AXpost-patch:=0AX	@${REINPLACE_CMD} =
 -e 's,lua5\.1,lua-5.1,g' \=0AX		${WRKSRC}/configure=0AX	@${REINPLACE_CMD} -=
 e 's,imlib_context_disconnect_display();,,g' \=0AX		${WRKSRC}/src/imlib2.c=
 =0AX=0AXdo-install:=0AX	${INSTALL_PROGRAM} ${WRKSRC}/src/conky ${PREFIX}/bi=
 n=0AX	${INSTALL_MAN} ${WRKSRC}/doc/conky.1 ${PREFIX}/man/man1=0AX=0AXpost-i=
 nstall:=0AX.if !defined(NOPORTEXAMPLES)=0AX	@${MKDIR} ${EXAMPLESDIR}=0AX.	i=
 f !empty(USE_XORG)=0AX	@${INSTALL_DATA} ${WRKSRC}/data/conky.conf ${EXAMPLE=
 SDIR}/conkyrc.sample=0AX.	else=0AX	@${INSTALL_DATA} ${WRKSRC}/data/conky_no=
 _x11.conf ${EXAMPLESDIR}/conkyrc.sample=0AX.	endif=0AX.endif=0AX=0AX.if !de=
 fined(NOPORTDOCS)=0AX	@${MKDIR} ${DOCSDIR}=0AX.for i in README AUTHORS Chan=
 geLog TODO NEWS=0AX	${INSTALL_DATA} ${WRKSRC}/${i} ${DOCSDIR}=0AX.endfor=0A=
 X.for i in docs.html variables.html config_settings.html=0AX	${INSTALL_DATA=
 } ${WRKSRC}/doc/${i} ${DOCSDIR}=0AX.endfor=0AX.endif=0AX=0AX.include <bsd.p=
 ort.post.mk>=0Ac6f03d61758ca6e484be3d23647891ea=0Aecho c - conky/files=0Amk=
 dir -p conky/files > /dev/null 2>&1=0Aecho x - conky/files/patch-src-conky.=
 c=0Ased 's/^X//' >conky/files/patch-src-conky.c << 'c59c590f71d1b0c018c091a=
 f48aee345'=0AX--- src/conky.c.orig=0AX+++ src/conky.c=0AX@@ -166,9 +166,7 @=
 @=0AX #ifdef IOSTATS=0AX int top_io;=0AX #endif=0AX-#ifdef __linux__=0AX in=
 t top_running;=0AX-#endif=0AX int output_methods;=0AX static int extra_newl=
 ine;=0AX enum x_initialiser_state x_initialised =3D NO;=0AX@@ -269,9 +267,6=
  @@=0AX #ifdef IMLIB2=0AX 		   "  * Imlib2\n"=0AX #endif /* IMLIB2 */=0AX-#=
 ifdef MIXER_IS_ALSA=0AX-		   "  * ALSA mixer support\n"=0AX-#endif /* MIXER=
 _IS_ALSA */=0AX #ifdef APCUPSD=0AX 		   "  * apcupsd\n"=0AX #endif /* APCUP=
 SD */=0AX@@ -463,7 +458,7 @@=0AX 		}=0AX 		fclose(where);=0AX 	} else {=0AX=
 -		NORM_ERR("Could not open the file");=0AX+		NORM_ERR("Could not open the =
 file '%s'", f);=0AX 	}=0AX 	return ret;=0AX }=0AX@@ -512,6 +507,7 @@=0AX 	c=
 har *ps, *pe;=0AX 	int special_index =3D 0; /* specials index */=0AX =0AX+	=
 if(! b) return;=0AX 	for (ps =3D b, pe =3D b; *pe; pe++) {=0AX 		if (*pe =
 =3D=3D '\n') {=0AX 			*pe =3D '\0';=0AX@@ -765,6 +761,8 @@=0AX 	buff_in[0] =
 =3D 0;=0AX #endif /* HAVE_ICONV */=0AX =0AX+	if(! p) return;=0AX+=0AX 	p[0]=
  =3D 0;=0AX 	obj =3D root.next;=0AX 	while (obj && p_max_size > 0) {=0AX@@ =
 -1330,7 +1328,7 @@=0AX 					DO_JUMP;=0AX 				} else if (spc) {=0AX 					*sp=
 c =3D '\0';=0AX-					if (check_contains(obj->data.s, spc + 1))=0AX+					if =
 (!check_contains(obj->data.s, spc + 1))=0AX 						DO_JUMP;=0AX 					*spc =
 =3D ' ';=0AX 				}=0AX@@ -2062,9 +2069,11 @@=0AX 			OBJ(xmms2_percent) {=0A=
 X 				snprintf(p, p_max_size, "%2.0f", cur->xmms2.progress * 100);=0AX 			}=
 =0AX+#ifdef X11=0AX 			OBJ(xmms2_bar) {=0AX 				new_bar(obj, p, p_max_size,=
  (int) (cur->xmms2.progress * 255.0f));=0AX 			}=0AX+#endif /* X11 */=0AX 	=
 		OBJ(xmms2_playlist) {=0AX 				snprintf(p, p_max_size, "%s", cur->xmms2.pl=
 aylist);=0AX 			}=0AX@@ -2140,6 +2149,7 @@=0AX 				snprintf(p, p_max_size, =
 "%s",=0AX 					cur->audacious.items[AUDACIOUS_MAIN_VOLUME]);=0AX 			}=0AX+#=
 ifdef X11=0AX 			OBJ(audacious_bar) {=0AX 				double progress;=0AX =0AX@@ -=
 2148,6 +2158,7 @@=0AX 					atof(cur->audacious.items[AUDACIOUS_LENGTH_SECON=
 DS]);=0AX 				new_bar(obj, p, p_max_size, (int) (progress * 255.0f));=0AX 	=
 		}=0AX+#endif /* X11 */=0AX #endif /* AUDACIOUS */=0AX =0AX #ifdef BMPX=0A=
 X@@ -2173,7 +2184,6 @@=0AX 			/* we have four different types of top (top, =
 top_mem,=0AX 			 * top_time and top_io). To avoid having almost-same code f=
 our=0AX 			 * times, we have this special handler. */=0AX-#ifdef __linux__=
 =0AX 			break;=0AX 			case OBJ_top:=0AX 			case OBJ_top_mem:=0AX@@ -2182,7 =
 +2192,6 @@=0AX 			case OBJ_top_io:=0AX #endif=0AX 				print_top(obj, p, p_m=
 ax_size);=0AX-#endif /* __linux__ */=0AX 			OBJ(tail) {=0AX 				print_tailh=
 ead("tail", obj, p, p_max_size);=0AX 			}=0AX@@ -2375,13 +2384,7 @@=0AX #if=
 def HAVE_ICONV=0AX 			iconv_convert(&a, buff_in, p, p_max_size);=0AX #endif=
  /* HAVE_ICONV */=0AX-			if (obj->type !=3D OBJ_text && obj->type !=3D OBJ_=
 execp && obj->type !=3D OBJ_execpi=0AX-#ifdef HAVE_LUA=0AX-					&& obj->typ=
 e !=3D OBJ_lua && obj->type !=3D OBJ_lua_parse=0AX-#endif /* HAVE_LUA */=0A=
 X-					) {=0AX-				substitute_newlines(p, a - 2);=0AX-			}=0AX+			substitut=
 e_newlines(p, a - 2);=0AX 			p +=3D a;=0AX 			p_max_size -=3D a;=0AX 			(*p=
 ) =3D 0;=0AX@@ -3119,36 +3122,49 @@=0AX 						if (seconds !=3D 0) {=0AX 			=
 				timeunits =3D seconds / 86400; seconds %=3D 86400;=0AX 							if (timeu=
 nits > 0) {=0AX-								asprintf(&tmp_day_str, "%dd", timeunits);=0AX+					=
 			if (asprintf(&tmp_day_str, "%dd", timeunits) < 0) {=0AX+									tmp_day=
 _str =3D 0;=0AX+								}=0AX 							} else {=0AX 								tmp_day_str =3D s=
 trdup("");=0AX 							}=0AX 							timeunits =3D seconds / 3600; seconds %=
 =3D 3600;=0AX 							if (timeunits > 0) {=0AX-								asprintf(&tmp_hour_st=
 r, "%dh", timeunits);=0AX+								if (asprintf(&tmp_hour_str, "%dh", timeun=
 its) < 0) {=0AX+									tmp_day_str =3D 0;=0AX+								}=0AX 							} else=
  {=0AX 								tmp_hour_str =3D strdup("");=0AX 							}=0AX 							timeuni=
 ts =3D seconds / 60; seconds %=3D 60;=0AX 							if (timeunits > 0) {=0AX-	=
 							asprintf(&tmp_min_str, "%dm", timeunits);=0AX+								if (asprintf(&=
 tmp_min_str, "%dm", timeunits) < 0) {=0AX+									tmp_min_str =3D 0;=0AX+	=
 							}=0AX 							} else {=0AX 								tmp_min_str =3D strdup("");=0AX 		=
 					}=0AX 							if (seconds > 0) {=0AX-								asprintf(&tmp_sec_str, "%d=
 s", seconds);=0AX+								if (asprintf(&tmp_sec_str, "%ds", seconds) < 0) {=
 =0AX+									tmp_sec_str =3D 0;=0AX+								}=0AX 							} else {=0AX 				=
 				tmp_sec_str =3D strdup("");=0AX 							}=0AX-							asprintf(&tmp_str, =
 "%s%s%s%s", tmp_day_str, tmp_hour_str, tmp_min_str, tmp_sec_str);=0AX-					=
 		free(tmp_day_str); free(tmp_hour_str); free(tmp_min_str); free(tmp_sec_st=
 r);=0AX+							if (asprintf(&tmp_str, "%s%s%s%s", tmp_day_str,=0AX+								=
 		tmp_hour_str, tmp_min_str, tmp_sec_str) < 0) {=0AX+								tmp_str =3D 0;=
 =0AX+							}=0AX+#define FREE(a) if ((a)) free((a));=0AX+							FREE(tmp_d=
 ay_str); FREE(tmp_hour_str); FREE(tmp_min_str); FREE(tmp_sec_str);=0AX 				=
 		} else {=0AX-							asprintf(&tmp_str, "Range not possible"); // should n=
 ever happen, but better safe then sorry=0AX+							tmp_str =3D strdup("Rang=
 e not possible"); /* should never happen, but better safe then sorry */=0AX=
  						}=0AX 						cur_x +=3D (w / 2) - (font_ascent() * (strlen(tmp_str) /=
  2));=0AX 						cur_y +=3D font_h / 2;=0AX 						draw_string(tmp_str);=0AX-=
 						free(tmp_str);=0AX+						FREE(tmp_str);=0AX+#undef FREE=0AX 						cur=
 _x =3D tmp_x;=0AX 						cur_y =3D tmp_y;=0AX 					}=0AX@@ -3974,11 +3990,39=
  @@=0AX 	initialisation(argc_copy, argv_copy);=0AX }=0AX =0AX-void clean_up=
 (void *memtofree1, void* memtofree2)=0AX-{=0AX-	int i;=0AX+#ifdef X11=0AX+v=
 oid clean_up_x11() {=0AX+	if(window_created =3D=3D 1) {=0AX+		XClearArea(di=
 splay, window.window, text_start_x - window.border_inner_margin - window.bo=
 rder_outer_margin - window.border_width,=0AX+			text_start_y - window.borde=
 r_inner_margin - window.border_outer_margin - window.border_width,=0AX+			t=
 ext_width + window.border_inner_margin * 2 + window.border_outer_margin * 2=
  + window.border_width * 2,=0AX+			text_height + window.border_inner_margin=
  * 2 + window.border_outer_margin * 2 + window.border_width * 2, 0);=0AX+	}=
 =0AX+	destroy_window();=0AX+	free_fonts();=0AX+	fonts =3D NULL;=0AX+	if(x11=
 _stuff.region) {=0AX+		XDestroyRegion(x11_stuff.region);=0AX+		x11_stuff.re=
 gion =3D NULL;=0AX+	}=0AX+	if(display) {=0AX+		XCloseDisplay(display);=0AX+=
 		display =3D NULL;=0AX+	}=0AX+	if(info.x11.desktop.all_names) {=0AX+		free=
 (info.x11.desktop.all_names);=0AX+		info.x11.desktop.all_names =3D NULL;=0A=
 X+	}=0AX+	if (info.x11.desktop.name) {=0AX+		free(info.x11.desktop.name);=
 =0AX+		info.x11.desktop.name =3D NULL;=0AX+	}=0AX+	x_initialised =3D NO;=0A=
 X+}=0AX+#endif=0AX =0AX-	free_update_callbacks();=0AX+void clean_up_without=
 _threads(void *memtofree1, void* memtofree2) {=0AX+	int i;=0AX =0AX #ifdef =
 NCURSES=0AX 	if(output_methods & TO_NCURSES) {=0AX@@ -4001,29 +4045,7 @@=0A=
 X 	}=0AX #ifdef X11=0AX 	if (x_initialised =3D=3D YES) {=0AX-		if(window_cr=
 eated =3D=3D 1) {=0AX-			XClearArea(display, window.window, text_start_x - =
 window.border_inner_margin - window.border_outer_margin - window.border_wid=
 th,=0AX-				text_start_y - window.border_inner_margin - window.border_outer=
 _margin - window.border_width,=0AX-				text_width + window.border_inner_mar=
 gin * 2 + window.border_outer_margin * 2 + window.border_width * 2,=0AX-			=
 	text_height + window.border_inner_margin * 2 + window.border_outer_margin =
 * 2 + window.border_width * 2, 0);=0AX-		}=0AX-		destroy_window();=0AX-		fr=
 ee_fonts();=0AX-		if(x11_stuff.region) {=0AX-			XDestroyRegion(x11_stuff.re=
 gion);=0AX-			x11_stuff.region =3D NULL;=0AX-		}=0AX-		XCloseDisplay(displa=
 y);=0AX-		display =3D NULL;=0AX-		if(info.x11.desktop.all_names) {=0AX-			f=
 ree(info.x11.desktop.all_names);=0AX-			info.x11.desktop.all_names =3D NULL=
 ;=0AX-		}=0AX-		if (info.x11.desktop.name) {=0AX-			free(info.x11.desktop.n=
 ame);=0AX-			info.x11.desktop.name =3D NULL;=0AX-		}=0AX-		x_initialised =
 =3D NO;=0AX+		clean_up_x11();=0AX 	}else{=0AX 		free(fonts);	//in set_defau=
 lt_configurations a font is set but not loaded=0AX 		font_count =3D -1;=0AX=
 @@ -4097,6 +4119,12 @@=0AX 	}=0AX }=0AX =0AX+void clean_up(void *memtofree1=
 , void* memtofree2)=0AX+{=0AX+	free_update_callbacks();=0AX+	clean_up_witho=
 ut_threads(memtofree1, memtofree2);=0AX+}=0AX+=0AX static int string_to_boo=
 l(const char *s)=0AX {=0AX 	if (!s) {=0AX@@ -4200,9 +4228,7 @@=0AX #ifdef I=
 OSTATS=0AX 	top_io =3D 0;=0AX #endif=0AX-#ifdef __linux__=0AX 	top_running =
 =3D 0;=0AX-#endif=0AX #ifdef MPD=0AX 	mpd_env_host =3D getenv("MPD_HOST");=
 =0AX 	mpd_env_port =3D getenv("MPD_PORT");=0AX@@ -4252,6 +4278,9 @@=0AX 	ou=
 tput_methods =3D TO_STDOUT;=0AX #endif=0AX #ifdef X11=0AX+#ifdef BUILD_XFT=
 =0AX+	use_xft =3D 0;=0AX+#endif=0AX 	show_graph_scale =3D 0;=0AX 	show_grap=
 h_range =3D 0;=0AX 	draw_shades =3D 1;=0AX@@ -4552,15 +4581,12 @@=0AX =0AX =
 #ifdef X11=0AX 		CONF2("out_to_x") {=0AX-			/* don't listen if X is already=
  initialised or=0AX-			 * if we already know we don't want it */=0AX-			if(=
 x_initialised !=3D YES) {=0AX-				if (string_to_bool(value)) {=0AX-					out=
 put_methods &=3D TO_X;=0AX-				} else {=0AX-					output_methods &=3D ~TO_X;=
 =0AX-					x_initialised =3D NEVER;=0AX-				}=0AX+			if (string_to_bool(valu=
 e)) {=0AX+				output_methods &=3D TO_X;=0AX+			} else {=0AX+				clean_up_x1=
 1();=0AX+				output_methods &=3D ~TO_X;=0AX+				x_initialised =3D NEVER;=0A=
 X 			}=0AX 		}=0AX 		CONF("display") {=0AX@@ -4573,7 +4599,7 @@=0AX 			}=0A=
 X 		}=0AX 		CONF("alignment") {=0AX-			setalignment(&text_alignment, window=
 =2Etype, value, f, line, true);=0AX+			setalignment(&text_alignment, window=
 =2Etype, value, f, line, 1);=0AX 		}=0AX 		CONF("background") {=0AX 			fork=
 _to_background =3D string_to_bool(value);=0AX@@ -4609,7 +4635,7 @@=0AX 		CO=
 NF("border_width") {=0AX 			if (value) {=0AX 				window.border_width =3D st=
 rtol(value, 0, 0);=0AX-				if (window.border_width < 0) window.border_width=
  =3D 0;=0AX+				if (window.border_width < 1) window.border_width =3D 1;=0AX=
  			} else {=0AX 				CONF_ERR;=0AX 			}=0AX@@ -5696,7 +5722,7 @@=0AX 				se=
 t_first_font(optarg);=0AX 				break;=0AX 			case 'a':=0AX-				setalignment(=
 &text_alignment, window.type, optarg, NULL, 0, false);=0AX+				setalignment=
 (&text_alignment, window.type, optarg, NULL, 0, 0);=0AX 				break;=0AX =0AX=
  #ifdef OWN_WINDOW=0AX@@ -5895,7 +5921,9 @@=0AX 				current_config =3D strn=
 dup(optarg, max_user_text);=0AX 				break;=0AX 			case 'q':=0AX-				freopen=
 ("/dev/null", "w", stderr);=0AX+				if (!freopen("/dev/null", "w", stderr))=
  {=0AX+					NORM_ERR("unable to redirect stderr to /dev/null");=0AX+				}=
 =0AX 				break;=0AX 			case 'h':=0AX 				print_help(argv[0]);=0AX@@ -5929,7=
  +5957,13 @@=0AX #endif /* XOAP */=0AX =0AX #ifdef HAVE_SYS_INOTIFY_H=0AX-	=
 inotify_fd =3D inotify_init1(IN_NONBLOCK);=0AX+	inotify_fd =3D inotify_init=
 ();=0AX+	if(inotify_fd !=3D -1) {=0AX+		int fl;=0AX+=0AX+		fl =3D fcntl(ino=
 tify_fd, F_GETFL);=0AX+		fcntl(inotify_fd, F_SETFL, fl | O_NONBLOCK);=0AX+	=
 }=0AX #endif /* HAVE_SYS_INOTIFY_H */=0AX =0AX 	initialisation(argc, argv);=
 =0Ac59c590f71d1b0c018c091af48aee345=0Aecho x - conky/files/patch-src-mixer.=
 c=0Ased 's/^X//' >conky/files/patch-src-mixer.c << '34de5c2a761905d37e86bab=
 a46208622'=0AX--- src/mixer.c.orig=0AX+++ src/mixer.c=0AX@@ -281,6 +281,7 @=
 @ int mixer_is_mute(int i)=0AX =0AX #define mixer_to_255(i, x) x=0AX #endif=
  /* MIXER_IS_ALSA */=0AX+#define mixer_to_255(i, x) x * 2.55=0AX =0AX void =
 parse_mixer_arg(struct text_object *obj, const char *arg)=0AX {=0A34de5c2a7=
 61905d37e86baba46208622=0Aecho x - conky/files/patch-configure=0Ased 's/^X/=
 /' >conky/files/patch-configure << '498e2a3501cfe7ff2362b87148767ae4'=0AX--=
 - configure.orig=0AX+++ configure=0AX@@ -11233,12 +11233,12 @@=0AX         =
 pkg_cv_Audacious_CFLAGS=3D"$Audacious_CFLAGS"=0AX     else=0AX         if t=
 est -n "$PKG_CONFIG" && \=0AX-    { { $as_echo "$as_me:${as_lineno-$LINENO}=
 : \$PKG_CONFIG --exists --print-errors \"audacious >=3D 1.4.0 dbus-glib-1 g=
 lib-2.0 gobject-2.0\""; } >&5=0AX-  ($PKG_CONFIG --exists --print-errors "a=
 udacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0") 2>&5=0AX+    { { $as=
 _echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"=
 audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5=
 =0AX+  ($PKG_CONFIG --exists --print-errors "audacious >=3D 1.4.0 audclient=
  dbus-glib-1 glib-2.0 gobject-2.0") 2>&5=0AX   ac_status=3D$?=0AX   $as_ech=
 o "$as_me:${as_lineno-$LINENO}: \$? =3D $ac_status" >&5=0AX   test $ac_stat=
 us =3D 0; }; then=0AX-  pkg_cv_Audacious_CFLAGS=3D`$PKG_CONFIG --cflags "au=
 dacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`=0AX+  pkg=
 _cv_Audacious_CFLAGS=3D`$PKG_CONFIG --cflags "audacious >=3D 1.4.0 audclien=
 t dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`=0AX else=0AX   pkg_failed=
 =3Dyes=0AX fi=0AX@@ -11251,12 +11251,12 @@=0AX         pkg_cv_Audacious_LIB=
 S=3D"$Audacious_LIBS"=0AX     else=0AX         if test -n "$PKG_CONFIG" && =
 \=0AX-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists =
 --print-errors \"audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0\""; =
 } >&5=0AX-  ($PKG_CONFIG --exists --print-errors "audacious >=3D 1.4.0 dbus=
 -glib-1 glib-2.0 gobject-2.0") 2>&5=0AX+    { { $as_echo "$as_me:${as_linen=
 o-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >=3D 1.4.0 aud=
 client dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5=0AX+  ($PKG_CONFIG --exis=
 ts --print-errors "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobj=
 ect-2.0") 2>&5=0AX   ac_status=3D$?=0AX   $as_echo "$as_me:${as_lineno-$LIN=
 ENO}: \$? =3D $ac_status" >&5=0AX   test $ac_status =3D 0; }; then=0AX-  pk=
 g_cv_Audacious_LIBS=3D`$PKG_CONFIG --libs "audacious >=3D 1.4.0 dbus-glib-1=
  glib-2.0 gobject-2.0" 2>/dev/null`=0AX+  pkg_cv_Audacious_LIBS=3D`$PKG_CON=
 FIG --libs "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0=
 " 2>/dev/null`=0AX else=0AX   pkg_failed=3Dyes=0AX fi=0AX@@ -11275,14 +1127=
 5,14 @@=0AX         _pkg_short_errors_supported=3Dno=0AX fi=0AX         if =
 test $_pkg_short_errors_supported =3D yes; then=0AX-	        Audacious_PKG_=
 ERRORS=3D`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "aud=
 acious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`=0AX+	        Audacious=
 _PKG_ERRORS=3D`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors=
  "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`=0AX    =
      else=0AX-	        Audacious_PKG_ERRORS=3D`$PKG_CONFIG --errors-to-stdo=
 ut --print-errors "audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`=
 =0AX+	        Audacious_PKG_ERRORS=3D`$PKG_CONFIG --errors-to-stdout --prin=
 t-errors "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`=
 =0AX         fi=0AX 	# Put the nasty error message in config.log where it b=
 elongs=0AX 	echo "$Audacious_PKG_ERRORS" >&5=0AX =0AX-	as_fn_error "Package=
  requirements (audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0) were =
 not met:=0AX+	as_fn_error "Package requirements (audacious >=3D 1.4.0 audcl=
 ient dbus-glib-1 glib-2.0 gobject-2.0) were not met:=0AX =0AX $Audacious_PK=
 G_ERRORS=0AX =0AX@@ -11645,7 +11645,7 @@=0AX =0AX =0AX if test x$want_apcup=
 sd =3D xyes; then=0AX-  if test x"$uname" !=3D xLinux; then=0AX+  if test x=
 "$uname" !=3D xLinux -a x"$uname" !=3D xFreeBSD; then=0AX       { $as_echo =
 "$as_me:${as_lineno-$LINENO}: apcupsd not supported on $uname... disabling"=
  >&5=0AX $as_echo "$as_me: apcupsd not supported on $uname... disabling" >&=
 6;}=0AX       want_apcupsd=3D"not supported on $uname"=0AX@@ -11675,7 +1167=
 5,7 @@=0AX =0AX =0AX if test x$want_iostats =3D xyes; then=0AX-  if test x"=
 $uname" !=3D xLinux; then=0AX+  if test x"$uname" !=3D xLinux -a x"$uname" =
 !=3D xFreeBSD; then=0AX       { $as_echo "$as_me:${as_lineno-$LINENO}: iost=
 ats not supported on $uname... disabling" >&5=0AX $as_echo "$as_me: iostats=
  not supported on $uname... disabling" >&6;}=0AX       want_iostats=3D"not =
 supported on $uname"=0AX@@ -15950,11 +15950,6 @@=0AX fi=0AX =0AX fi=0AX-if =
 test x$want_alsa =3D xyes; then=0AX-=0AX-$as_echo "#define MIXER_IS_ALSA 1"=
  >>confdefs.h=0AX-=0AX-fi=0AX =0AX for ac_header in signal.h unistd.h sys/u=
 tsname.h sys/stat.h linux/soundcard.h alsa/asoundlib.h dirent.h mcheck.h \=
 =0AX       sys/statfs.h sys/param.h pthread.h semaphore.h assert.h errno.h =
 time.h=0AX@@ -18905,6 +18900,7 @@=0AX   ALSA mixer:       $want_alsa=0AX   =
 apcupsd:          $want_apcupsd=0AX   I/O stats:        $want_iostats=0AX+ =
  ncurses:          $want_ncurses=0AX =0AX  * Lua ($want_lua) bindings:=0AX =
   Cairo:            $want_lua_cairo=0A498e2a3501cfe7ff2362b87148767ae4=0Aec=
 ho x - conky/files/patch-src-common.c=0Ased 's/^X//' >conky/files/patch-src=
 -common.c << '24cdd30e7953ea41310801eca05f1374'=0AX--- src/common.c.orig=0A=
 X+++ src/common.c=0AX@@ -411,8 +417,14 @@ void update_stuff(void)=0AX 	}=0A=
 X 	/* need to synchronise here, otherwise locking is needed (as data=0AX 	 =
 * would be printed with some update callbacks still running) */=0AX-	for (u=
 c =3D update_cb_head.next; uc; uc =3D uc->next)=0AX+	for (uc =3D update_cb_=
 head.next; uc; uc =3D uc->next) {=0AX 		sem_wait(&uc->end_wait);=0AX+		if(u=
 c =3D=3D uc->next) {=0AX+			pthread_join(uc->thread, NULL);=0AX+			free(uc)=
 ;=0AX+			exit(EXIT_FAILURE);=0AX+		}=0AX+	}=0AX =0AX 	/* XXX: move the foll=
 owing into the update_meminfo() functions? */=0AX 	if (no_buffers) {=0A24cd=
 d30e7953ea41310801eca05f1374=0Aecho x - conky/files/patch-src-i8k.c=0Ased '=
 s/^X//' >conky/files/patch-src-i8k.c << '03f7f438b524e17aa11f6534db01c938'=
 =0AX--- src/i8k.c.orig=0AX+++ src/i8k.c=0AX@@ -61,8 +61,12 @@ void update_i=
 8k(void)=0AX 		i8k_procbuf =3D (char *) malloc(128 * sizeof(char));=0AX 	}=
 =0AX 	if ((fp =3D fopen(PROC_I8K, "r")) =3D=3D NULL) {=0AX-		CRIT_ERR(NULL,=
  NULL, "/proc/i8k doesn't exist! use insmod to make sure the kernel "=0AX+	=
 	free(i8k_procbuf);=0AX+		i8k_procbuf =3D NULL;=0AX+		NORM_ERR("/proc/i8k d=
 oesn't exist! use insmod to make sure the kernel "=0AX 			"driver is loaded=
 =2E..");=0AX+		clean_up_without_threads(NULL, NULL);=0AX+		free(current_mai=
 l_spool);=0AX 	}=0AX =0AX 	memset(&i8k_procbuf[0], 0, 128);=0A03f7f438b524e=
 17aa11f6534db01c938=0Aecho x - conky/files/patch-src-diskio.c=0Ased 's/^X//=
 ' >conky/files/patch-src-diskio.c << '4cdfd9587647cda26c3e5aa9031719fa'=0AX=
 --- src/diskio.c.orig=0AX+++ src/diskio.c=0AX@@ -76,12 +76,6 @@ struct disk=
 io_stat *prepare_diskio_stat(const char *s)=0AX 	if (!s)=0AX 		return &stat=
 s;=0AX =0AX-#if defined(__FreeBSD__)=0AX-	if (strncmp(s, "/dev/", 5) =3D=3D=
  0) {=0AX-		// supplied a /dev/device arg, so cut off the /dev part=0AX-		s=
 trncpy(device_name, s + 5, text_buffer_size);=0AX-	} else=0AX-#endif=0AX 	s=
 trncpy(device_name, s, text_buffer_size);=0AX =0AX 	snprintf(stat_name, tex=
 t_buffer_size, "/dev/%s", device_name);=0A4cdfd9587647cda26c3e5aa9031719fa=
 =0Aecho x - conky/files/patch-src-conky.h=0Ased 's/^X//' >conky/files/patch=
 -src-conky.h << 'af61214ebb1a9bd0a4b9cfc894797f31'=0AX--- src/conky.h.orig=
 =0AX+++ src/conky.h=0AX@@ -296,9 +296,7 @@ extern int top_cpu, top_mem, top=
 _time;=0AX #ifdef IOSTATS=0AX extern int top_io;=0AX #endif=0AX-#ifdef __li=
 nux__=0AX extern int top_running;=0AX-#endif=0AX =0AX /* defined in conky.c=
 , needed by top.c */=0AX extern int cpu_separate;=0Aaf61214ebb1a9bd0a4b9cfc=
 894797f31=0Aecho x - conky/files/patch-src-mail.c=0Ased 's/^X//' >conky/fil=
 es/patch-src-mail.c << '08f1d225e95a511dc39755093b1c6f93'=0AX--- src/mail.c=
 =2Eorig=0AX+++ src/mail.c=0AX@@ -61,6 +61,8 @@=0AX #define POP3_TYPE 1=0AX =
 #define IMAP_TYPE 2=0AX =0AX+#define MAXFOLDERSIZE 128=0AX+=0AX struct mail=
 _s {			// for imap and pop3=0AX 	unsigned long unseen;=0AX 	unsigned long m=
 essages;=0AX@@ -74,7 +76,7 @@ struct mail_s {			// for imap and pop3=0AX 	c=
 har user[128];=0AX 	char pass[128];=0AX 	char command[1024];=0AX-	char fold=
 er[128];=0AX+	char folder[MAXFOLDERSIZE];=0AX 	timed_thread *p_timed_thread=
 ;=0AX 	char secure;=0AX };=0AX@@ -465,17 +467,20 @@ struct mail_s *parse_ma=
 il_args(char type, const char *arg)=0AX 	if (type =3D=3D IMAP_TYPE) {=0AX 	=
 	tmp =3D strstr(arg, "-f ");=0AX 		if (tmp) {=0AX-			int len =3D 1024;=0AX+=
 			int len =3D MAXFOLDERSIZE-1;=0AX 			tmp +=3D 3;=0AX 			if (tmp[0] =3D=3D=
  '\'') {=0AX 				len =3D strstr(tmp + 1, "'") - tmp - 1;=0AX-				if (len > =
 1024) {=0AX-					len =3D 1024;=0AX+				if (len > MAXFOLDERSIZE-1) {=0AX+			=
 		len =3D MAXFOLDERSIZE-1;=0AX 				}=0AX+				tmp++;=0AX 			}=0AX-			strncpy=
 (mail->folder, tmp + 1, len);=0AX+			strncpy(mail->folder, tmp, len);=0AX+	=
 		mail->folder[len-1] =3D 0;=0AX 		} else {=0AX-			strncpy(mail->folder, "I=
 NBOX", 128);	// default imap inbox=0AX+			strncpy(mail->folder, "INBOX", MA=
 XFOLDERSIZE-1);	// default imap inbox=0AX+			mail->folder[MAXFOLDERSIZE-1] =
 =3D 0;=0AX 		}=0AX 	}=0AX 	tmp =3D strstr(arg, "-e ");=0A08f1d225e95a511dc3=
 9755093b1c6f93=0Aecho x - conky/files/patch-src-bmpx.c=0Ased 's/^X//' >conk=
 y/files/patch-src-bmpx.c << '7009353d4142186daa1a0cda0c310e52'=0AX--- src/b=
 mpx.c.orig=0AX+++ src/bmpx.c=0AX@@ -42,7 +42,7 @@=0AX static int connected =
 =3D 0;=0AX static char *unknown =3D "unknown";=0AX =0AX-void fail(GError *e=
 rror);=0AX+void fail(GError *error, struct information *);=0AX =0AX void up=
 date_bmpx()=0AX {=0AX@@ -58,15 +58,15 @@=0AX 		bus =3D dbus_g_bus_get(DBUS_=
 BUS_SESSION, &error);=0AX 		if (bus =3D=3D NULL) {=0AX 			NORM_ERR("BMPx er=
 ror 1: %s\n", error->message);=0AX-			fail(error);=0AX+			fail(error, curre=
 nt_info);=0AX 			return;=0AX 		}=0AX =0AX 		remote_object =3D dbus_g_proxy_=
 new_for_name(bus, BMP_DBUS_SERVICE,=0AX-				BMP_DBUS_PATH, BMP_DBUS_INTERFA=
 CE);=0AX+				BMP_DBUS_PATH__BMP, BMP_DBUS_INTERFACE__BMP);=0AX 		if (!remot=
 e_object) {=0AX 			NORM_ERR("BMPx error 2: %s\n", error->message);=0AX-			f=
 ail(error);=0AX+			fail(error, current_info);=0AX 			return;=0AX 		}=0AX =
 =0AX@@ -78,7 +78,7 @@=0AX 					G_TYPE_INVALID, G_TYPE_INT, &current_track, =
 G_TYPE_INVALID)) {=0AX 		} else {=0AX 			NORM_ERR("BMPx error 3: %s\n", err=
 or->message);=0AX-			fail(error);=0AX+			fail(error, current_info);=0AX 			=
 return;=0AX 		}=0AX =0AX@@ -112,17 +112,17 @@=0AX 				g_value_get_string(g_=
 hash_table_lookup(metadata, "location"));=0AX 		} else {=0AX 			NORM_ERR("B=
 MPx error 4: %s\n", error->message);=0AX-			fail(error);=0AX+			fail(error,=
  current_info);=0AX 			return;=0AX 		}=0AX =0AX 		g_hash_table_destroy(meta=
 data);=0AX 	} else {=0AX-		fail(error);=0AX+		fail(error, current_info);=0A=
 X 	}=0AX }=0AX =0AX-void fail(GError *error)=0AX+void fail(GError *error, s=
 truct information *current_info)=0AX {=0AX 	if (error) {=0AX 		g_error_free=
 (error);=0A7009353d4142186daa1a0cda0c310e52=0Aecho x - conky/files/patch-sr=
 c-top.c=0Ased 's/^X//' >conky/files/patch-src-top.c << '5a1c07c8f27bb5fa50c=
 9d078a689ba56'=0AX--- src/top.c.orig=0AX+++ src/top.c=0AX@@ -880,16 +880,22=
  @@ int parse_top_args(const char *s, const char *arg, struct text_object *=
 obj)=0AX #else /* IOSTATS */=0AX 			NORM_ERR("must be one of: name, cpu, pi=
 d, mem, time, mem_res, mem_vsize");=0AX #endif /* IOSTATS */=0AX+			free(td=
 ->s);=0AX+			free(obj->data.opaque);=0AX 			return 0;=0AX 		}=0AX 		if (n <=
  1 || n > 10) {=0AX 			NORM_ERR("invalid num arg for top. Must be between 1=
  and 10.");=0AX+			free(td->s);=0AX+			free(obj->data.opaque);=0AX 			retur=
 n 0;=0AX 		} else {=0AX 			td->num =3D n - 1;=0AX 		}=0AX 	} else {=0AX 		N=
 ORM_ERR("invalid argument count for top");=0AX+		free(td->s);=0AX+		free(ob=
 j->data.opaque);=0AX 		return 0;=0AX 	}=0AX 	return 1;=0A5a1c07c8f27bb5fa50=
 c9d078a689ba56=0Aecho x - conky/files/patch-src-logging.h=0Ased 's/^X//' >c=
 onky/files/patch-src-logging.h << 'd71a60d6818a8d7f78b196674f4e0c11'=0AX---=
  src/logging.h.orig=0AX+++ src/logging.h=0AX@@ -30,6 +30,7 @@=0AX #include =
 "mail.h"=0AX =0AX void clean_up(void *memtofree1, void* memtofree2);=0AX+vo=
 id clean_up_without_threads(void *memtofree1, void* memtofree2);=0AX =0AX #=
 ifndef _LOGGING_H=0AX #define _LOGGING_H=0AX@@ -44,6 +45,9 @@ void clean_up=
 (void *memtofree1, void* memtofree2);=0AX #define CRIT_ERR(memtofree1, memt=
 ofree2, ...) \=0AX 	{ NORM_ERR(__VA_ARGS__); clean_up(memtofree1, memtofree=
 2); free(current_mail_spool); exit(EXIT_FAILURE); }=0AX =0AX+#define THREAD=
 _CRIT_ERR(memtofree1, memtofree2, ...) \=0AX+	{ NORM_ERR(__VA_ARGS__); clea=
 n_up_without_threads(memtofree1, memtofree2); free(current_mail_spool); ret=
 urn; }=0AX+=0AX /* debugging output */=0AX extern int global_debug_level;=
 =0AX #define __DBGP(level, ...) \=0Ad71a60d6818a8d7f78b196674f4e0c11=0Aecho=
  x - conky/files/patch-src-bmpx.h=0Ased 's/^X//' >conky/files/patch-src-bmp=
 x.h << '7aa331d858358f3f577dc4fd46751684'=0AX--- src/bmpx.h.orig=0AX+++ src=
 /bmpx.h=0AX@@ -0,0 +1,39 @@=0AX+/* -*- mode: c; c-basic-offset: 4; tab-widt=
 h: 4; indent-tabs-mode: t -*-=0AX+ * vim: ts=3D4 sw=3D4 noet ai cindent syn=
 tax=3Dc=0AX+ *=0AX+ * Conky, a system monitor, based on torsmo=0AX+ *=0AX+ =
 * Please see COPYING for details=0AX+ *=0AX+ * Copyright (c) 2005-2009 Bren=
 den Matthews, Philip Kovacs, et. al.=0AX+ *	(see AUTHORS)=0AX+ * All rights=
  reserved.=0AX+ *=0AX+ * This program is free software: you can redistribut=
 e it and/or modify=0AX+ * it under the terms of the GNU General Public Lice=
 nse as published by=0AX+ * the Free Software Foundation, either version 3 o=
 f the License, or=0AX+ * (at your option) any later version.=0AX+ *=0AX+ * =
 This program is distributed in the hope that it will be useful,=0AX+ * but =
 WITHOUT ANY WARRANTY; without even the implied warranty of=0AX+ * MERCHANTA=
 BILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the=0AX+ * GNU General Pub=
 lic License for more details.=0AX+ * You should have received a copy of the=
  GNU General Public License=0AX+ * along with this program.  If not, see <h=
 ttp://www.gnu.org/licenses/>.=0AX+ *=0AX+ */=0AX+=0AX+#ifndef BMPX_H_=0AX+#=
 define BMPX_H_=0AX+=0AX+void update_bmpx(void);=0AX+struct bmpx_s {=0AX+	ch=
 ar *title;=0AX+	char *artist;=0AX+	char *album;=0AX+	char *uri;=0AX+	int bi=
 trate;=0AX+	int track;=0AX+};=0AX+=0AX+#endif /*BMPX_H_*/=0A7aa331d858358f3=
 f577dc4fd46751684=0Aecho x - conky/files/patch-src-rss.c=0Ased 's/^X//' >co=
 nky/files/patch-src-rss.c << '76c8c57d8c780d81a228c4b723b5d1cb'=0AX--- src/=
 rss.c.orig=0AX+++ src/rss.c=0AX@@ -67,7 +67,7 @@ static void rss_process_in=
 fo(char *p, int p_max_size, char *uri, char *action, i=0AX 		curloc->result=
  =3D malloc(sizeof(PRSS));=0AX 		memset(curloc->result, 0, sizeof(PRSS));=
 =0AX 		curloc->process_function =3D &prss_parse_data;=0AX-		ccurl_init_thre=
 ad(curloc, interval);=0AX+		ccurl_init_thread(curloc, interval * 60);=0AX 	=
 	if (!curloc->p_timed_thread) {=0AX 			NORM_ERR("error setting up RSS threa=
 d");=0AX 		}=0A76c8c57d8c780d81a228c4b723b5d1cb=0Aecho x - conky/files/patc=
 h-lua-cairo.pkg=0Ased 's/^X//' >conky/files/patch-lua-cairo.pkg << 'b690010=
 cd703ed9c276c87f5b62a0618'=0AX--- lua/cairo.pkg.orig=0AX+++ lua/cairo.pkg=
 =0AX@@ -4,6 +4,7 @@=0AX $#include <cairo-xlib.h>=0AX $#include <X11/Xlib.h>=
 =0AX $#include "libcairo-helper.h"=0AX+$#define tolua_outside=0AX /*=0AX  *=
  This code was mostly copied from cairo.h and cairo-xlib.h with comments=0A=
 X  * removed.  The licence noticed below is present for the sake of clarity=
 =2E=0Ab690010cd703ed9c276c87f5b62a0618=0Aecho x - conky/files/patch-src-Mak=
 efile.in=0Ased 's/^X//' >conky/files/patch-src-Makefile.in << '5c21d9aa16f5=
 dcf2797cb5497615f523'=0AX--- src/Makefile.in.orig=0AX+++ src/Makefile.in=0A=
 X@@ -141,7 +141,7 @@=0AX am__objects_15 =3D conky-linux.$(OBJEXT) conky-top=
 =2E$(OBJEXT) \=0AX 	conky-users.$(OBJEXT) conky-sony.$(OBJEXT) conky-i8k.$(=
 OBJEXT)=0AX @BUILD_LINUX_TRUE@am__objects_16 =3D $(am__objects_15)=0AX-am__=
 objects_17 =3D conky-freebsd.$(OBJEXT)=0AX+am__objects_17 =3D conky-freebsd=
 =2E$(OBJEXT) conky-top.$(OBJEXT)=0AX @BUILD_FREEBSD_TRUE@am__objects_18 =3D=
  $(am__objects_17)=0AX am__objects_19 =3D conky-openbsd.$(OBJEXT)=0AX @BUIL=
 D_OPENBSD_TRUE@am__objects_20 =3D $(am__objects_19)=0A5c21d9aa16f5dcf2797cb=
 5497615f523=0Aecho x - conky/files/patch-src-core.c=0Ased 's/^X//' >conky/f=
 iles/patch-src-core.c << '00e630dd0ae98e36949f27098228d476'=0AX--- src/core=
 =2Ec.orig=0AX+++ src/core.c=0AX@@ -171,8 +171,6 @@=0AX 			NORM_ERR("acpiaca=
 dapter: arg is only used on linux");=0AX #endif=0AX 		}=0AX-		if(! obj->dat=
 a.opaque)=0AX-			obj->data.opaque =3D strdup("AC");=0AX #endif /* !__OpenBS=
 D__ */=0AX 	END OBJ(freq, 0)=0AX 		get_cpu_count();=0AX@@ -279,8 +277,9 @@=
 =0AX 		obj->data.s =3D strndup(bat, text_buffer_size);=0AX 	END OBJ(battery=
 _bar, 0)=0AX 		char bat[64];=0AX-		if (arg) {=0AX-			arg =3D scan_bar(obj, =
 arg);=0AX+=0AX+		arg =3D scan_bar(obj, arg);=0AX+		if (arg && strlen(arg)>0=
 ) {=0AX 			sscanf(arg, "%63s", bat);=0AX 		} else {=0AX 			strcpy(bat, "BAT=
 0");=0AX@@ -372,18 +372,18 @@=0AX 		scan_loadgraph_arg(obj, arg);=0AX #endi=
 f /* X11 */=0AX 	END OBJ(diskio, &update_diskio)=0AX-		parse_diskio_arg(obj=
 , arg);=0AX+		parse_diskio_arg(obj, dev_name(arg));=0AX 	END OBJ(diskio_rea=
 d, &update_diskio)=0AX-		parse_diskio_arg(obj, arg);=0AX+		parse_diskio_arg=
 (obj, dev_name(arg));=0AX 	END OBJ(diskio_write, &update_diskio)=0AX-		pars=
 e_diskio_arg(obj, arg);=0AX+		parse_diskio_arg(obj, dev_name(arg));=0AX #if=
 def X11=0AX 	END OBJ(diskiograph, &update_diskio)=0AX-		parse_diskiograph_a=
 rg(obj, arg);=0AX+		parse_diskiograph_arg(obj, dev_name(arg));=0AX 	END OBJ=
 (diskiograph_read, &update_diskio)=0AX-		parse_diskiograph_arg(obj, arg);=
 =0AX+		parse_diskiograph_arg(obj, dev_name(arg));=0AX 	END OBJ(diskiograph_=
 write, &update_diskio)=0AX-		parse_diskiograph_arg(obj, arg);=0AX+		parse_d=
 iskiograph_arg(obj, dev_name(arg));=0AX #endif /* X11 */=0AX 	END OBJ(color=
 , 0)=0AX #ifdef X11=0AX@@ -542,6 +542,13 @@=0AX 		parse_platform_sensor(obj=
 , arg);=0AX 	END OBJ_ARG(hwmon, 0, "hwmon needs argumanets")=0AX 		parse_hw=
 mon_sensor(obj, arg);=0AX+#endif /* __linux__ */=0AX+	END OBJ(addr, &update=
 _net_stats)=0AX+		parse_net_stat_arg(obj, arg, free_at_crash);=0AX+#ifdef _=
 _linux__=0AX+	END OBJ(addrs, &update_net_stats)=0AX+		parse_net_stat_arg(ob=
 j, arg, free_at_crash);=0AX+#endif /* __linux__ */=0AX 	END=0AX 	/* we have=
  four different types of top (top, top_mem, top_time and top_io). To=0AX 	 =
 * avoid having almost-same code four times, we have this special=0AX@@ -552=
 ,12 +559,8 @@=0AX 		if (!parse_top_args(s, arg, obj)) {=0AX 			return NULL;=
 =0AX 		}=0AX-	} else OBJ(addr, &update_net_stats)=0AX-		parse_net_stat_arg(=
 obj, arg, free_at_crash);=0AX-	END OBJ(addrs, &update_net_stats)=0AX-		pars=
 e_net_stat_arg(obj, arg, free_at_crash);=0AX-#endif /* __linux__ */=0AX-	EN=
 D OBJ_ARG(tail, 0, "tail needs arguments")=0AX+	} else=0AX+		OBJ_ARG(tail, =
 0, "tail needs arguments")=0AX 		init_tailhead("tail", arg, obj, free_at_cr=
 ash);=0AX 	END OBJ_ARG(head, 0, "head needs arguments")=0AX 		init_tailhead=
 ("head", arg, obj, free_at_crash);=0AX@@ -786,9 +789,9 @@=0AX 		obj->sub =
 =3D malloc(sizeof(struct text_object));=0AX 		extract_variable_text_interna=
 l(obj->sub, arg);=0AX 	END OBJ(processes, &update_total_processes)=0AX-#ifd=
 ef __linux__=0AX 	END OBJ(running_processes, &update_top)=0AX 		top_running=
  =3D 1;=0AX+#ifdef __linux__=0AX 	END OBJ(threads, &update_threads)=0AX 	EN=
 D OBJ(running_threads, &update_stat)=0AX #else=0AX@@ -966,8 +969,10 @@=0AX =
 	END OBJ(xmms2_size, &update_xmms2)=0AX 	END OBJ(xmms2_status, &update_xmms=
 2)=0AX 	END OBJ(xmms2_percent, &update_xmms2)=0AX+#ifdef X11=0AX 	END OBJ(x=
 mms2_bar, &update_xmms2)=0AX 		scan_bar(obj, arg);=0AX+#endif=0AX 	END OBJ(=
 xmms2_smart, &update_xmms2)=0AX 	END OBJ(xmms2_playlist, &update_xmms2)=0AX=
  	END OBJ(xmms2_timesplayed, &update_xmms2)=0AX@@ -993,9 +998,11 @@=0AX 	EN=
 D OBJ(audacious_playlist_length, &update_audacious)=0AX 	END OBJ(audacious_=
 playlist_position, &update_audacious)=0AX 	END OBJ(audacious_main_volume, &=
 update_audacious)=0AX+#ifdef X11=0AX 	END OBJ(audacious_bar, &update_audaci=
 ous)=0AX 		scan_bar(obj, arg);=0AX #endif=0AX+#endif=0AX #ifdef BMPX=0AX 	E=
 ND OBJ(bmpx_title, &update_bmpx)=0AX 		memset(&(info.bmpx), 0, sizeof(struc=
 t bmpx_s));=0AX@@ -1327,7 +1334,7 @@=0AX 			strfold(p, 1);=0AX 		} else if =
 (*p =3D=3D '#') {=0AX 			char c;=0AX-			if (remove_comment(p, &c) && p > or=
 ig_p && c =3D=3D '\n') {=0AX+			if (remove_comment(p, &c) && p >=3D orig_p =
 && c =3D=3D '\n') {=0AX 				/* if remove_comment removed a newline, we need=
  to 'back up' with p */=0AX 				p--;=0AX 			}=0A00e630dd0ae98e36949f2709822=
 8d476=0Aecho x - conky/files/patch-src-freebsd.c=0Ased 's/^X//' >conky/file=
 s/patch-src-freebsd.c << '11452bf3b469397e88fdf71c8331e2fa'=0AX--- src/free=
 bsd.c.orig=0AX+++ src/freebsd.c=0AX@@ -67,7 +67,7 @@=0AX #endif=0AX =0AX __=
 attribute__((gnu_inline)) inline void=0AX-proc_find_top(struct process **cp=
 u, struct process **mem);=0AX+proc_find_top(struct process **cpu, struct pr=
 ocess **mem, struct process **time);=0AX =0AX static short cpu_setup =3D 0;=
 =0AX =0AX@@ -286,40 +290,38 @@ void update_running_processes(void)=0AX 	inf=
 o.run_procs =3D cnt;=0AX }=0AX =0AX-struct cpu_load_struct {=0AX-	unsigned =
 long load[5];=0AX-};=0AX-=0AX-struct cpu_load_struct fresh =3D { {0, 0, 0, =
 0, 0} };=0AX-long cpu_used, oldtotal, oldused;=0AX-=0AX void get_cpu_count(=
 void)=0AX {=0AX-	/* int cpu_count =3D 0; */=0AX+	int cpu_count =3D 0;=0AX+	=
 size_t cpu_count_len =3D sizeof(cpu_count);=0AX =0AX-	/* XXX: FreeBSD doesn=
 't allow to get per CPU load stats on SMP machines.=0AX-	 * It's possible t=
 o get a CPU count, but as we fulfill only=0AX-	 * info.cpu_usage[0], it's b=
 etter to report there's only one CPU.=0AX-	 * It should fix some bugs (e.g.=
  cpugraph) */=0AX-#if 0=0AX 	if (GETSYSCTL("hw.ncpu", cpu_count) =3D=3D 0) =
 {=0AX 		info.cpu_count =3D cpu_count;=0AX+	} else {=0AX+		fprintf(stderr, "=
 Cannot get hw.ncpu\n");=0AX+		info.cpu_count =3D 0;=0AX 	}=0AX-#endif=0AX-	=
 info.cpu_count =3D 1;=0AX =0AX-	info.cpu_usage =3D malloc(info.cpu_count * =
 sizeof(float));=0AX+	info.cpu_usage =3D malloc((info.cpu_count + 1) * sizeo=
 f(float));=0AX 	if (info.cpu_usage =3D=3D NULL) {=0AX 		CRIT_ERR(NULL, NULL=
 , "malloc");=0AX 	}=0AX }=0AX =0AX-/* XXX: SMP support */=0AX-void update_c=
 pu_usage(void)=0AX+struct cpu_info {=0AX+	long oldtotal;=0AX+	long oldused;=
 =0AX+};=0AX+=0AX+void update_cpu_usage(void)=0AX {=0AX+	int i, j =3D 0;=0AX=
  	long used, total;=0AX-	long cp_time[CPUSTATES];=0AX-	size_t cp_len =3D si=
 zeof(cp_time);=0AX+	long *cp_time =3D NULL;=0AX+	size_t cp_len;=0AX+	static=
  struct cpu_info *cpu =3D NULL;=0AX+	unsigned int malloc_cpu_size =3D 0;=0A=
 X+	extern void* global_cpu;=0AX =0AX 	/* add check for !info.cpu_usage sinc=
 e that mem is freed on a SIGUSR1 */=0AX 	if ((cpu_setup =3D=3D 0) || (!info=
 =2Ecpu_usage)) {=0AX@@ -327,28 +332,68 @@ void update_cpu_usage(void)=0AX 	=
 	cpu_setup =3D 1;=0AX 	}=0AX =0AX-	if (sysctlbyname("kern.cp_time", &cp_tim=
 e, &cp_len, NULL, 0) < 0) {=0AX-		fprintf(stderr, "Cannot get kern.cp_time"=
 );=0AX+	if (!global_cpu) {=0AX+		malloc_cpu_size =3D (info.cpu_count + 1) *=
  sizeof(struct cpu_info);=0AX+		cpu =3D malloc(malloc_cpu_size);=0AX+		mems=
 et(cpu, 0, malloc_cpu_size);=0AX+		global_cpu =3D cpu;=0AX 	}=0AX =0AX-	fre=
 sh.load[0] =3D cp_time[CP_USER];=0AX-	fresh.load[1] =3D cp_time[CP_NICE];=
 =0AX-	fresh.load[2] =3D cp_time[CP_SYS];=0AX-	fresh.load[3] =3D cp_time[CP_=
 IDLE];=0AX-	fresh.load[4] =3D cp_time[CP_IDLE];=0AX+	/* cpu[0] is overall s=
 tats, get it from separate sysctl */=0AX+	cp_len =3D CPUSTATES * sizeof(lon=
 g);=0AX+	cp_time =3D malloc(cp_len);=0AX =0AX-	used =3D fresh.load[0] + fre=
 sh.load[1] + fresh.load[2];=0AX-	total =3D fresh.load[0] + fresh.load[1] + =
 fresh.load[2] + fresh.load[3];=0AX+	if (sysctlbyname("kern.cp_time", cp_tim=
 e, &cp_len, NULL, 0) < 0) {=0AX+		fprintf(stderr, "Cannot get kern.cp_time\=
 n");=0AX+	}=0AX+=0AX+	total =3D 0;=0AX+	for (j =3D 0; j < CPUSTATES; j++)=
 =0AX+		total +=3D cp_time[j];=0AX =0AX-	if ((total - oldtotal) !=3D 0) {=0A=
 X-		info.cpu_usage[0] =3D ((double) (used - oldused)) /=0AX-			(double) (to=
 tal - oldtotal);=0AX+	used =3D total - cp_time[CP_IDLE];=0AX+=0AX+	if ((tot=
 al - cpu[0].oldtotal) !=3D 0) {=0AX+		info.cpu_usage[0] =3D ((double) (used=
  - cpu[0].oldused)) /=0AX+		(double) (total - cpu[0].oldtotal);=0AX 	} else=
  {=0AX 		info.cpu_usage[0] =3D 0;=0AX 	}=0AX =0AX-	oldused =3D used;=0AX-	o=
 ldtotal =3D total;=0AX+	cpu[0].oldused =3D used;=0AX+	cpu[0].oldtotal =3D t=
 otal;=0AX+=0AX+	free(cp_time);=0AX+=0AX+	/* per-core stats */=0AX+	cp_len =
 =3D CPUSTATES * sizeof(long) * info.cpu_count;=0AX+	cp_time =3D malloc(cp_l=
 en);=0AX+=0AX+	/* on e.g. i386 SMP we may have more values than actual cpus=
 ; this will just drop extra values */=0AX+	if (sysctlbyname("kern.cp_times"=
 , cp_time, &cp_len, NULL, 0) < 0 && errno !=3D ENOMEM) {=0AX+		fprintf(stde=
 rr, "Cannot get kern.cp_times\n");=0AX+	}=0AX+=0AX+	for (i =3D 0; i < info.=
 cpu_count; i++)=0AX+	{=0AX+		total =3D 0;=0AX+		for (j =3D 0; j < CPUSTATES=
 ; j++)=0AX+			total +=3D cp_time[i*CPUSTATES + j];=0AX+=0AX+		used =3D tota=
 l - cp_time[i*CPUSTATES + CP_IDLE];=0AX+=0AX+		if ((total - cpu[i+1].oldtot=
 al) !=3D 0) {=0AX+			info.cpu_usage[i+1] =3D ((double) (used - cpu[i+1].old=
 used)) /=0AX+			(double) (total - cpu[i+1].oldtotal);=0AX+		} else {=0AX+		=
 	info.cpu_usage[i+1] =3D 0;=0AX+		}=0AX+=0AX+		cpu[i+1].oldused =3D used;=
 =0AX+		cpu[i+1].oldtotal =3D total;=0AX+	}=0AX+=0AX+	free(cp_time);=0AX }=
 =0AX =0AX void update_load_average(void)=0AX@@ -540,7 +588,7 @@ char get_fr=
 eq(char *p_client_buffer, size_t client_buffer_size, const char *p_fo=0AX =
 =0AX void update_top(void)=0AX {=0AX-	proc_find_top(info.cpu, info.memu);=
 =0AX+	proc_find_top(info.cpu, info.memu, info.time);=0AX }=0AX =0AX #if 0=
 =0AX@@ -676,8 +726,15 @@ int comparemem(const void *a, const void *b)=0AX 	=
 }=0AX }=0AX =0AX+int comparetime(const void *va, const void *vb)=0AX+{=0AX+=
 	struct process *a =3D (struct process *)va, *b =3D (struct process *)vb;=
 =0AX+=0AX+	return b->total_cpu_time - a->total_cpu_time;=0AX+}=0AX+=0AX __a=
 ttribute__((gnu_inline)) inline void=0AX-proc_find_top(struct process **cpu=
 , struct process **mem)=0AX+proc_find_top(struct process **cpu, struct proc=
 ess **mem, struct process **time)=0AX {=0AX 	struct kinfo_proc *p;=0AX 	int=
  n_processes;=0AX@@ -701,6 +758,9 @@ proc_find_top(struct process **cpu, st=
 ruct process **mem)=0AX 			processes[j].amount =3D 100.0 * p[i].ki_pctcpu /=
  FSCALE;=0AX 			processes[j].vsize =3D p[i].ki_size;=0AX 			processes[j].rs=
 s =3D (p[i].ki_rssize * getpagesize());=0AX+			/* ki_runtime is in microsec=
 onds, total_cpu_time in centiseconds.=0AX+			 * Therefore we divide by 1000=
 0. */=0AX+			processes[j].total_cpu_time =3D p[i].ki_runtime / 10000;=0AX 	=
 		j++;=0AX 		}=0AX 	}=0AX@@ -710,11 +770,8 @@ proc_find_top(struct process =
 **cpu, struct process **mem)=0AX 		struct process *tmp, *ttmp;=0AX =0AX 		t=
 mp =3D malloc(sizeof(struct process));=0AX-		tmp->pid =3D processes[i].pid;=
 =0AX-		tmp->amount =3D processes[i].amount;=0AX+		memcpy(tmp, &processes[i]=
 , sizeof(struct process));=0AX 		tmp->name =3D strndup(processes[i].name, t=
 ext_buffer_size);=0AX-		tmp->rss =3D processes[i].rss;=0AX-		tmp->vsize =3D=
  processes[i].vsize;=0AX =0AX 		ttmp =3D mem[i];=0AX 		mem[i] =3D tmp;=0AX@=
 @ -729,11 +786,8 @@ proc_find_top(struct process **cpu, struct process **me=
 m)=0AX 		struct process *tmp, *ttmp;=0AX =0AX 		tmp =3D malloc(sizeof(struc=
 t process));=0AX-		tmp->pid =3D processes[i].pid;=0AX-		tmp->amount =3D pro=
 cesses[i].amount;=0AX+		memcpy(tmp, &processes[i], sizeof(struct process));=
 =0AX 		tmp->name =3D strndup(processes[i].name, text_buffer_size);=0AX-		tm=
 p->rss =3D processes[i].rss;=0AX-		tmp->vsize =3D processes[i].vsize;=0AX =
 =0AX 		ttmp =3D cpu[i];=0AX 		cpu[i] =3D tmp;=0AX@@ -743,6 +797,22 @@ proc_=
 find_top(struct process **cpu, struct process **mem)=0AX 		}=0AX 	}=0AX =0A=
 X+	qsort(processes, j - 1, sizeof(struct process), comparetime);=0AX+	for (=
 i =3D 0; i < 10 && i < n_processes; i++) {=0AX+		struct process *tmp, *ttmp=
 ;=0AX+=0AX+		tmp =3D malloc(sizeof(struct process));=0AX+		memcpy(tmp, &pro=
 cesses[i], sizeof(struct process));=0AX+		tmp->name =3D strndup(processes[i=
 ].name, text_buffer_size);=0AX+=0AX+		ttmp =3D time[i];=0AX+		time[i] =3D t=
 mp;=0AX+		if (ttmp !=3D NULL) {=0AX+			free(ttmp->name);=0AX+			free(ttmp);=
 =0AX+		}=0AX+	}=0AX+=0AX #if defined(FREEBSD_DEBUG)=0AX 	printf("=3D=3D=3D=
 =3D=3D\nmem\n");=0AX 	for (i =3D 0; i < 10; i++) {=0AX@@ -916,8 +986,3 @@ i=
 nt get_entropy_poolsize(unsigned int *val)=0AX 	(void)val;=0AX 	return 1;=
 =0AX }=0AX-=0AX-/* empty stub so conky links */=0AX-void free_all_processes=
 (void)=0AX-{=0AX-}=0A11452bf3b469397e88fdf71c8331e2fa=0Aecho x - conky/pkg-=
 descr=0Ased 's/^X//' >conky/pkg-descr << '1dc47ddbf5208b510dd9392ba07bd8c1'=
 =0AXConky is an advanced, highly configurable system monitor for X=0AX=0AXW=
 WW:	http://conky.sourceforge.net/=0A1dc47ddbf5208b510dd9392ba07bd8c1=0Aecho=
  x - conky/distinfo=0Ased 's/^X//' >conky/distinfo << 'ca22fce68ddee350633d=
 14dc535474a0'=0AXMD5 (conky-1.8.0.tar.bz2) =3D 494cbaf1108cfdb977fc80454d9b=
 13e2=0AXSHA256 (conky-1.8.0.tar.bz2) =3D badb3824a9655eee90281939df8bdb3ca9=
 5cf8bab03269b3b3775bfea2ed0a51=0AXSIZE (conky-1.8.0.tar.bz2) =3D 610545=0Ac=
 a22fce68ddee350633d14dc535474a0=0Aexit=0A=0A
 --1yeeQ81UyVL57Vl7--

From: Nikos Ntarmos <ntarmos@cs.uoi.gr>
To: bug-followup@FreeBSD.ORG
Cc:  
Subject: Re: ports/150233: conky 1.8 broken (sysutils/conky)
Date: Mon, 4 Oct 2010 20:40:19 +0300

 --C7zPtVaVf+AK4Oqc
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Managed to find a 64-bit host and installed FBSD/amd64 in a vm, and
 *still* can't reproduce the crash... :-\ I did catch a couple of minor
 bugs though (updated shar attached).
 
 The quest continues...
 
 \n\n
 
 --C7zPtVaVf+AK4Oqc
 Content-Type: application/x-shar
 Content-Disposition: attachment; filename="conky.shar"
 Content-Transfer-Encoding: quoted-printable
 
 # This is a shell archive.  Save it in a file, remove anything before=0A# t=
 his line, and then unpack it by entering "sh file".  Note, it may=0A# creat=
 e directories; files and directories will be owned by you and=0A# have defa=
 ult permissions.=0A#=0A# This archive contains:=0A#=0A#	conky=0A#	conky/Mak=
 efile=0A#	conky/files=0A#	conky/files/patch-src-conky.c=0A#	conky/files/pat=
 ch-src-mixer.c=0A#	conky/files/patch-configure=0A#	conky/files/patch-src-co=
 mmon.c=0A#	conky/files/patch-src-i8k.c=0A#	conky/files/patch-src-diskio.c=
 =0A#	conky/files/patch-src-conky.h=0A#	conky/files/patch-src-mail.c=0A#	con=
 ky/files/patch-src-bmpx.c=0A#	conky/files/patch-src-top.c=0A#	conky/files/p=
 atch-src-logging.h=0A#	conky/files/patch-src-bmpx.h=0A#	conky/files/patch-s=
 rc-rss.c=0A#	conky/files/patch-lua-cairo.pkg=0A#	conky/files/patch-src-Make=
 file.in=0A#	conky/files/patch-src-core.c=0A#	conky/files/patch-src-freebsd.=
 c=0A#	conky/pkg-descr=0A#	conky/distinfo=0A#=0Aecho c - conky=0Amkdir -p co=
 nky > /dev/null 2>&1=0Aecho x - conky/Makefile=0Ased 's/^X//' >conky/Makefi=
 le << 'c6f03d61758ca6e484be3d23647891ea'=0AX# New ports collection makefile=
  for:	conky=0AX# Date created:				2005-08-27=0AX# Whom:					Roman Bogorodsk=
 iy <novel@FreeBSD.org>=0AX#=0AX# $FreeBSD: ports/sysutils/conky/Makefile,v =
 1.51 2010/01/28 01:59:34 amdmi3 Exp $=0AX#=0AX=0AXPORTNAME=3D	conky=0AXPORT=
 VERSION=3D	1.8.0=0AXPORTREVISION=3D	1=0AXCATEGORIES=3D	sysutils=0AXMASTER_S=
 ITES=3D	SF=0AX=0AXMAINTAINER=3D	ntarmos@cs.uoi.gr=0AXCOMMENT=3D	An advanced=
 , highly configurable system monitor for X=0AX=0AXCONFLICTS?=3D	conky-aweso=
 me-[0-9]*=0AXSLAVEDIRS=3D	sysutils/conky-awesome=0AX=0AXUSE_ICONV=3D	yes=0A=
 XUSE_BZIP2=3D	yes=0AXGNU_CONFIGURE=3D	yes=0AXUSE_XORG?=3D	x11 xext xdamage=
 =0AXUSE_GNOME?=3D	pkgconfig=0AXUSE_ICONV=3D	yes=0AXUSE_GMAKE=3D	yes=0AXCONF=
 IGURE_ARGS+=3D	--disable-portmon \=0AX			--disable-hddtemp=0AXCONFIGURE_ENV=
 +=3D	CPPFLAGS=3D"${CPPFLAGS} -I${LOCALBASE}/include" \=0AX		LDFLAGS=3D"${LD=
 FLAGS} -L${LOCALBASE}/lib"=0AX=0AXMAN1=3D		conky.1=0AXPLIST_FILES=3D	bin/co=
 nky=0AXPORTEXAMPLES=3D	conkyrc.sample=0AXPORTDOCS=3D	README AUTHORS ChangeL=
 og TODO NEWS \=0AX		docs.html variables.html config_settings.html=0AX=0AXOP=
 TIONS+=3D	APCUPSD "Enable APCUPSD support" Off \=0AX		AUDACIOUS "Enable Aud=
 acious support" Off \=0AX		BMPX "Enable BMPX support" Off \=0AX		MPD "Enabl=
 e MPD support" Off \=0AX		NCURSES "Enable ncurses support" Off \=0AX		RSS "=
 Enable RSS support" Off \=0AX		METAR "Enable METAR Weather support" Off \=
 =0AX		XOAP "Enable XOAP Weather support" Off \=0AX		XMMS2 "Enable XMMS2 sup=
 port" Off=0AX=0AX.if !empty(USE_XORG)=0AXOPTIONS+=3D	DOUBLE_BUFFER "Enable =
 double buffering" On \=0AX		IMLIB2 "Enable Imlib2 support" Off \=0AX		LUA "=
 Enable Lua support" Off \=0AX		LUA_CAIRO "Enable Lua-Cairo binding (impl. L=
 ua)" Off \=0AX		LUA_IMLIB2 "Enable Lua-Imlib2 binding (impl. Lua/Imlib2)" O=
 ff \=0AX		XFT "Enable Xft support" Off=0AX.else=0AXOPTIONS+=3D	LUA "Enable =
 Lua support" Off=0AX.endif=0AX=0AX.include <bsd.port.pre.mk>=0AX=0AX.if emp=
 ty(USE_XORG)=0AXWITHOUT_DOUBLE_BUFFER=3D	On=0AXCONFIGURE_ARGS+=3D	--disable=
 -x11 --disable-own-window=0AX.undef WITH_IMLIB2=0AX.undef WITH_LUA_CAIRO=0A=
 X.undef WITH_LUA_IMLIB2=0AX.undef WITH_XFT=0AX.endif=0AX=0AX.if defined(WIT=
 H_APCUPSD)=0AXRUN_DEPENDS+=3D		${LOCALBASE}/sbin/apcupsd:${PORTSDIR}/sysuti=
 ls/apcupsd=0AXCONFIGURE_ARGS+=3D	--enable-apcupsd=0AX.else=0AXCONFIGURE_ARG=
 S+=3D	--disable-apcupsd=0AX.endif=0AX=0AX.if defined(WITH_AUDACIOUS)=0AXLIB=
 _DEPENDS+=3D		audclient.2:${PORTSDIR}/multimedia/audacious=0AXCONFIGURE_ARG=
 S+=3D	--enable-audacious=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-audacious=
 =0AX.endif=0AX=0AX.if defined(WITH_BMPX)=0AXBUILD_DEPENDS+=3D		beep-media-p=
 layer-2:${PORTSDIR}/multimedia/bmpx=0AXRUN_DEPENDS+=3D		beep-media-player-2=
 :${PORTSDIR}/multimedia/bmpx=0AXLIB_DEPENDS+=3D		dbus-1.3:${PORTSDIR}/devel=
 /dbus=0AXCONFIGURE_ARGS+=3D	--enable-bmpx=0AX.else=0AXCONFIGURE_ARGS+=3D	--=
 disable-bmpx=0AX.endif=0AX=0AX.if defined(WITH_LUA) || defined(WITH_LUA_CAI=
 RO) || defined(WITH_LUA_IMLIB2)=0AXUSE_LUA=3D		5.1+=0AXCONFIGURE_ARGS+=3D	-=
 -enable-lua=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-lua=0AX.endif=0AX=0AX.=
 if defined(WITH_LUA_CAIRO)=0AXLIB_DEPENDS+=3D		cairo.2:${PORTSDIR}/graphics=
 /cairo=0AXBUILD_DEPENDS+=3D		tolua++-5.1:${PORTSDIR}/lang/tolua++=0AXRUN_DE=
 PENDS+=3D		tolua++-5.1:${PORTSDIR}/lang/tolua++=0AXCONFIGURE_ARGS+=3D	--ena=
 ble-lua-cairo=0AX.endif=0AX=0AX.if defined(WITH_IMLIB2) || defined(WITH_LUA=
 _IMLIB2)=0AXLIB_DEPENDS+=3D		Imlib2.5:${PORTSDIR}/graphics/imlib2=0AXCONFIG=
 URE_ARGS+=3D	--enable-imlib2=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-imlib=
 2=0AX.endif=0AX=0AX.if defined(WITH_LUA_IMLIB2)=0AXBUILD_DEPENDS+=3D		tolua=
 ++-5.1:${PORTSDIR}/lang/tolua++=0AXRUN_DEPENDS+=3D		tolua++-5.1:${PORTSDIR}=
 /lang/tolua++=0AXCONFIGURE_ARGS+=3D	--enable-lua-imlib2=0AX.endif=0AX=0AX.i=
 f defined(WITH_NCURSES)=0AXCONFIGURE_ARGS+=3D	--enable-ncurses=0AX.else=0AX=
 CONFIGURE_ARGS+=3D	--disable-ncurses=0AX.endif=0AX=0AX.if defined(WITH_XFT)=
 =0AXLIB_DEPENDS+=3D		Xft.2:${PORTSDIR}/x11-fonts/libXft=0AXCONFIGURE_ARGS+=
 =3D	--enable-xft=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-xft=0AX.endif=0AX=
 =0AX.if defined(WITHOUT_MPD)=0AXCONFIGURE_ARGS+=3D	--disable-mpd=0AX.endif=
 =0AX=0AX.if defined(WITH_RSS)=0AXLIB_DEPENDS+=3D		curl.6:${PORTSDIR}/ftp/cu=
 rl \=0AX			xml2.5:${PORTSDIR}/textproc/libxml2=0AXCONFIGURE_ARGS+=3D	--enab=
 le-rss=0AXUSE_GNOME+=3D		glib20=0AX.endif=0AX=0AX.if defined(WITH_METAR)=0A=
 XLIB_DEPENDS+=3D		curl.6:${PORTSDIR}/ftp/curl=0AXCONFIGURE_ARGS+=3D	--enabl=
 e-weather-metar=0AX.endif=0AX=0AX.if defined(WITH_XOAP)=0AXLIB_DEPENDS+=3D	=
 	curl.6:${PORTSDIR}/ftp/curl \=0AX			xml2.5:${PORTSDIR}/textproc/libxml2=0A=
 XCONFIGURE_ARGS+=3D	--enable-weather-xoap=0AX.endif=0AX=0AX.if defined(WITH=
 _XMMS2)=0AXLIB_DEPENDS+=3D		xmmsclient.5:${PORTSDIR}/audio/xmms2=0AXCONFIGU=
 RE_ARGS+=3D	--enable-xmms2=0AX.else=0AXCONFIGURE_ARGS+=3D	--disable-xmms2=
 =0AX.endif=0AX=0AX.if defined(WITHOUT_DOUBLE_BUFFER)=0AXCONFIGURE_ARGS+=3D	=
 --disable-double-buffer=0AX.endif=0AX=0AXpost-patch:=0AX	@${REINPLACE_CMD} =
 -e 's,lua5\.1,lua-5.1,g' \=0AX		${WRKSRC}/configure=0AX	@${REINPLACE_CMD} -=
 e 's,imlib_context_disconnect_display();,,g' \=0AX		${WRKSRC}/src/imlib2.c=
 =0AX=0AXdo-install:=0AX	${INSTALL_PROGRAM} ${WRKSRC}/src/conky ${PREFIX}/bi=
 n=0AX	${INSTALL_MAN} ${WRKSRC}/doc/conky.1 ${PREFIX}/man/man1=0AX=0AXpost-i=
 nstall:=0AX.if !defined(NOPORTEXAMPLES)=0AX	@${MKDIR} ${EXAMPLESDIR}=0AX.	i=
 f !empty(USE_XORG)=0AX	@${INSTALL_DATA} ${WRKSRC}/data/conky.conf ${EXAMPLE=
 SDIR}/conkyrc.sample=0AX.	else=0AX	@${INSTALL_DATA} ${WRKSRC}/data/conky_no=
 _x11.conf ${EXAMPLESDIR}/conkyrc.sample=0AX.	endif=0AX.endif=0AX=0AX.if !de=
 fined(NOPORTDOCS)=0AX	@${MKDIR} ${DOCSDIR}=0AX.for i in README AUTHORS Chan=
 geLog TODO NEWS=0AX	${INSTALL_DATA} ${WRKSRC}/${i} ${DOCSDIR}=0AX.endfor=0A=
 X.for i in docs.html variables.html config_settings.html=0AX	${INSTALL_DATA=
 } ${WRKSRC}/doc/${i} ${DOCSDIR}=0AX.endfor=0AX.endif=0AX=0AX.include <bsd.p=
 ort.post.mk>=0Ac6f03d61758ca6e484be3d23647891ea=0Aecho c - conky/files=0Amk=
 dir -p conky/files > /dev/null 2>&1=0Aecho x - conky/files/patch-src-conky.=
 c=0Ased 's/^X//' >conky/files/patch-src-conky.c << 'c59c590f71d1b0c018c091a=
 f48aee345'=0AX--- src/conky.c.orig	2010-03-25 22:27:32.000000000 +0200=0AX+=
 ++ src/conky.c	2010-06-22 00:38:09.000000000 +0300=0AX@@ -166,9 +166,7 @@=
 =0AX #ifdef IOSTATS=0AX int top_io;=0AX #endif=0AX-#ifdef __linux__=0AX int=
  top_running;=0AX-#endif=0AX int output_methods;=0AX static int extra_newli=
 ne;=0AX enum x_initialiser_state x_initialised =3D NO;=0AX@@ -269,9 +267,6 =
 @@=0AX #ifdef IMLIB2=0AX 		   "  * Imlib2\n"=0AX #endif /* IMLIB2 */=0AX-#i=
 fdef MIXER_IS_ALSA=0AX-		   "  * ALSA mixer support\n"=0AX-#endif /* MIXER_=
 IS_ALSA */=0AX #ifdef APCUPSD=0AX 		   "  * apcupsd\n"=0AX #endif /* APCUPS=
 D */=0AX@@ -463,7 +458,7 @@=0AX 		}=0AX 		fclose(where);=0AX 	} else {=0AX-=
 		NORM_ERR("Could not open the file");=0AX+		NORM_ERR("Could not open the f=
 ile '%s'", f);=0AX 	}=0AX 	return ret;=0AX }=0AX@@ -512,6 +507,7 @@=0AX 	ch=
 ar *ps, *pe;=0AX 	int special_index =3D 0; /* specials index */=0AX =0AX+	i=
 f(! b) return;=0AX 	for (ps =3D b, pe =3D b; *pe; pe++) {=0AX 		if (*pe =3D=
 =3D '\n') {=0AX 			*pe =3D '\0';=0AX@@ -765,6 +761,8 @@=0AX 	buff_in[0] =3D=
  0;=0AX #endif /* HAVE_ICONV */=0AX =0AX+	if(! p) return;=0AX+=0AX 	p[0] =
 =3D 0;=0AX 	obj =3D root.next;=0AX 	while (obj && p_max_size > 0) {=0AX@@ -=
 1330,7 +1328,7 @@=0AX 					DO_JUMP;=0AX 				} else if (spc) {=0AX 					*spc=
  =3D '\0';=0AX-					if (check_contains(obj->data.s, spc + 1))=0AX+					if (=
 !check_contains(obj->data.s, spc + 1))=0AX 						DO_JUMP;=0AX 					*spc =3D=
  ' ';=0AX 				}=0AX@@ -2062,9 +2060,11 @@=0AX 			OBJ(xmms2_percent) {=0AX 	=
 			snprintf(p, p_max_size, "%2.0f", cur->xmms2.progress * 100);=0AX 			}=0A=
 X+#ifdef X11=0AX 			OBJ(xmms2_bar) {=0AX 				new_bar(obj, p, p_max_size, (i=
 nt) (cur->xmms2.progress * 255.0f));=0AX 			}=0AX+#endif /* X11 */=0AX 			O=
 BJ(xmms2_playlist) {=0AX 				snprintf(p, p_max_size, "%s", cur->xmms2.playl=
 ist);=0AX 			}=0AX@@ -2140,6 +2140,7 @@=0AX 				snprintf(p, p_max_size, "%s=
 ",=0AX 					cur->audacious.items[AUDACIOUS_MAIN_VOLUME]);=0AX 			}=0AX+#ifd=
 ef X11=0AX 			OBJ(audacious_bar) {=0AX 				double progress;=0AX =0AX@@ -214=
 8,6 +2149,7 @@=0AX 					atof(cur->audacious.items[AUDACIOUS_LENGTH_SECONDS]=
 );=0AX 				new_bar(obj, p, p_max_size, (int) (progress * 255.0f));=0AX 			}=
 =0AX+#endif /* X11 */=0AX #endif /* AUDACIOUS */=0AX =0AX #ifdef BMPX=0AX@@=
  -2173,7 +2175,6 @@=0AX 			/* we have four different types of top (top, top=
 _mem,=0AX 			 * top_time and top_io). To avoid having almost-same code four=
 =0AX 			 * times, we have this special handler. */=0AX-#ifdef __linux__=0AX=
  			break;=0AX 			case OBJ_top:=0AX 			case OBJ_top_mem:=0AX@@ -2182,7 +218=
 3,6 @@=0AX 			case OBJ_top_io:=0AX #endif=0AX 				print_top(obj, p, p_max_s=
 ize);=0AX-#endif /* __linux__ */=0AX 			OBJ(tail) {=0AX 				print_tailhead(=
 "tail", obj, p, p_max_size);=0AX 			}=0AX@@ -2375,13 +2375,7 @@=0AX #ifdef =
 HAVE_ICONV=0AX 			iconv_convert(&a, buff_in, p, p_max_size);=0AX #endif /* =
 HAVE_ICONV */=0AX-			if (obj->type !=3D OBJ_text && obj->type !=3D OBJ_exec=
 p && obj->type !=3D OBJ_execpi=0AX-#ifdef HAVE_LUA=0AX-					&& obj->type !=
 =3D OBJ_lua && obj->type !=3D OBJ_lua_parse=0AX-#endif /* HAVE_LUA */=0AX-	=
 				) {=0AX-				substitute_newlines(p, a - 2);=0AX-			}=0AX+			substitute_n=
 ewlines(p, a - 2);=0AX 			p +=3D a;=0AX 			p_max_size -=3D a;=0AX 			(*p) =
 =3D 0;=0AX@@ -3119,36 +3113,49 @@=0AX 						if (seconds !=3D 0) {=0AX 					=
 		timeunits =3D seconds / 86400; seconds %=3D 86400;=0AX 							if (timeuni=
 ts > 0) {=0AX-								asprintf(&tmp_day_str, "%dd", timeunits);=0AX+							=
 	if (asprintf(&tmp_day_str, "%dd", timeunits) < 0) {=0AX+									tmp_day_s=
 tr =3D 0;=0AX+								}=0AX 							} else {=0AX 								tmp_day_str =3D str=
 dup("");=0AX 							}=0AX 							timeunits =3D seconds / 3600; seconds %=3D=
  3600;=0AX 							if (timeunits > 0) {=0AX-								asprintf(&tmp_hour_str, =
 "%dh", timeunits);=0AX+								if (asprintf(&tmp_hour_str, "%dh", timeunits=
 ) < 0) {=0AX+									tmp_day_str =3D 0;=0AX+								}=0AX 							} else {=
 =0AX 								tmp_hour_str =3D strdup("");=0AX 							}=0AX 							timeunits=
  =3D seconds / 60; seconds %=3D 60;=0AX 							if (timeunits > 0) {=0AX-			=
 					asprintf(&tmp_min_str, "%dm", timeunits);=0AX+								if (asprintf(&tm=
 p_min_str, "%dm", timeunits) < 0) {=0AX+									tmp_min_str =3D 0;=0AX+			=
 					}=0AX 							} else {=0AX 								tmp_min_str =3D strdup("");=0AX 				=
 			}=0AX 							if (seconds > 0) {=0AX-								asprintf(&tmp_sec_str, "%ds"=
 , seconds);=0AX+								if (asprintf(&tmp_sec_str, "%ds", seconds) < 0) {=
 =0AX+									tmp_sec_str =3D 0;=0AX+								}=0AX 							} else {=0AX 				=
 				tmp_sec_str =3D strdup("");=0AX 							}=0AX-							asprintf(&tmp_str, =
 "%s%s%s%s", tmp_day_str, tmp_hour_str, tmp_min_str, tmp_sec_str);=0AX-					=
 		free(tmp_day_str); free(tmp_hour_str); free(tmp_min_str); free(tmp_sec_st=
 r);=0AX+							if (asprintf(&tmp_str, "%s%s%s%s", tmp_day_str,=0AX+								=
 		tmp_hour_str, tmp_min_str, tmp_sec_str) < 0) {=0AX+								tmp_str =3D 0;=
 =0AX+							}=0AX+#define FREE(a) if ((a)) free((a));=0AX+							FREE(tmp_d=
 ay_str); FREE(tmp_hour_str); FREE(tmp_min_str); FREE(tmp_sec_str);=0AX 				=
 		} else {=0AX-							asprintf(&tmp_str, "Range not possible"); // should n=
 ever happen, but better safe then sorry=0AX+							tmp_str =3D strdup("Rang=
 e not possible"); /* should never happen, but better safe then sorry */=0AX=
  						}=0AX 						cur_x +=3D (w / 2) - (font_ascent() * (strlen(tmp_str) /=
  2));=0AX 						cur_y +=3D font_h / 2;=0AX 						draw_string(tmp_str);=0AX-=
 						free(tmp_str);=0AX+						FREE(tmp_str);=0AX+#undef FREE=0AX 						cur=
 _x =3D tmp_x;=0AX 						cur_y =3D tmp_y;=0AX 					}=0AX@@ -3974,11 +3981,39=
  @@=0AX 	initialisation(argc_copy, argv_copy);=0AX }=0AX =0AX-void clean_up=
 (void *memtofree1, void* memtofree2)=0AX-{=0AX-	int i;=0AX+#ifdef X11=0AX+v=
 oid clean_up_x11() {=0AX+	if(window_created =3D=3D 1) {=0AX+		XClearArea(di=
 splay, window.window, text_start_x - window.border_inner_margin - window.bo=
 rder_outer_margin - window.border_width,=0AX+			text_start_y - window.borde=
 r_inner_margin - window.border_outer_margin - window.border_width,=0AX+			t=
 ext_width + window.border_inner_margin * 2 + window.border_outer_margin * 2=
  + window.border_width * 2,=0AX+			text_height + window.border_inner_margin=
  * 2 + window.border_outer_margin * 2 + window.border_width * 2, 0);=0AX+	}=
 =0AX+	destroy_window();=0AX+	free_fonts();=0AX+	fonts =3D NULL;=0AX+	if(x11=
 _stuff.region) {=0AX+		XDestroyRegion(x11_stuff.region);=0AX+		x11_stuff.re=
 gion =3D NULL;=0AX+	}=0AX+	if(display) {=0AX+		XCloseDisplay(display);=0AX+=
 		display =3D NULL;=0AX+	}=0AX+	if(info.x11.desktop.all_names) {=0AX+		free=
 (info.x11.desktop.all_names);=0AX+		info.x11.desktop.all_names =3D NULL;=0A=
 X+	}=0AX+	if (info.x11.desktop.name) {=0AX+		free(info.x11.desktop.name);=
 =0AX+		info.x11.desktop.name =3D NULL;=0AX+	}=0AX+	x_initialised =3D NO;=0A=
 X+}=0AX+#endif=0AX =0AX-	free_update_callbacks();=0AX+void clean_up_without=
 _threads(void *memtofree1, void* memtofree2) {=0AX+	int i;=0AX =0AX #ifdef =
 NCURSES=0AX 	if(output_methods & TO_NCURSES) {=0AX@@ -4001,29 +4036,7 @@=0A=
 X 	}=0AX #ifdef X11=0AX 	if (x_initialised =3D=3D YES) {=0AX-		if(window_cr=
 eated =3D=3D 1) {=0AX-			XClearArea(display, window.window, text_start_x - =
 window.border_inner_margin - window.border_outer_margin - window.border_wid=
 th,=0AX-				text_start_y - window.border_inner_margin - window.border_outer=
 _margin - window.border_width,=0AX-				text_width + window.border_inner_mar=
 gin * 2 + window.border_outer_margin * 2 + window.border_width * 2,=0AX-			=
 	text_height + window.border_inner_margin * 2 + window.border_outer_margin =
 * 2 + window.border_width * 2, 0);=0AX-		}=0AX-		destroy_window();=0AX-		fr=
 ee_fonts();=0AX-		if(x11_stuff.region) {=0AX-			XDestroyRegion(x11_stuff.re=
 gion);=0AX-			x11_stuff.region =3D NULL;=0AX-		}=0AX-		XCloseDisplay(displa=
 y);=0AX-		display =3D NULL;=0AX-		if(info.x11.desktop.all_names) {=0AX-			f=
 ree(info.x11.desktop.all_names);=0AX-			info.x11.desktop.all_names =3D NULL=
 ;=0AX-		}=0AX-		if (info.x11.desktop.name) {=0AX-			free(info.x11.desktop.n=
 ame);=0AX-			info.x11.desktop.name =3D NULL;=0AX-		}=0AX-		x_initialised =
 =3D NO;=0AX+		clean_up_x11();=0AX 	}else{=0AX 		free(fonts);	//in set_defau=
 lt_configurations a font is set but not loaded=0AX 		font_count =3D -1;=0AX=
 @@ -4097,6 +4110,12 @@=0AX 	}=0AX }=0AX =0AX+void clean_up(void *memtofree1=
 , void* memtofree2)=0AX+{=0AX+	free_update_callbacks();=0AX+	clean_up_witho=
 ut_threads(memtofree1, memtofree2);=0AX+}=0AX+=0AX static int string_to_boo=
 l(const char *s)=0AX {=0AX 	if (!s) {=0AX@@ -4200,9 +4219,7 @@=0AX #ifdef I=
 OSTATS=0AX 	top_io =3D 0;=0AX #endif=0AX-#ifdef __linux__=0AX 	top_running =
 =3D 0;=0AX-#endif=0AX #ifdef MPD=0AX 	mpd_env_host =3D getenv("MPD_HOST");=
 =0AX 	mpd_env_port =3D getenv("MPD_PORT");=0AX@@ -4252,6 +4269,9 @@=0AX 	ou=
 tput_methods =3D TO_STDOUT;=0AX #endif=0AX #ifdef X11=0AX+#ifdef BUILD_XFT=
 =0AX+	use_xft =3D 0;=0AX+#endif=0AX 	show_graph_scale =3D 0;=0AX 	show_grap=
 h_range =3D 0;=0AX 	draw_shades =3D 1;=0AX@@ -4518,13 +4538,13 @@=0AX 		int=
  a =3D string_to_alignment(value);=0AX =0AX 		if (a <=3D 0) {=0AX-			if(set=
 byconffile =3D=3D true) {=0AX+			if(setbyconffile =3D=3D 1) {=0AX 				CONF_=
 ERR;=0AX 			} else NORM_ERR("'%s' is not a alignment setting", value);=0AX =
 		} else {=0AX 			*ltext_alignment =3D a;=0AX 		}=0AX-	} else if(setbyconff=
 ile =3D=3D true) {=0AX+	} else if(setbyconffile =3D=3D 1) {=0AX 		CONF_ERR;=
 =0AX 	}=0AX }=0AX@@ -4552,15 +4572,12 @@=0AX =0AX #ifdef X11=0AX 		CONF2("o=
 ut_to_x") {=0AX-			/* don't listen if X is already initialised or=0AX-			 *=
  if we already know we don't want it */=0AX-			if(x_initialised !=3D YES) {=
 =0AX-				if (string_to_bool(value)) {=0AX-					output_methods &=3D TO_X;=0A=
 X-				} else {=0AX-					output_methods &=3D ~TO_X;=0AX-					x_initialised =
 =3D NEVER;=0AX-				}=0AX+			if (string_to_bool(value)) {=0AX+				output_met=
 hods &=3D TO_X;=0AX+			} else {=0AX+				clean_up_x11();=0AX+				output_meth=
 ods &=3D ~TO_X;=0AX+				x_initialised =3D NEVER;=0AX 			}=0AX 		}=0AX 		CON=
 F("display") {=0AX@@ -4573,7 +4590,7 @@=0AX 			}=0AX 		}=0AX 		CONF("alignm=
 ent") {=0AX-			setalignment(&text_alignment, window.type, value, f, line, t=
 rue);=0AX+			setalignment(&text_alignment, window.type, value, f, line, 1);=
 =0AX 		}=0AX 		CONF("background") {=0AX 			fork_to_background =3D string_to=
 _bool(value);=0AX@@ -4609,7 +4626,7 @@=0AX 		CONF("border_width") {=0AX 			=
 if (value) {=0AX 				window.border_width =3D strtol(value, 0, 0);=0AX-				i=
 f (window.border_width < 0) window.border_width =3D 0;=0AX+				if (window.b=
 order_width < 1) window.border_width =3D 1;=0AX 			} else {=0AX 				CONF_ER=
 R;=0AX 			}=0AX@@ -5670,7 +5687,7 @@=0AX #endif=0AX =0AX #if defined(__Free=
 BSD__) || defined(__FreeBSD_kernel__)=0AX-	if ((kd =3D kvm_open("/dev/null"=
 , "/dev/null", "/dev/null", O_RDONLY,=0AX+	if ((kd =3D kvm_open(NULL, "/dev=
 /null", "/dev/null", O_RDONLY,=0AX 			"kvm_open")) =3D=3D NULL) {=0AX 		CRI=
 T_ERR(NULL, NULL, "cannot read kvm");=0AX 	}=0AX@@ -5696,7 +5713,7 @@=0AX 	=
 			set_first_font(optarg);=0AX 				break;=0AX 			case 'a':=0AX-				setalign=
 ment(&text_alignment, window.type, optarg, NULL, 0, false);=0AX+				setalig=
 nment(&text_alignment, window.type, optarg, NULL, 0, 0);=0AX 				break;=0AX=
  =0AX #ifdef OWN_WINDOW=0AX@@ -5895,7 +5912,9 @@=0AX 				current_config =3D=
  strndup(optarg, max_user_text);=0AX 				break;=0AX 			case 'q':=0AX-				fr=
 eopen("/dev/null", "w", stderr);=0AX+				if (!freopen("/dev/null", "w", std=
 err)) {=0AX+					NORM_ERR("unable to redirect stderr to /dev/null");=0AX+		=
 		}=0AX 				break;=0AX 			case 'h':=0AX 				print_help(argv[0]);=0AX@@ -592=
 9,7 +5948,13 @@=0AX #endif /* XOAP */=0AX =0AX #ifdef HAVE_SYS_INOTIFY_H=0A=
 X-	inotify_fd =3D inotify_init1(IN_NONBLOCK);=0AX+	inotify_fd =3D inotify_i=
 nit();=0AX+	if(inotify_fd !=3D -1) {=0AX+		int fl;=0AX+=0AX+		fl =3D fcntl(=
 inotify_fd, F_GETFL);=0AX+		fcntl(inotify_fd, F_SETFL, fl | O_NONBLOCK);=0A=
 X+	}=0AX #endif /* HAVE_SYS_INOTIFY_H */=0AX =0AX 	initialisation(argc, arg=
 v);=0Ac59c590f71d1b0c018c091af48aee345=0Aecho x - conky/files/patch-src-mix=
 er.c=0Ased 's/^X//' >conky/files/patch-src-mixer.c << '34de5c2a761905d37e86=
 baba46208622'=0AX--- src/mixer.c.orig=0AX+++ src/mixer.c=0AX@@ -281,6 +281,=
 7 @@ int mixer_is_mute(int i)=0AX =0AX #define mixer_to_255(i, x) x=0AX #en=
 dif /* MIXER_IS_ALSA */=0AX+#define mixer_to_255(i, x) x * 2.55=0AX =0AX vo=
 id parse_mixer_arg(struct text_object *obj, const char *arg)=0AX {=0A34de5c=
 2a761905d37e86baba46208622=0Aecho x - conky/files/patch-configure=0Ased 's/=
 ^X//' >conky/files/patch-configure << '498e2a3501cfe7ff2362b87148767ae4'=0A=
 X--- configure.orig=0AX+++ configure=0AX@@ -11233,12 +11233,12 @@=0AX      =
    pkg_cv_Audacious_CFLAGS=3D"$Audacious_CFLAGS"=0AX     else=0AX         i=
 f test -n "$PKG_CONFIG" && \=0AX-    { { $as_echo "$as_me:${as_lineno-$LINE=
 NO}: \$PKG_CONFIG --exists --print-errors \"audacious >=3D 1.4.0 dbus-glib-=
 1 glib-2.0 gobject-2.0\""; } >&5=0AX-  ($PKG_CONFIG --exists --print-errors=
  "audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0") 2>&5=0AX+    { { =
 $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors=
  \"audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0\""; } >&=
 5=0AX+  ($PKG_CONFIG --exists --print-errors "audacious >=3D 1.4.0 audclien=
 t dbus-glib-1 glib-2.0 gobject-2.0") 2>&5=0AX   ac_status=3D$?=0AX   $as_ec=
 ho "$as_me:${as_lineno-$LINENO}: \$? =3D $ac_status" >&5=0AX   test $ac_sta=
 tus =3D 0; }; then=0AX-  pkg_cv_Audacious_CFLAGS=3D`$PKG_CONFIG --cflags "a=
 udacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`=0AX+  pk=
 g_cv_Audacious_CFLAGS=3D`$PKG_CONFIG --cflags "audacious >=3D 1.4.0 audclie=
 nt dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`=0AX else=0AX   pkg_failed=
 =3Dyes=0AX fi=0AX@@ -11251,12 +11251,12 @@=0AX         pkg_cv_Audacious_LIB=
 S=3D"$Audacious_LIBS"=0AX     else=0AX         if test -n "$PKG_CONFIG" && =
 \=0AX-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists =
 --print-errors \"audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0\""; =
 } >&5=0AX-  ($PKG_CONFIG --exists --print-errors "audacious >=3D 1.4.0 dbus=
 -glib-1 glib-2.0 gobject-2.0") 2>&5=0AX+    { { $as_echo "$as_me:${as_linen=
 o-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >=3D 1.4.0 aud=
 client dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5=0AX+  ($PKG_CONFIG --exis=
 ts --print-errors "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobj=
 ect-2.0") 2>&5=0AX   ac_status=3D$?=0AX   $as_echo "$as_me:${as_lineno-$LIN=
 ENO}: \$? =3D $ac_status" >&5=0AX   test $ac_status =3D 0; }; then=0AX-  pk=
 g_cv_Audacious_LIBS=3D`$PKG_CONFIG --libs "audacious >=3D 1.4.0 dbus-glib-1=
  glib-2.0 gobject-2.0" 2>/dev/null`=0AX+  pkg_cv_Audacious_LIBS=3D`$PKG_CON=
 FIG --libs "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0=
 " 2>/dev/null`=0AX else=0AX   pkg_failed=3Dyes=0AX fi=0AX@@ -11275,14 +1127=
 5,14 @@=0AX         _pkg_short_errors_supported=3Dno=0AX fi=0AX         if =
 test $_pkg_short_errors_supported =3D yes; then=0AX-	        Audacious_PKG_=
 ERRORS=3D`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "aud=
 acious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`=0AX+	        Audacious=
 _PKG_ERRORS=3D`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors=
  "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`=0AX    =
      else=0AX-	        Audacious_PKG_ERRORS=3D`$PKG_CONFIG --errors-to-stdo=
 ut --print-errors "audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`=
 =0AX+	        Audacious_PKG_ERRORS=3D`$PKG_CONFIG --errors-to-stdout --prin=
 t-errors "audacious >=3D 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`=
 =0AX         fi=0AX 	# Put the nasty error message in config.log where it b=
 elongs=0AX 	echo "$Audacious_PKG_ERRORS" >&5=0AX =0AX-	as_fn_error "Package=
  requirements (audacious >=3D 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0) were =
 not met:=0AX+	as_fn_error "Package requirements (audacious >=3D 1.4.0 audcl=
 ient dbus-glib-1 glib-2.0 gobject-2.0) were not met:=0AX =0AX $Audacious_PK=
 G_ERRORS=0AX =0AX@@ -11645,7 +11645,7 @@=0AX =0AX =0AX if test x$want_apcup=
 sd =3D xyes; then=0AX-  if test x"$uname" !=3D xLinux; then=0AX+  if test x=
 "$uname" !=3D xLinux -a x"$uname" !=3D xFreeBSD; then=0AX       { $as_echo =
 "$as_me:${as_lineno-$LINENO}: apcupsd not supported on $uname... disabling"=
  >&5=0AX $as_echo "$as_me: apcupsd not supported on $uname... disabling" >&=
 6;}=0AX       want_apcupsd=3D"not supported on $uname"=0AX@@ -11675,7 +1167=
 5,7 @@=0AX =0AX =0AX if test x$want_iostats =3D xyes; then=0AX-  if test x"=
 $uname" !=3D xLinux; then=0AX+  if test x"$uname" !=3D xLinux -a x"$uname" =
 !=3D xFreeBSD; then=0AX       { $as_echo "$as_me:${as_lineno-$LINENO}: iost=
 ats not supported on $uname... disabling" >&5=0AX $as_echo "$as_me: iostats=
  not supported on $uname... disabling" >&6;}=0AX       want_iostats=3D"not =
 supported on $uname"=0AX@@ -15950,11 +15950,6 @@=0AX fi=0AX =0AX fi=0AX-if =
 test x$want_alsa =3D xyes; then=0AX-=0AX-$as_echo "#define MIXER_IS_ALSA 1"=
  >>confdefs.h=0AX-=0AX-fi=0AX =0AX for ac_header in signal.h unistd.h sys/u=
 tsname.h sys/stat.h linux/soundcard.h alsa/asoundlib.h dirent.h mcheck.h \=
 =0AX       sys/statfs.h sys/param.h pthread.h semaphore.h assert.h errno.h =
 time.h=0AX@@ -18905,6 +18900,7 @@=0AX   ALSA mixer:       $want_alsa=0AX   =
 apcupsd:          $want_apcupsd=0AX   I/O stats:        $want_iostats=0AX+ =
  ncurses:          $want_ncurses=0AX =0AX  * Lua ($want_lua) bindings:=0AX =
   Cairo:            $want_lua_cairo=0A498e2a3501cfe7ff2362b87148767ae4=0Aec=
 ho x - conky/files/patch-src-common.c=0Ased 's/^X//' >conky/files/patch-src=
 -common.c << '24cdd30e7953ea41310801eca05f1374'=0AX--- src/common.c.orig=0A=
 X+++ src/common.c=0AX@@ -411,8 +417,14 @@ void update_stuff(void)=0AX 	}=0A=
 X 	/* need to synchronise here, otherwise locking is needed (as data=0AX 	 =
 * would be printed with some update callbacks still running) */=0AX-	for (u=
 c =3D update_cb_head.next; uc; uc =3D uc->next)=0AX+	for (uc =3D update_cb_=
 head.next; uc; uc =3D uc->next) {=0AX 		sem_wait(&uc->end_wait);=0AX+		if(u=
 c =3D=3D uc->next) {=0AX+			pthread_join(uc->thread, NULL);=0AX+			free(uc)=
 ;=0AX+			exit(EXIT_FAILURE);=0AX+		}=0AX+	}=0AX =0AX 	/* XXX: move the foll=
 owing into the update_meminfo() functions? */=0AX 	if (no_buffers) {=0A24cd=
 d30e7953ea41310801eca05f1374=0Aecho x - conky/files/patch-src-i8k.c=0Ased '=
 s/^X//' >conky/files/patch-src-i8k.c << '03f7f438b524e17aa11f6534db01c938'=
 =0AX--- src/i8k.c.orig=0AX+++ src/i8k.c=0AX@@ -61,8 +61,12 @@ void update_i=
 8k(void)=0AX 		i8k_procbuf =3D (char *) malloc(128 * sizeof(char));=0AX 	}=
 =0AX 	if ((fp =3D fopen(PROC_I8K, "r")) =3D=3D NULL) {=0AX-		CRIT_ERR(NULL,=
  NULL, "/proc/i8k doesn't exist! use insmod to make sure the kernel "=0AX+	=
 	free(i8k_procbuf);=0AX+		i8k_procbuf =3D NULL;=0AX+		NORM_ERR("/proc/i8k d=
 oesn't exist! use insmod to make sure the kernel "=0AX 			"driver is loaded=
 =2E..");=0AX+		clean_up_without_threads(NULL, NULL);=0AX+		free(current_mai=
 l_spool);=0AX 	}=0AX =0AX 	memset(&i8k_procbuf[0], 0, 128);=0A03f7f438b524e=
 17aa11f6534db01c938=0Aecho x - conky/files/patch-src-diskio.c=0Ased 's/^X//=
 ' >conky/files/patch-src-diskio.c << '4cdfd9587647cda26c3e5aa9031719fa'=0AX=
 --- src/diskio.c.orig=0AX+++ src/diskio.c=0AX@@ -76,12 +76,6 @@ struct disk=
 io_stat *prepare_diskio_stat(const char *s)=0AX 	if (!s)=0AX 		return &stat=
 s;=0AX =0AX-#if defined(__FreeBSD__)=0AX-	if (strncmp(s, "/dev/", 5) =3D=3D=
  0) {=0AX-		// supplied a /dev/device arg, so cut off the /dev part=0AX-		s=
 trncpy(device_name, s + 5, text_buffer_size);=0AX-	} else=0AX-#endif=0AX 	s=
 trncpy(device_name, s, text_buffer_size);=0AX =0AX 	snprintf(stat_name, tex=
 t_buffer_size, "/dev/%s", device_name);=0A4cdfd9587647cda26c3e5aa9031719fa=
 =0Aecho x - conky/files/patch-src-conky.h=0Ased 's/^X//' >conky/files/patch=
 -src-conky.h << 'af61214ebb1a9bd0a4b9cfc894797f31'=0AX--- src/conky.h.orig=
 =0AX+++ src/conky.h=0AX@@ -296,9 +296,7 @@ extern int top_cpu, top_mem, top=
 _time;=0AX #ifdef IOSTATS=0AX extern int top_io;=0AX #endif=0AX-#ifdef __li=
 nux__=0AX extern int top_running;=0AX-#endif=0AX =0AX /* defined in conky.c=
 , needed by top.c */=0AX extern int cpu_separate;=0Aaf61214ebb1a9bd0a4b9cfc=
 894797f31=0Aecho x - conky/files/patch-src-mail.c=0Ased 's/^X//' >conky/fil=
 es/patch-src-mail.c << '08f1d225e95a511dc39755093b1c6f93'=0AX--- src/mail.c=
 =2Eorig=0AX+++ src/mail.c=0AX@@ -61,6 +61,8 @@=0AX #define POP3_TYPE 1=0AX =
 #define IMAP_TYPE 2=0AX =0AX+#define MAXFOLDERSIZE 128=0AX+=0AX struct mail=
 _s {			// for imap and pop3=0AX 	unsigned long unseen;=0AX 	unsigned long m=
 essages;=0AX@@ -74,7 +76,7 @@ struct mail_s {			// for imap and pop3=0AX 	c=
 har user[128];=0AX 	char pass[128];=0AX 	char command[1024];=0AX-	char fold=
 er[128];=0AX+	char folder[MAXFOLDERSIZE];=0AX 	timed_thread *p_timed_thread=
 ;=0AX 	char secure;=0AX };=0AX@@ -465,17 +467,20 @@ struct mail_s *parse_ma=
 il_args(char type, const char *arg)=0AX 	if (type =3D=3D IMAP_TYPE) {=0AX 	=
 	tmp =3D strstr(arg, "-f ");=0AX 		if (tmp) {=0AX-			int len =3D 1024;=0AX+=
 			int len =3D MAXFOLDERSIZE-1;=0AX 			tmp +=3D 3;=0AX 			if (tmp[0] =3D=3D=
  '\'') {=0AX 				len =3D strstr(tmp + 1, "'") - tmp - 1;=0AX-				if (len > =
 1024) {=0AX-					len =3D 1024;=0AX+				if (len > MAXFOLDERSIZE-1) {=0AX+			=
 		len =3D MAXFOLDERSIZE-1;=0AX 				}=0AX+				tmp++;=0AX 			}=0AX-			strncpy=
 (mail->folder, tmp + 1, len);=0AX+			strncpy(mail->folder, tmp, len);=0AX+	=
 		mail->folder[len-1] =3D 0;=0AX 		} else {=0AX-			strncpy(mail->folder, "I=
 NBOX", 128);	// default imap inbox=0AX+			strncpy(mail->folder, "INBOX", MA=
 XFOLDERSIZE-1);	// default imap inbox=0AX+			mail->folder[MAXFOLDERSIZE-1] =
 =3D 0;=0AX 		}=0AX 	}=0AX 	tmp =3D strstr(arg, "-e ");=0A08f1d225e95a511dc3=
 9755093b1c6f93=0Aecho x - conky/files/patch-src-bmpx.c=0Ased 's/^X//' >conk=
 y/files/patch-src-bmpx.c << '7009353d4142186daa1a0cda0c310e52'=0AX--- src/b=
 mpx.c.orig=0AX+++ src/bmpx.c=0AX@@ -42,7 +42,7 @@=0AX static int connected =
 =3D 0;=0AX static char *unknown =3D "unknown";=0AX =0AX-void fail(GError *e=
 rror);=0AX+void fail(GError *error, struct information *);=0AX =0AX void up=
 date_bmpx()=0AX {=0AX@@ -58,15 +58,15 @@=0AX 		bus =3D dbus_g_bus_get(DBUS_=
 BUS_SESSION, &error);=0AX 		if (bus =3D=3D NULL) {=0AX 			NORM_ERR("BMPx er=
 ror 1: %s\n", error->message);=0AX-			fail(error);=0AX+			fail(error, curre=
 nt_info);=0AX 			return;=0AX 		}=0AX =0AX 		remote_object =3D dbus_g_proxy_=
 new_for_name(bus, BMP_DBUS_SERVICE,=0AX-				BMP_DBUS_PATH, BMP_DBUS_INTERFA=
 CE);=0AX+				BMP_DBUS_PATH__BMP, BMP_DBUS_INTERFACE__BMP);=0AX 		if (!remot=
 e_object) {=0AX 			NORM_ERR("BMPx error 2: %s\n", error->message);=0AX-			f=
 ail(error);=0AX+			fail(error, current_info);=0AX 			return;=0AX 		}=0AX =
 =0AX@@ -78,7 +78,7 @@=0AX 					G_TYPE_INVALID, G_TYPE_INT, &current_track, =
 G_TYPE_INVALID)) {=0AX 		} else {=0AX 			NORM_ERR("BMPx error 3: %s\n", err=
 or->message);=0AX-			fail(error);=0AX+			fail(error, current_info);=0AX 			=
 return;=0AX 		}=0AX =0AX@@ -112,17 +112,17 @@=0AX 				g_value_get_string(g_=
 hash_table_lookup(metadata, "location"));=0AX 		} else {=0AX 			NORM_ERR("B=
 MPx error 4: %s\n", error->message);=0AX-			fail(error);=0AX+			fail(error,=
  current_info);=0AX 			return;=0AX 		}=0AX =0AX 		g_hash_table_destroy(meta=
 data);=0AX 	} else {=0AX-		fail(error);=0AX+		fail(error, current_info);=0A=
 X 	}=0AX }=0AX =0AX-void fail(GError *error)=0AX+void fail(GError *error, s=
 truct information *current_info)=0AX {=0AX 	if (error) {=0AX 		g_error_free=
 (error);=0A7009353d4142186daa1a0cda0c310e52=0Aecho x - conky/files/patch-sr=
 c-top.c=0Ased 's/^X//' >conky/files/patch-src-top.c << '5a1c07c8f27bb5fa50c=
 9d078a689ba56'=0AX--- src/top.c.orig=0AX+++ src/top.c=0AX@@ -880,16 +880,22=
  @@ int parse_top_args(const char *s, const char *arg, struct text_object *=
 obj)=0AX #else /* IOSTATS */=0AX 			NORM_ERR("must be one of: name, cpu, pi=
 d, mem, time, mem_res, mem_vsize");=0AX #endif /* IOSTATS */=0AX+			free(td=
 ->s);=0AX+			free(obj->data.opaque);=0AX 			return 0;=0AX 		}=0AX 		if (n <=
  1 || n > 10) {=0AX 			NORM_ERR("invalid num arg for top. Must be between 1=
  and 10.");=0AX+			free(td->s);=0AX+			free(obj->data.opaque);=0AX 			retur=
 n 0;=0AX 		} else {=0AX 			td->num =3D n - 1;=0AX 		}=0AX 	} else {=0AX 		N=
 ORM_ERR("invalid argument count for top");=0AX+		free(td->s);=0AX+		free(ob=
 j->data.opaque);=0AX 		return 0;=0AX 	}=0AX 	return 1;=0A5a1c07c8f27bb5fa50=
 c9d078a689ba56=0Aecho x - conky/files/patch-src-logging.h=0Ased 's/^X//' >c=
 onky/files/patch-src-logging.h << 'd71a60d6818a8d7f78b196674f4e0c11'=0AX---=
  src/logging.h.orig=0AX+++ src/logging.h=0AX@@ -30,6 +30,7 @@=0AX #include =
 "mail.h"=0AX =0AX void clean_up(void *memtofree1, void* memtofree2);=0AX+vo=
 id clean_up_without_threads(void *memtofree1, void* memtofree2);=0AX =0AX #=
 ifndef _LOGGING_H=0AX #define _LOGGING_H=0AX@@ -44,6 +45,9 @@ void clean_up=
 (void *memtofree1, void* memtofree2);=0AX #define CRIT_ERR(memtofree1, memt=
 ofree2, ...) \=0AX 	{ NORM_ERR(__VA_ARGS__); clean_up(memtofree1, memtofree=
 2); free(current_mail_spool); exit(EXIT_FAILURE); }=0AX =0AX+#define THREAD=
 _CRIT_ERR(memtofree1, memtofree2, ...) \=0AX+	{ NORM_ERR(__VA_ARGS__); clea=
 n_up_without_threads(memtofree1, memtofree2); free(current_mail_spool); ret=
 urn; }=0AX+=0AX /* debugging output */=0AX extern int global_debug_level;=
 =0AX #define __DBGP(level, ...) \=0Ad71a60d6818a8d7f78b196674f4e0c11=0Aecho=
  x - conky/files/patch-src-bmpx.h=0Ased 's/^X//' >conky/files/patch-src-bmp=
 x.h << '7aa331d858358f3f577dc4fd46751684'=0AX--- src/bmpx.h.orig=0AX+++ src=
 /bmpx.h=0AX@@ -0,0 +1,39 @@=0AX+/* -*- mode: c; c-basic-offset: 4; tab-widt=
 h: 4; indent-tabs-mode: t -*-=0AX+ * vim: ts=3D4 sw=3D4 noet ai cindent syn=
 tax=3Dc=0AX+ *=0AX+ * Conky, a system monitor, based on torsmo=0AX+ *=0AX+ =
 * Please see COPYING for details=0AX+ *=0AX+ * Copyright (c) 2005-2009 Bren=
 den Matthews, Philip Kovacs, et. al.=0AX+ *	(see AUTHORS)=0AX+ * All rights=
  reserved.=0AX+ *=0AX+ * This program is free software: you can redistribut=
 e it and/or modify=0AX+ * it under the terms of the GNU General Public Lice=
 nse as published by=0AX+ * the Free Software Foundation, either version 3 o=
 f the License, or=0AX+ * (at your option) any later version.=0AX+ *=0AX+ * =
 This program is distributed in the hope that it will be useful,=0AX+ * but =
 WITHOUT ANY WARRANTY; without even the implied warranty of=0AX+ * MERCHANTA=
 BILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the=0AX+ * GNU General Pub=
 lic License for more details.=0AX+ * You should have received a copy of the=
  GNU General Public License=0AX+ * along with this program.  If not, see <h=
 ttp://www.gnu.org/licenses/>.=0AX+ *=0AX+ */=0AX+=0AX+#ifndef BMPX_H_=0AX+#=
 define BMPX_H_=0AX+=0AX+void update_bmpx(void);=0AX+struct bmpx_s {=0AX+	ch=
 ar *title;=0AX+	char *artist;=0AX+	char *album;=0AX+	char *uri;=0AX+	int bi=
 trate;=0AX+	int track;=0AX+};=0AX+=0AX+#endif /*BMPX_H_*/=0A7aa331d858358f3=
 f577dc4fd46751684=0Aecho x - conky/files/patch-src-rss.c=0Ased 's/^X//' >co=
 nky/files/patch-src-rss.c << '76c8c57d8c780d81a228c4b723b5d1cb'=0AX--- src/=
 rss.c.orig=0AX+++ src/rss.c=0AX@@ -67,7 +67,7 @@ static void rss_process_in=
 fo(char *p, int p_max_size, char *uri, char *action, i=0AX 		curloc->result=
  =3D malloc(sizeof(PRSS));=0AX 		memset(curloc->result, 0, sizeof(PRSS));=
 =0AX 		curloc->process_function =3D &prss_parse_data;=0AX-		ccurl_init_thre=
 ad(curloc, interval);=0AX+		ccurl_init_thread(curloc, interval * 60);=0AX 	=
 	if (!curloc->p_timed_thread) {=0AX 			NORM_ERR("error setting up RSS threa=
 d");=0AX 		}=0A76c8c57d8c780d81a228c4b723b5d1cb=0Aecho x - conky/files/patc=
 h-lua-cairo.pkg=0Ased 's/^X//' >conky/files/patch-lua-cairo.pkg << 'b690010=
 cd703ed9c276c87f5b62a0618'=0AX--- lua/cairo.pkg.orig=0AX+++ lua/cairo.pkg=
 =0AX@@ -4,6 +4,7 @@=0AX $#include <cairo-xlib.h>=0AX $#include <X11/Xlib.h>=
 =0AX $#include "libcairo-helper.h"=0AX+$#define tolua_outside=0AX /*=0AX  *=
  This code was mostly copied from cairo.h and cairo-xlib.h with comments=0A=
 X  * removed.  The licence noticed below is present for the sake of clarity=
 =2E=0Ab690010cd703ed9c276c87f5b62a0618=0Aecho x - conky/files/patch-src-Mak=
 efile.in=0Ased 's/^X//' >conky/files/patch-src-Makefile.in << '5c21d9aa16f5=
 dcf2797cb5497615f523'=0AX--- src/Makefile.in.orig=0AX+++ src/Makefile.in=0A=
 X@@ -141,7 +141,7 @@=0AX am__objects_15 =3D conky-linux.$(OBJEXT) conky-top=
 =2E$(OBJEXT) \=0AX 	conky-users.$(OBJEXT) conky-sony.$(OBJEXT) conky-i8k.$(=
 OBJEXT)=0AX @BUILD_LINUX_TRUE@am__objects_16 =3D $(am__objects_15)=0AX-am__=
 objects_17 =3D conky-freebsd.$(OBJEXT)=0AX+am__objects_17 =3D conky-freebsd=
 =2E$(OBJEXT) conky-top.$(OBJEXT)=0AX @BUILD_FREEBSD_TRUE@am__objects_18 =3D=
  $(am__objects_17)=0AX am__objects_19 =3D conky-openbsd.$(OBJEXT)=0AX @BUIL=
 D_OPENBSD_TRUE@am__objects_20 =3D $(am__objects_19)=0A5c21d9aa16f5dcf2797cb=
 5497615f523=0Aecho x - conky/files/patch-src-core.c=0Ased 's/^X//' >conky/f=
 iles/patch-src-core.c << '00e630dd0ae98e36949f27098228d476'=0AX--- src/core=
 =2Ec.orig	2010-03-25 22:27:32.000000000 +0200=0AX+++ src/core.c	2010-06-22 =
 01:40:31.000000000 +0300=0AX@@ -171,8 +171,6 @@=0AX 			NORM_ERR("acpiacadap=
 ter: arg is only used on linux");=0AX #endif=0AX 		}=0AX-		if(! obj->data.o=
 paque)=0AX-			obj->data.opaque =3D strdup("AC");=0AX #endif /* !__OpenBSD__=
  */=0AX 	END OBJ(freq, 0)=0AX 		get_cpu_count();=0AX@@ -279,8 +277,9 @@=0AX=
  		obj->data.s =3D strndup(bat, text_buffer_size);=0AX 	END OBJ(battery_bar=
 , 0)=0AX 		char bat[64];=0AX-		if (arg) {=0AX-			arg =3D scan_bar(obj, arg)=
 ;=0AX+=0AX+		arg =3D scan_bar(obj, arg);=0AX+		if (arg && strlen(arg)>0) {=
 =0AX 			sscanf(arg, "%63s", bat);=0AX 		} else {=0AX 			strcpy(bat, "BAT0")=
 ;=0AX@@ -372,18 +371,18 @@=0AX 		scan_loadgraph_arg(obj, arg);=0AX #endif /=
 * X11 */=0AX 	END OBJ(diskio, &update_diskio)=0AX-		parse_diskio_arg(obj, a=
 rg);=0AX+		parse_diskio_arg(obj, dev_name(arg));=0AX 	END OBJ(diskio_read, =
 &update_diskio)=0AX-		parse_diskio_arg(obj, arg);=0AX+		parse_diskio_arg(ob=
 j, dev_name(arg));=0AX 	END OBJ(diskio_write, &update_diskio)=0AX-		parse_d=
 iskio_arg(obj, arg);=0AX+		parse_diskio_arg(obj, dev_name(arg));=0AX #ifdef=
  X11=0AX 	END OBJ(diskiograph, &update_diskio)=0AX-		parse_diskiograph_arg(=
 obj, arg);=0AX+		parse_diskiograph_arg(obj, dev_name(arg));=0AX 	END OBJ(di=
 skiograph_read, &update_diskio)=0AX-		parse_diskiograph_arg(obj, arg);=0AX+=
 		parse_diskiograph_arg(obj, dev_name(arg));=0AX 	END OBJ(diskiograph_write=
 , &update_diskio)=0AX-		parse_diskiograph_arg(obj, arg);=0AX+		parse_diskio=
 graph_arg(obj, dev_name(arg));=0AX #endif /* X11 */=0AX 	END OBJ(color, 0)=
 =0AX #ifdef X11=0AX@@ -542,6 +541,13 @@=0AX 		parse_platform_sensor(obj, ar=
 g);=0AX 	END OBJ_ARG(hwmon, 0, "hwmon needs argumanets")=0AX 		parse_hwmon_=
 sensor(obj, arg);=0AX+#endif /* __linux__ */=0AX+	END OBJ(addr, &update_net=
 _stats)=0AX+		parse_net_stat_arg(obj, arg, free_at_crash);=0AX+#ifdef __lin=
 ux__=0AX+	END OBJ(addrs, &update_net_stats)=0AX+		parse_net_stat_arg(obj, a=
 rg, free_at_crash);=0AX+#endif /* __linux__ */=0AX 	END=0AX 	/* we have fou=
 r different types of top (top, top_mem, top_time and top_io). To=0AX 	 * av=
 oid having almost-same code four times, we have this special=0AX@@ -552,12 =
 +558,8 @@=0AX 		if (!parse_top_args(s, arg, obj)) {=0AX 			return NULL;=0AX=
  		}=0AX-	} else OBJ(addr, &update_net_stats)=0AX-		parse_net_stat_arg(obj,=
  arg, free_at_crash);=0AX-	END OBJ(addrs, &update_net_stats)=0AX-		parse_ne=
 t_stat_arg(obj, arg, free_at_crash);=0AX-#endif /* __linux__ */=0AX-	END OB=
 J_ARG(tail, 0, "tail needs arguments")=0AX+	} else=0AX+		OBJ_ARG(tail, 0, "=
 tail needs arguments")=0AX 		init_tailhead("tail", arg, obj, free_at_crash)=
 ;=0AX 	END OBJ_ARG(head, 0, "head needs arguments")=0AX 		init_tailhead("he=
 ad", arg, obj, free_at_crash);=0AX@@ -966,8 +968,10 @@=0AX 	END OBJ(xmms2_s=
 ize, &update_xmms2)=0AX 	END OBJ(xmms2_status, &update_xmms2)=0AX 	END OBJ(=
 xmms2_percent, &update_xmms2)=0AX+#ifdef X11=0AX 	END OBJ(xmms2_bar, &updat=
 e_xmms2)=0AX 		scan_bar(obj, arg);=0AX+#endif=0AX 	END OBJ(xmms2_smart, &up=
 date_xmms2)=0AX 	END OBJ(xmms2_playlist, &update_xmms2)=0AX 	END OBJ(xmms2_=
 timesplayed, &update_xmms2)=0AX@@ -993,9 +997,11 @@=0AX 	END OBJ(audacious_=
 playlist_length, &update_audacious)=0AX 	END OBJ(audacious_playlist_positio=
 n, &update_audacious)=0AX 	END OBJ(audacious_main_volume, &update_audacious=
 )=0AX+#ifdef X11=0AX 	END OBJ(audacious_bar, &update_audacious)=0AX 		scan_=
 bar(obj, arg);=0AX #endif=0AX+#endif=0AX #ifdef BMPX=0AX 	END OBJ(bmpx_titl=
 e, &update_bmpx)=0AX 		memset(&(info.bmpx), 0, sizeof(struct bmpx_s));=0AX@=
 @ -1327,7 +1333,7 @@=0AX 			strfold(p, 1);=0AX 		} else if (*p =3D=3D '#') =
 {=0AX 			char c;=0AX-			if (remove_comment(p, &c) && p > orig_p && c =3D=3D=
  '\n') {=0AX+			if (remove_comment(p, &c) && p >=3D orig_p && c =3D=3D '\n'=
 ) {=0AX 				/* if remove_comment removed a newline, we need to 'back up' wi=
 th p */=0AX 				p--;=0AX 			}=0A00e630dd0ae98e36949f27098228d476=0Aecho x -=
  conky/files/patch-src-freebsd.c=0Ased 's/^X//' >conky/files/patch-src-free=
 bsd.c << '11452bf3b469397e88fdf71c8331e2fa'=0AX--- src/freebsd.c.orig=0AX++=
 + src/freebsd.c=0AX@@ -67,7 +67,7 @@=0AX #endif=0AX =0AX __attribute__((gnu=
 _inline)) inline void=0AX-proc_find_top(struct process **cpu, struct proces=
 s **mem);=0AX+proc_find_top(struct process **cpu, struct process **mem, str=
 uct process **time);=0AX =0AX static short cpu_setup =3D 0;=0AX =0AX@@ -286=
 ,40 +290,38 @@ void update_running_processes(void)=0AX 	info.run_procs =3D =
 cnt;=0AX }=0AX =0AX-struct cpu_load_struct {=0AX-	unsigned long load[5];=0A=
 X-};=0AX-=0AX-struct cpu_load_struct fresh =3D { {0, 0, 0, 0, 0} };=0AX-lon=
 g cpu_used, oldtotal, oldused;=0AX-=0AX void get_cpu_count(void)=0AX {=0AX-=
 	/* int cpu_count =3D 0; */=0AX+	int cpu_count =3D 0;=0AX+	size_t cpu_count=
 _len =3D sizeof(cpu_count);=0AX =0AX-	/* XXX: FreeBSD doesn't allow to get =
 per CPU load stats on SMP machines.=0AX-	 * It's possible to get a CPU coun=
 t, but as we fulfill only=0AX-	 * info.cpu_usage[0], it's better to report =
 there's only one CPU.=0AX-	 * It should fix some bugs (e.g. cpugraph) */=0A=
 X-#if 0=0AX 	if (GETSYSCTL("hw.ncpu", cpu_count) =3D=3D 0) {=0AX 		info.cpu=
 _count =3D cpu_count;=0AX+	} else {=0AX+		fprintf(stderr, "Cannot get hw.nc=
 pu\n");=0AX+		info.cpu_count =3D 0;=0AX 	}=0AX-#endif=0AX-	info.cpu_count =
 =3D 1;=0AX =0AX-	info.cpu_usage =3D malloc(info.cpu_count * sizeof(float));=
 =0AX+	info.cpu_usage =3D malloc((info.cpu_count + 1) * sizeof(float));=0AX =
 	if (info.cpu_usage =3D=3D NULL) {=0AX 		CRIT_ERR(NULL, NULL, "malloc");=0A=
 X 	}=0AX }=0AX =0AX-/* XXX: SMP support */=0AX-void update_cpu_usage(void)=
 =0AX+struct cpu_info {=0AX+	long oldtotal;=0AX+	long oldused;=0AX+};=0AX+=
 =0AX+void update_cpu_usage(void)=0AX {=0AX+	int i, j =3D 0;=0AX 	long used,=
  total;=0AX-	long cp_time[CPUSTATES];=0AX-	size_t cp_len =3D sizeof(cp_time=
 );=0AX+	long *cp_time =3D NULL;=0AX+	size_t cp_len;=0AX+	static struct cpu_=
 info *cpu =3D NULL;=0AX+	unsigned int malloc_cpu_size =3D 0;=0AX+	extern vo=
 id* global_cpu;=0AX =0AX 	/* add check for !info.cpu_usage since that mem i=
 s freed on a SIGUSR1 */=0AX 	if ((cpu_setup =3D=3D 0) || (!info.cpu_usage))=
  {=0AX@@ -327,28 +332,68 @@ void update_cpu_usage(void)=0AX 		cpu_setup =3D=
  1;=0AX 	}=0AX =0AX-	if (sysctlbyname("kern.cp_time", &cp_time, &cp_len, NU=
 LL, 0) < 0) {=0AX-		fprintf(stderr, "Cannot get kern.cp_time");=0AX+	if (!g=
 lobal_cpu) {=0AX+		malloc_cpu_size =3D (info.cpu_count + 1) * sizeof(struct=
  cpu_info);=0AX+		cpu =3D malloc(malloc_cpu_size);=0AX+		memset(cpu, 0, mal=
 loc_cpu_size);=0AX+		global_cpu =3D cpu;=0AX 	}=0AX =0AX-	fresh.load[0] =3D=
  cp_time[CP_USER];=0AX-	fresh.load[1] =3D cp_time[CP_NICE];=0AX-	fresh.load=
 [2] =3D cp_time[CP_SYS];=0AX-	fresh.load[3] =3D cp_time[CP_IDLE];=0AX-	fres=
 h.load[4] =3D cp_time[CP_IDLE];=0AX+	/* cpu[0] is overall stats, get it fro=
 m separate sysctl */=0AX+	cp_len =3D CPUSTATES * sizeof(long);=0AX+	cp_time=
  =3D malloc(cp_len);=0AX =0AX-	used =3D fresh.load[0] + fresh.load[1] + fre=
 sh.load[2];=0AX-	total =3D fresh.load[0] + fresh.load[1] + fresh.load[2] + =
 fresh.load[3];=0AX+	if (sysctlbyname("kern.cp_time", cp_time, &cp_len, NULL=
 , 0) < 0) {=0AX+		fprintf(stderr, "Cannot get kern.cp_time\n");=0AX+	}=0AX+=
 =0AX+	total =3D 0;=0AX+	for (j =3D 0; j < CPUSTATES; j++)=0AX+		total +=3D =
 cp_time[j];=0AX =0AX-	if ((total - oldtotal) !=3D 0) {=0AX-		info.cpu_usage=
 [0] =3D ((double) (used - oldused)) /=0AX-			(double) (total - oldtotal);=
 =0AX+	used =3D total - cp_time[CP_IDLE];=0AX+=0AX+	if ((total - cpu[0].oldt=
 otal) !=3D 0) {=0AX+		info.cpu_usage[0] =3D ((double) (used - cpu[0].olduse=
 d)) /=0AX+		(double) (total - cpu[0].oldtotal);=0AX 	} else {=0AX 		info.cp=
 u_usage[0] =3D 0;=0AX 	}=0AX =0AX-	oldused =3D used;=0AX-	oldtotal =3D tota=
 l;=0AX+	cpu[0].oldused =3D used;=0AX+	cpu[0].oldtotal =3D total;=0AX+=0AX+	=
 free(cp_time);=0AX+=0AX+	/* per-core stats */=0AX+	cp_len =3D CPUSTATES * s=
 izeof(long) * info.cpu_count;=0AX+	cp_time =3D malloc(cp_len);=0AX+=0AX+	/*=
  on e.g. i386 SMP we may have more values than actual cpus; this will just =
 drop extra values */=0AX+	if (sysctlbyname("kern.cp_times", cp_time, &cp_le=
 n, NULL, 0) < 0 && errno !=3D ENOMEM) {=0AX+		fprintf(stderr, "Cannot get k=
 ern.cp_times\n");=0AX+	}=0AX+=0AX+	for (i =3D 0; i < info.cpu_count; i++)=
 =0AX+	{=0AX+		total =3D 0;=0AX+		for (j =3D 0; j < CPUSTATES; j++)=0AX+			t=
 otal +=3D cp_time[i*CPUSTATES + j];=0AX+=0AX+		used =3D total - cp_time[i*C=
 PUSTATES + CP_IDLE];=0AX+=0AX+		if ((total - cpu[i+1].oldtotal) !=3D 0) {=
 =0AX+			info.cpu_usage[i+1] =3D ((double) (used - cpu[i+1].oldused)) /=0AX+=
 			(double) (total - cpu[i+1].oldtotal);=0AX+		} else {=0AX+			info.cpu_usa=
 ge[i+1] =3D 0;=0AX+		}=0AX+=0AX+		cpu[i+1].oldused =3D used;=0AX+		cpu[i+1]=
 =2Eoldtotal =3D total;=0AX+	}=0AX+=0AX+	free(cp_time);=0AX }=0AX =0AX void =
 update_load_average(void)=0AX@@ -540,7 +588,7 @@ char get_freq(char *p_clie=
 nt_buffer, size_t client_buffer_size, const char *p_fo=0AX =0AX void update=
 _top(void)=0AX {=0AX-	proc_find_top(info.cpu, info.memu);=0AX+	proc_find_to=
 p(info.cpu, info.memu, info.time);=0AX }=0AX =0AX #if 0=0AX@@ -676,8 +726,1=
 5 @@ int comparemem(const void *a, const void *b)=0AX 	}=0AX }=0AX =0AX+int=
  comparetime(const void *va, const void *vb)=0AX+{=0AX+	struct process *a =
 =3D (struct process *)va, *b =3D (struct process *)vb;=0AX+=0AX+	return b->=
 total_cpu_time - a->total_cpu_time;=0AX+}=0AX+=0AX __attribute__((gnu_inlin=
 e)) inline void=0AX-proc_find_top(struct process **cpu, struct process **me=
 m)=0AX+proc_find_top(struct process **cpu, struct process **mem, struct pro=
 cess **time)=0AX {=0AX 	struct kinfo_proc *p;=0AX 	int n_processes;=0AX@@ -=
 701,6 +758,9 @@ proc_find_top(struct process **cpu, struct process **mem)=
 =0AX 			processes[j].amount =3D 100.0 * p[i].ki_pctcpu / FSCALE;=0AX 			pro=
 cesses[j].vsize =3D p[i].ki_size;=0AX 			processes[j].rss =3D (p[i].ki_rssi=
 ze * getpagesize());=0AX+			/* ki_runtime is in microseconds, total_cpu_tim=
 e in centiseconds.=0AX+			 * Therefore we divide by 10000. */=0AX+			proces=
 ses[j].total_cpu_time =3D p[i].ki_runtime / 10000;=0AX 			j++;=0AX 		}=0AX =
 	}=0AX@@ -710,11 +770,8 @@ proc_find_top(struct process **cpu, struct proce=
 ss **mem)=0AX 		struct process *tmp, *ttmp;=0AX =0AX 		tmp =3D malloc(sizeo=
 f(struct process));=0AX-		tmp->pid =3D processes[i].pid;=0AX-		tmp->amount =
 =3D processes[i].amount;=0AX+		memcpy(tmp, &processes[i], sizeof(struct pro=
 cess));=0AX 		tmp->name =3D strndup(processes[i].name, text_buffer_size);=
 =0AX-		tmp->rss =3D processes[i].rss;=0AX-		tmp->vsize =3D processes[i].vsi=
 ze;=0AX =0AX 		ttmp =3D mem[i];=0AX 		mem[i] =3D tmp;=0AX@@ -729,11 +786,8 =
 @@ proc_find_top(struct process **cpu, struct process **mem)=0AX 		struct p=
 rocess *tmp, *ttmp;=0AX =0AX 		tmp =3D malloc(sizeof(struct process));=0AX-=
 		tmp->pid =3D processes[i].pid;=0AX-		tmp->amount =3D processes[i].amount;=
 =0AX+		memcpy(tmp, &processes[i], sizeof(struct process));=0AX 		tmp->name =
 =3D strndup(processes[i].name, text_buffer_size);=0AX-		tmp->rss =3D proces=
 ses[i].rss;=0AX-		tmp->vsize =3D processes[i].vsize;=0AX =0AX 		ttmp =3D cp=
 u[i];=0AX 		cpu[i] =3D tmp;=0AX@@ -743,6 +797,22 @@ proc_find_top(struct pr=
 ocess **cpu, struct process **mem)=0AX 		}=0AX 	}=0AX =0AX+	qsort(processes=
 , j - 1, sizeof(struct process), comparetime);=0AX+	for (i =3D 0; i < 10 &&=
  i < n_processes; i++) {=0AX+		struct process *tmp, *ttmp;=0AX+=0AX+		tmp =
 =3D malloc(sizeof(struct process));=0AX+		memcpy(tmp, &processes[i], sizeof=
 (struct process));=0AX+		tmp->name =3D strndup(processes[i].name, text_buff=
 er_size);=0AX+=0AX+		ttmp =3D time[i];=0AX+		time[i] =3D tmp;=0AX+		if (ttm=
 p !=3D NULL) {=0AX+			free(ttmp->name);=0AX+			free(ttmp);=0AX+		}=0AX+	}=
 =0AX+=0AX #if defined(FREEBSD_DEBUG)=0AX 	printf("=3D=3D=3D=3D=3D\nmem\n");=
 =0AX 	for (i =3D 0; i < 10; i++) {=0AX@@ -916,8 +986,3 @@ int get_entropy_p=
 oolsize(unsigned int *val)=0AX 	(void)val;=0AX 	return 1;=0AX }=0AX-=0AX-/*=
  empty stub so conky links */=0AX-void free_all_processes(void)=0AX-{=0AX-}=
 =0A11452bf3b469397e88fdf71c8331e2fa=0Aecho x - conky/pkg-descr=0Ased 's/^X/=
 /' >conky/pkg-descr << '1dc47ddbf5208b510dd9392ba07bd8c1'=0AXConky is an ad=
 vanced, highly configurable system monitor for X=0AX=0AXWWW:	http://conky.s=
 ourceforge.net/=0A1dc47ddbf5208b510dd9392ba07bd8c1=0Aecho x - conky/distinf=
 o=0Ased 's/^X//' >conky/distinfo << 'ca22fce68ddee350633d14dc535474a0'=0AXM=
 D5 (conky-1.8.0.tar.bz2) =3D 494cbaf1108cfdb977fc80454d9b13e2=0AXSHA256 (co=
 nky-1.8.0.tar.bz2) =3D badb3824a9655eee90281939df8bdb3ca95cf8bab03269b3b377=
 5bfea2ed0a51=0AXSIZE (conky-1.8.0.tar.bz2) =3D 610545=0Aca22fce68ddee350633=
 d14dc535474a0=0Aexit=0A=0A
 --C7zPtVaVf+AK4Oqc--

From: Nikos Ntarmos <ntarmos@cs.uoi.gr>
To: bug-followup@FreeBSD.ORG
Cc:  
Subject: Re: ports/150233: conky 1.8 broken (sysutils/conky)
Date: Sun, 10 Oct 2010 00:27:27 +0300

 I've being working on this with the help of Frank Shute but not getting
 anywhere I'm afraid. I've tried both with 8.1/amd64 installed from the
 CDs and with a csup'ed/rebuilt world+kernel and conky just won't crash
 on me.
 
 In any case, conky 1.8.1 was released the other day. I've tested this
 one as well and not seeing any crashes either so. I'm send-pr'ing the
 updated port as I write these words.
 
 Cheers.
 
 \n\n
State-Changed-From-To: feedback->closed 
State-Changed-By: makc 
State-Changed-When: Sat Oct 30 18:45:39 UTC 2010 
State-Changed-Why:  
Fix was committed along with ports/151668. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=150233 
>Unformatted:
