Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Jun 2010 19:22:45 GMT
From:      Nikos Ntarmos <ntarmos@cs.uoi.gr>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/147795: [maintainer-update] Updating sysutils/conky to 1.8.0 plus fixes
Message-ID:  <201006111922.o5BJMjA5053874@www.freebsd.org>
Resent-Message-ID: <201006111930.o5BJU4vo052723@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         147795
>Category:       ports
>Synopsis:       [maintainer-update] Updating sysutils/conky to 1.8.0 plus fixes
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jun 11 19:30:04 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Nikos Ntarmos
>Release:        FreeBSD 8.0-RELEASE-p2
>Organization:
Computer Science Dept., U. of Ioannina, Greece
>Environment:
FreeBSD tinderbox.cs.uoi.gr 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Tue Jan  5 16:02:27 UTC 2010     root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
Long-overdue update of sysutils/conky to version 1.8.0. Since 1.8.1 has advanced quite a bit, including several bug fixes, this update also incorporates all changes up to today's 1.8.1 git branch.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- conky.o/Makefile	2010-04-19 13:59:35.000000000 +0300
+++ conky/Makefile	2010-06-11 21:43:59.000000000 +0300
@@ -6,8 +6,7 @@
 #
 
 PORTNAME=	conky
-PORTVERSION=	1.7.2
-PORTREVISION=	7
+PORTVERSION=	1.8.0
 CATEGORIES=	sysutils
 MASTER_SITES=	SF
 
@@ -40,6 +39,7 @@
 		AUDACIOUS "Enable Audacious support" Off \
 		BMPX "Enable BMPX support" Off \
 		MPD "Enable MPD support" Off \
+		NCURSES "Enable ncurses support" Off \
 		RSS "Enable RSS support" Off \
 		METAR "Enable METAR Weather support" Off \
 		XOAP "Enable XOAP Weather support" Off \
@@ -115,6 +115,12 @@
 CONFIGURE_ARGS+=	--enable-lua-imlib2
 .endif
 
+.if defined(WITH_NCURSES)
+CONFIGURE_ARGS+=	--enable-ncurses
+.else
+CONFIGURE_ARGS+=	--disable-ncurses
+.endif
+
 .if defined(WITH_XFT)
 LIB_DEPENDS+=		Xft.2:${PORTSDIR}/x11-fonts/libXft
 CONFIGURE_ARGS+=	--enable-xft
diff -urNbB /usr/ports/sysutils/conky.o/distinfo conky/distinfo
--- /usr/ports/sysutils/conky.o/distinfo	2009-09-17 22:03:45.000000000 +0300
+++ conky/distinfo	2010-06-11 21:43:59.000000000 +0300
@@ -1,3 +1,3 @@
-MD5 (conky-1.7.2.tar.bz2) = cf6f5d45d42ad68c618c00271813b80d
-SHA256 (conky-1.7.2.tar.bz2) = b3c0a1b0ff90579d48df542a6070adbe67d3926d6d0c66ee12b52b2d5a2c675c
-SIZE (conky-1.7.2.tar.bz2) = 585099
+MD5 (conky-1.8.0.tar.bz2) = 494cbaf1108cfdb977fc80454d9b13e2
+SHA256 (conky-1.8.0.tar.bz2) = badb3824a9655eee90281939df8bdb3ca95cf8bab03269b3b3775bfea2ed0a51
+SIZE (conky-1.8.0.tar.bz2) = 610545
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-configure conky/files/patch-configure
--- /usr/ports/sysutils/conky.o/files/patch-configure	2010-03-07 15:03:42.000000000 +0200
+++ conky/files/patch-configure	2010-06-11 21:43:59.000000000 +0300
@@ -1,37 +1,81 @@
---- configure.orig
-+++ configure
-@@ -12805,7 +12805,7 @@
+--- configure.orig	2010-05-01 05:57:07.000000000 +0300
++++ configure	2010-05-01 06:00:45.000000000 +0300
+@@ -11233,12 +11233,12 @@
+         pkg_cv_Audacious_CFLAGS="$Audacious_CFLAGS"
+     else
+         if test -n "$PKG_CONFIG" && \
+-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5
+-  ($PKG_CONFIG --exists --print-errors "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0") 2>&5
++    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5
++  ($PKG_CONFIG --exists --print-errors "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0") 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+-  pkg_cv_Audacious_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`
++  pkg_cv_Audacious_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`
+ else
+   pkg_failed=yes
+ fi
+@@ -11251,12 +11251,12 @@
+         pkg_cv_Audacious_LIBS="$Audacious_LIBS"
+     else
+         if test -n "$PKG_CONFIG" && \
+-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5
+-  ($PKG_CONFIG --exists --print-errors "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0") 2>&5
++    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0\""; } >&5
++  ($PKG_CONFIG --exists --print-errors "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0") 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+-  pkg_cv_Audacious_LIBS=`$PKG_CONFIG --libs "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`
++  pkg_cv_Audacious_LIBS=`$PKG_CONFIG --libs "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0" 2>/dev/null`
+ else
+   pkg_failed=yes
+ fi
+@@ -11275,14 +11275,14 @@
+         _pkg_short_errors_supported=no
+ fi
+         if test $_pkg_short_errors_supported = yes; then
+-	        Audacious_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`
++	        Audacious_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`
+         else
+-	        Audacious_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0"`
++	        Audacious_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0"`
+         fi
+ 	# Put the nasty error message in config.log where it belongs
+ 	echo "$Audacious_PKG_ERRORS" >&5
+ 
+-	as_fn_error "Package requirements (audacious >= 1.4.0 dbus-glib-1 glib-2.0 gobject-2.0) were not met:
++	as_fn_error "Package requirements (audacious >= 1.4.0 audclient dbus-glib-1 glib-2.0 gobject-2.0) were not met:
+ 
+ $Audacious_PKG_ERRORS
+ 
+@@ -11645,7 +11645,7 @@
  
  
  if test x$want_apcupsd = xyes; then
 -  if test x"$uname" != xLinux; then
 +  if test x"$uname" != xLinux -a x"$uname" != xFreeBSD; then
-       { $as_echo "$as_me:$LINENO: apcupsd not supported on $uname... disabling" >&5
+       { $as_echo "$as_me:${as_lineno-$LINENO}: apcupsd not supported on $uname... disabling" >&5
  $as_echo "$as_me: apcupsd not supported on $uname... disabling" >&6;}
-       want_apcupsd=no
-@@ -15930,7 +15930,7 @@
- 
+       want_apcupsd="not supported on $uname"
+@@ -15950,11 +15950,6 @@
  			fi
+ 
  		fi
--		for ac_prog in tolua++ tolua++5.1
-+		for ac_prog in tolua++ tolua++5.1 tolua++-5.1
- do
-   # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
-@@ -16006,7 +16006,7 @@
-   return 0;
- }
- _ACEOF
--for ac_lib in '' tolua++ tolua++5.1; do
-+for ac_lib in '' tolua++-5.1 tolua++ tolua++5.1; do
-   if test -z "$ac_lib"; then
-     ac_res="none required"
-   else
-@@ -19845,7 +19845,6 @@
- ac_res=$ac_cv_search_clock_gettime
- if test "$ac_res" != no; then
-   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
--  conky_LIBS="$conky_LIBS -lrt"
+-if test x$want_alsa = xyes; then
+-
+-$as_echo "#define MIXER_IS_ALSA 1" >>confdefs.h
+-
+-fi
+ 
+ for ac_header in signal.h unistd.h sys/utsname.h sys/stat.h linux/soundcard.h alsa/asoundlib.h dirent.h mcheck.h \
+       sys/statfs.h sys/param.h pthread.h semaphore.h assert.h errno.h time.h
+@@ -18905,6 +18900,7 @@
+   ALSA mixer:       $want_alsa
+   apcupsd:          $want_apcupsd
+   I/O stats:        $want_iostats
++  ncurses:          $want_ncurses
  
- cat >>confdefs.h <<\_ACEOF
- #define HAVE_CLOCK_GETTIME 1
+  * Lua ($want_lua) bindings:
+   Cairo:            $want_lua_cairo
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-doc-variables.xml conky/files/patch-doc-variables.xml
--- /usr/ports/sysutils/conky.o/files/patch-doc-variables.xml	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-doc-variables.xml	2010-06-11 21:43:59.000000000 +0300
@@ -0,0 +1,29 @@
+--- doc/variables.xml.orig
++++ doc/variables.xml
+@@ -7,8 +7,8 @@
+             <option>(adapter)</option>
+         </term>
+         <listitem>ACPI ac adapter state. On linux, the adapter option specifies the
+-        subfolder of /sys/class/power_supply containing the state information (defaults
+-        to "AC"). Other systems ignore it.
++        subfolder of /sys/class/power_supply containing the state information (tries "AC"
++        and "ADP1" if there is no argument given). Non-linux systems ignore it.
+         <para /></listitem>
+     </varlistentry>
+     <varlistentry>
+@@ -2416,6 +2416,15 @@
+         <listitem>Hostname 
+         <para /></listitem>
+     </varlistentry>
++     <varlistentry>
++        <term>
++            <command>
++                <option>nodename_short</option>
++            </command>
++        </term>
++        <listitem>Short hostname (same as 'hostname -s' shell command).
++        <para /></listitem>
++    </varlistentry>
+     <varlistentry>
+         <term>
+             <command>
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-lua-cairo.pkg conky/files/patch-lua-cairo.pkg
--- /usr/ports/sysutils/conky.o/files/patch-lua-cairo.pkg	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-lua-cairo.pkg	2010-06-11 21:43:59.000000000 +0300
@@ -0,0 +1,10 @@
+--- lua/cairo.pkg.orig	2010-05-01 04:41:44.000000000 +0300
++++ lua/cairo.pkg	2010-05-01 04:20:40.000000000 +0300
+@@ -4,6 +4,7 @@
+ $#include <cairo-xlib.h>
+ $#include <X11/Xlib.h>
+ $#include "libcairo-helper.h"
++$#define tolua_outside
+ /*
+  * This code was mostly copied from cairo.h and cairo-xlib.h with comments
+  * removed.  The licence noticed below is present for the sake of clarity.
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-Makefile.in conky/files/patch-src-Makefile.in
--- /usr/ports/sysutils/conky.o/files/patch-src-Makefile.in	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-Makefile.in	2010-06-11 21:43:59.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/Makefile.in.orig	2010-04-30 21:55:48.000000000 +0300
++++ src/Makefile.in	2010-04-30 21:55:50.000000000 +0300
+@@ -141,7 +141,7 @@
+ am__objects_15 = conky-linux.$(OBJEXT) conky-top.$(OBJEXT) \
+ 	conky-users.$(OBJEXT) conky-sony.$(OBJEXT) conky-i8k.$(OBJEXT)
+ @BUILD_LINUX_TRUE@am__objects_16 = $(am__objects_15)
+-am__objects_17 = conky-freebsd.$(OBJEXT)
++am__objects_17 = conky-freebsd.$(OBJEXT) conky-top.$(OBJEXT)
+ @BUILD_FREEBSD_TRUE@am__objects_18 = $(am__objects_17)
+ am__objects_19 = conky-openbsd.$(OBJEXT)
+ @BUILD_OPENBSD_TRUE@am__objects_20 = $(am__objects_19)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-apcupsd.c conky/files/patch-src-apcupsd.c
--- /usr/ports/sysutils/conky.o/files/patch-src-apcupsd.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-apcupsd.c	2010-06-11 21:45:26.000000000 +0300
@@ -0,0 +1,18 @@
+--- src/apcupsd.c.orig
++++ src/apcupsd.c
+@@ -154,7 +154,7 @@ static int fill_items(int sock, PAPCUPSD_S apc) {
+ //
+ // Conky update function for apcupsd data
+ //
+-void update_apcupsd(void) {
++int update_apcupsd(void) {
+ 
+ 	int i;
+ 	APCUPSD_S apc;
+@@ -225,5 +225,5 @@ void update_apcupsd(void) {
+ 	// "atomically" copy the data into working set
+ 	//
+ 	memcpy(info.apcupsd.items, apc.items, sizeof(info.apcupsd.items));
+-	return;
++	return 0;
+ }
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-apcupsd.h conky/files/patch-src-apcupsd.h
--- /usr/ports/sysutils/conky.o/files/patch-src-apcupsd.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-apcupsd.h	2010-06-11 21:45:46.000000000 +0300
@@ -0,0 +1,10 @@
+--- src/apcupsd.h.orig
++++ src/apcupsd.h
+@@ -49,6 +49,6 @@ typedef struct apcupsd_s {
+ } APCUPSD_S, *PAPCUPSD_S;
+ 
+ /* Service routine for the conky main thread */
+-void update_apcupsd(void);
++int update_apcupsd(void);
+ 
+ #endif /*APCUPSD_H_*/
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-audacious.c conky/files/patch-src-audacious.c
--- /usr/ports/sysutils/conky.o/files/patch-src-audacious.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-audacious.c	2010-06-11 21:46:05.000000000 +0300
@@ -0,0 +1,19 @@
+--- src/audacious.c.orig
++++ src/audacious.c
+@@ -62,7 +62,7 @@ static audacious_t audacious_items;
+ /* -----------------------------------------
+  * Conky update function for audacious data.
+  * ----------------------------------------- */
+-void update_audacious(void)
++int update_audacious(void)
+ {
+ 	/* The worker thread is updating audacious_items array asynchronously
+ 	 * to the main conky thread.
+@@ -79,6 +79,7 @@ void update_audacious(void)
+ 	timed_thread_lock(info.audacious.p_timed_thread);
+ 	memcpy(&info.audacious.items, audacious_items, sizeof(audacious_items));
+ 	timed_thread_unlock(info.audacious.p_timed_thread);
++	return 0;
+ }
+ 
+ /* ---------------------------------------------------------
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-audacious.h conky/files/patch-src-audacious.h
--- /usr/ports/sysutils/conky.o/files/patch-src-audacious.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-audacious.h	2010-06-11 21:46:21.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/audacious.h.orig
++++ src/audacious.h
+@@ -60,7 +60,7 @@ int create_audacious_thread(void);
+ int destroy_audacious_thread(void);
+ 
+ /* Service routine for the conky main thread */
+-void update_audacious(void);
++int update_audacious(void);
+ 
+ /* Thread functions */
+ void *audacious_thread_func(void *);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-bmpx.c conky/files/patch-src-bmpx.c
--- /usr/ports/sysutils/conky.o/files/patch-src-bmpx.c	2009-11-20 18:14:11.000000000 +0200
+++ conky/files/patch-src-bmpx.c	1970-01-01 02:00:00.000000000 +0200
@@ -1,60 +0,0 @@
---- src/bmpx.c.orig	2009-09-23 22:02:33.000000000 +0300
-+++ src/bmpx.c	2009-09-23 22:03:54.000000000 +0300
-@@ -41,7 +41,7 @@
- static int connected = 0;
- static char *unknown = "unknown";
- 
--void fail(GError *error);
-+void fail(GError *error, struct information *);
- 
- void update_bmpx()
- {
-@@ -57,15 +57,15 @@
- 		bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
- 		if (bus == NULL) {
- 			ERR("BMPx error 1: %s\n", error->message);
--			fail(error);
-+			fail(error, current_info);
- 			return;
- 		}
- 
- 		remote_object = dbus_g_proxy_new_for_name(bus, BMP_DBUS_SERVICE,
--				BMP_DBUS_PATH, BMP_DBUS_INTERFACE);
-+				BMP_DBUS_PATH__BMP, BMP_DBUS_INTERFACE__BMP);
- 		if (!remote_object) {
- 			ERR("BMPx error 2: %s\n", error->message);
--			fail(error);
-+			fail(error, current_info);
- 			return;
- 		}
- 
-@@ -77,7 +77,7 @@
- 					G_TYPE_INVALID, G_TYPE_INT, &current_track, G_TYPE_INVALID)) {
- 		} else {
- 			ERR("BMPx error 3: %s\n", error->message);
--			fail(error);
-+			fail(error, current_info);
- 			return;
- 		}
- 
-@@ -111,17 +111,17 @@
- 				g_value_get_string(g_hash_table_lookup(metadata, "location"));
- 		} else {
- 			ERR("BMPx error 4: %s\n", error->message);
--			fail(error);
-+			fail(error, current_info);
- 			return;
- 		}
- 
- 		g_hash_table_destroy(metadata);
- 	} else {
--		fail(error);
-+		fail(error, current_info);
- 	}
- }
- 
--void fail(GError *error)
-+void fail(GError *error, struct information *current_info)
- {
- 	if (error) {
- 		g_error_free(error);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-bmpx.h conky/files/patch-src-bmpx.h
--- /usr/ports/sysutils/conky.o/files/patch-src-bmpx.h	2009-11-20 18:14:11.000000000 +0200
+++ conky/files/patch-src-bmpx.h	1970-01-01 02:00:00.000000000 +0200
@@ -1,42 +0,0 @@
---- src/bmpx.h.orig	2009-09-23 22:04:47.000000000 +0300
-+++ src/bmpx.h	2009-09-23 22:02:05.000000000 +0300
-@@ -0,0 +1,39 @@
-+/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
-+ * vim: ts=4 sw=4 noet ai cindent syntax=c
-+ *
-+ * Conky, a system monitor, based on torsmo
-+ *
-+ * Please see COPYING for details
-+ *
-+ * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
-+ *	(see AUTHORS)
-+ * All rights reserved.
-+ *
-+ * This program is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ *
-+ */
-+
-+#ifndef BMPX_H_
-+#define BMPX_H_
-+
-+void update_bmpx(void);
-+struct bmpx_s {
-+	char *title;
-+	char *artist;
-+	char *album;
-+	char *uri;
-+	int bitrate;
-+	int track;
-+};
-+
-+#endif /*BMPX_H_*/
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-common.c conky/files/patch-src-common.c
--- /usr/ports/sysutils/conky.o/files/patch-src-common.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-common.c	2010-06-11 21:46:43.000000000 +0300
@@ -0,0 +1,62 @@
+--- src/common.c.orig
++++ src/common.c
+@@ -84,9 +84,10 @@ char *strndup(const char *s, size_t n)
+ }
+ #endif /* HAVE_STRNDUP */
+ 
+-void update_uname(void)
++int update_uname(void)
+ {
+ 	uname(&info.uname_s);
++	return 0;
+ }
+ 
+ double get_time(void)
+@@ -268,7 +269,7 @@ void format_seconds_short(char *buf, unsigned int n, long seconds)
+  * Populated while initialising text objects in construct_text_object(). */
+ static struct update_cb {
+ 	struct update_cb *next;
+-	void (*func)(void);
++	int (*func)(void);
+ 	pthread_t thread;
+ 	sem_t start_wait, end_wait;
+ 
+@@ -286,7 +287,7 @@ static int threading_started = 0;
+ 
+ /* Register an update callback. Don't allow duplicates, to minimise side
+  * effects and overhead. */
+-void add_update_callback(void (*func)(void))
++void add_update_callback(int (*func)(void))
+ {
+ 	struct update_cb *uc = &update_cb_head;
+ 
+@@ -376,7 +377,12 @@ static void *run_update_callback(void *data)
+ 	while (1) {
+ 		if (sem_wait(&ucb->start_wait)) pthread_exit(NULL);
+ 		if (ucb->running == 0) pthread_exit(NULL);
+-		(*ucb->func)();
++		if((*ucb->func)()) {
++			ucb->next = ucb;	//this is normally not be possible, so we use it to show that there was a critical error
++			sem_post(&ucb->end_wait);
++			sem_post(&ucb->end_wait);
++			pthread_exit(NULL);
++		}
+ 		if (sem_post(&ucb->end_wait)) pthread_exit(NULL);
+ 	}
+ }
+@@ -411,8 +417,14 @@ void update_stuff(void)
+ 	}
+ 	/* need to synchronise here, otherwise locking is needed (as data
+ 	 * would be printed with some update callbacks still running) */
+-	for (uc = update_cb_head.next; uc; uc = uc->next)
++	for (uc = update_cb_head.next; uc; uc = uc->next) {
+ 		sem_wait(&uc->end_wait);
++		if(uc == uc->next) {
++			pthread_join(uc->thread, NULL);
++			free(uc);
++			exit(EXIT_FAILURE);
++		}
++	}
+ 
+ 	/* XXX: move the following into the update_meminfo() functions? */
+ 	if (no_buffers) {
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-common.h conky/files/patch-src-common.h
--- /usr/ports/sysutils/conky.o/files/patch-src-common.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-common.h	2010-06-11 21:46:59.000000000 +0300
@@ -0,0 +1,51 @@
+--- src/common.h.orig
++++ src/common.h
+@@ -11,7 +11,7 @@
+ #include <sys/socket.h>
+ #include "text_object.h"
+ 
+-void add_update_callback(void (*func)(void));
++void add_update_callback(int (*func)(void));
+ void free_update_callbacks(void);
+ void start_update_threading(void);
+ 
+@@ -19,20 +19,20 @@ void start_update_threading(void);
+ void strfold(char *start, int count);
+ int check_mount(char *s);
+ void prepare_update(void);
+-void update_uptime(void);
+-void update_meminfo(void);
+-void update_net_stats(void);
+-void update_cpu_usage(void);
+-void update_total_processes(void);
+-void update_uname(void);
+-void update_threads(void);
+-void update_running_processes(void);
++int update_uptime(void);
++int update_meminfo(void);
++int update_net_stats(void);
++int update_cpu_usage(void);
++int update_total_processes(void);
++int update_uname(void);
++int update_threads(void);
++int update_running_processes(void);
+ void update_stuff(void);
+ char get_freq(char *, size_t, const char *, int, unsigned int);
+ void print_voltage_mv(struct text_object *, char *, int);
+ void print_voltage_v(struct text_object *, char *, int);
+-void update_load_average(void);
+-void update_top(void);
++int update_load_average(void);
++int update_top(void);
+ void free_all_processes(void);
+ struct process *get_first_process(void);
+ void get_cpu_count(void);
+@@ -50,7 +50,7 @@ void format_seconds(char *buf, unsigned int n, long t);
+ void format_seconds_short(char *buf, unsigned int n, long t);
+ 
+ #ifdef X11
+-void update_x11info(void);
++int update_x11info(void);
+ #endif
+ 
+ int round_to_int_temp(float);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-conky.c conky/files/patch-src-conky.c
--- /usr/ports/sysutils/conky.o/files/patch-src-conky.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-conky.c	2010-06-11 21:47:18.000000000 +0300
@@ -0,0 +1,376 @@
+--- src/conky.c.orig
++++ src/conky.c
+@@ -166,9 +166,7 @@ int top_cpu, top_mem, top_time;
+ #ifdef IOSTATS
+ int top_io;
+ #endif
+-#ifdef __linux__
+ int top_running;
+-#endif
+ int output_methods;
+ static int extra_newline;
+ enum x_initialiser_state x_initialised = NO;
+@@ -269,9 +267,6 @@ static void print_version(void)
+ #ifdef IMLIB2
+ 		   "  * Imlib2\n"
+ #endif /* IMLIB2 */
+-#ifdef MIXER_IS_ALSA
+-		   "  * ALSA mixer support\n"
+-#endif /* MIXER_IS_ALSA */
+ #ifdef APCUPSD
+ 		   "  * apcupsd\n"
+ #endif /* APCUPSD */
+@@ -463,7 +458,7 @@ int check_contains(char *f, char *s)
+ 		}
+ 		fclose(where);
+ 	} else {
+-		NORM_ERR("Could not open the file");
++		NORM_ERR("Could not open the file '%s'", f);
+ 	}
+ 	return ret;
+ }
+@@ -512,6 +507,7 @@ static inline void for_each_line(char *b, int f(char *, int))
+ 	char *ps, *pe;
+ 	int special_index = 0; /* specials index */
+ 
++	if(! b) return;
+ 	for (ps = b, pe = b; *pe; pe++) {
+ 		if (*pe == '\n') {
+ 			*pe = '\0';
+@@ -765,6 +761,8 @@ void generate_text_internal(char *p, int p_max_size,
+ 	buff_in[0] = 0;
+ #endif /* HAVE_ICONV */
+ 
++	if(! p) return;
++
+ 	p[0] = 0;
+ 	obj = root.next;
+ 	while (obj && p_max_size > 0) {
+@@ -1330,7 +1328,7 @@ void generate_text_internal(char *p, int p_max_size,
+ 					DO_JUMP;
+ 				} else if (spc) {
+ 					*spc = '\0';
+-					if (check_contains(obj->data.s, spc + 1))
++					if (!check_contains(obj->data.s, spc + 1))
+ 						DO_JUMP;
+ 					*spc = ' ';
+ 				}
+@@ -1503,6 +1501,15 @@ void generate_text_internal(char *p, int p_max_size,
+ 			OBJ(nodename) {
+ 				snprintf(p, p_max_size, "%s", cur->uname_s.nodename);
+ 			}
++			OBJ(nodename_short) {
++				char *pos;
++				pos = strstr(cur->uname_s.nodename, ".");
++				if(pos != NULL) {
++					snprintf(p, MIN(pos-cur->uname_s.nodename+1, p_max_size), "%s", cur->uname_s.nodename);
++				} else {
++					snprintf(p, p_max_size, "%s", cur->uname_s.nodename);
++				}
++			}
+ 			OBJ(outlinecolor) {
+ 				new_outline(p, obj->data.l);
+ 			}
+@@ -2173,7 +2180,6 @@ void generate_text_internal(char *p, int p_max_size,
+ 			/* we have four different types of top (top, top_mem,
+ 			 * top_time and top_io). To avoid having almost-same code four
+ 			 * times, we have this special handler. */
+-#ifdef __linux__
+ 			break;
+ 			case OBJ_top:
+ 			case OBJ_top_mem:
+@@ -2182,7 +2188,6 @@ void generate_text_internal(char *p, int p_max_size,
+ 			case OBJ_top_io:
+ #endif
+ 				print_top(obj, p, p_max_size);
+-#endif /* __linux__ */
+ 			OBJ(tail) {
+ 				print_tailhead("tail", obj, p, p_max_size);
+ 			}
+@@ -2375,13 +2380,7 @@ void generate_text_internal(char *p, int p_max_size,
+ #ifdef HAVE_ICONV
+ 			iconv_convert(&a, buff_in, p, p_max_size);
+ #endif /* HAVE_ICONV */
+-			if (obj->type != OBJ_text && obj->type != OBJ_execp && obj->type != OBJ_execpi
+-#ifdef HAVE_LUA
+-					&& obj->type != OBJ_lua && obj->type != OBJ_lua_parse
+-#endif /* HAVE_LUA */
+-					) {
+-				substitute_newlines(p, a - 2);
+-			}
++			substitute_newlines(p, a - 2);
+ 			p += a;
+ 			p_max_size -= a;
+ 			(*p) = 0;
+@@ -3119,36 +3118,49 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied)
+ 						if (seconds != 0) {
+ 							timeunits = seconds / 86400; seconds %= 86400;
+ 							if (timeunits > 0) {
+-								asprintf(&tmp_day_str, "%dd", timeunits);
++								if (asprintf(&tmp_day_str, "%dd", timeunits) < 0) {
++									tmp_day_str = 0;
++								}
+ 							} else {
+ 								tmp_day_str = strdup("");
+ 							}
+ 							timeunits = seconds / 3600; seconds %= 3600;
+ 							if (timeunits > 0) {
+-								asprintf(&tmp_hour_str, "%dh", timeunits);
++								if (asprintf(&tmp_hour_str, "%dh", timeunits) < 0) {
++									tmp_day_str = 0;
++								}
+ 							} else {
+ 								tmp_hour_str = strdup("");
+ 							}
+ 							timeunits = seconds / 60; seconds %= 60;
+ 							if (timeunits > 0) {
+-								asprintf(&tmp_min_str, "%dm", timeunits);
++								if (asprintf(&tmp_min_str, "%dm", timeunits) < 0) {
++									tmp_min_str = 0;
++								}
+ 							} else {
+ 								tmp_min_str = strdup("");
+ 							}
+ 							if (seconds > 0) {
+-								asprintf(&tmp_sec_str, "%ds", seconds);
++								if (asprintf(&tmp_sec_str, "%ds", seconds) < 0) {
++									tmp_sec_str = 0;
++								}
+ 							} else {
+ 								tmp_sec_str = strdup("");
+ 							}
+-							asprintf(&tmp_str, "%s%s%s%s", tmp_day_str, tmp_hour_str, tmp_min_str, tmp_sec_str);
+-							free(tmp_day_str); free(tmp_hour_str); free(tmp_min_str); free(tmp_sec_str);
++							if (asprintf(&tmp_str, "%s%s%s%s", tmp_day_str,
++										tmp_hour_str, tmp_min_str, tmp_sec_str) < 0) {
++								tmp_str = 0;
++							}
++#define FREE(a) if ((a)) free((a));
++							FREE(tmp_day_str); FREE(tmp_hour_str); FREE(tmp_min_str); FREE(tmp_sec_str);
+ 						} else {
+-							asprintf(&tmp_str, "Range not possible"); // should never happen, but better safe then sorry
++							tmp_str = strdup("Range not possible"); /* should never happen, but better safe then sorry */
+ 						}
+ 						cur_x += (w / 2) - (font_ascent() * (strlen(tmp_str) / 2));
+ 						cur_y += font_h / 2;
+ 						draw_string(tmp_str);
+-						free(tmp_str);
++						FREE(tmp_str);
++#undef FREE
+ 						cur_x = tmp_x;
+ 						cur_y = tmp_y;
+ 					}
+@@ -3974,11 +3986,39 @@ static void reload_config(void)
+ 	initialisation(argc_copy, argv_copy);
+ }
+ 
+-void clean_up(void *memtofree1, void* memtofree2)
+-{
+-	int i;
++#ifdef X11
++void clean_up_x11() {
++	if(window_created == 1) {
++		XClearArea(display, window.window, text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width,
++			text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width,
++			text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
++			text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2, 0);
++	}
++	destroy_window();
++	free_fonts();
++	fonts = NULL;
++	if(x11_stuff.region) {
++		XDestroyRegion(x11_stuff.region);
++		x11_stuff.region = NULL;
++	}
++	if(display) {
++		XCloseDisplay(display);
++		display = NULL;
++	}
++	if(info.x11.desktop.all_names) {
++		free(info.x11.desktop.all_names);
++		info.x11.desktop.all_names = NULL;
++	}
++	if (info.x11.desktop.name) {
++		free(info.x11.desktop.name);
++		info.x11.desktop.name = NULL;
++	}
++	x_initialised = NO;
++}
++#endif
+ 
+-	free_update_callbacks();
++void clean_up_without_threads(void *memtofree1, void* memtofree2) {
++	int i;
+ 
+ #ifdef NCURSES
+ 	if(output_methods & TO_NCURSES) {
+@@ -4001,29 +4041,7 @@ void clean_up(void *memtofree1, void* memtofree2)
+ 	}
+ #ifdef X11
+ 	if (x_initialised == YES) {
+-		if(window_created == 1) {
+-			XClearArea(display, window.window, text_start_x - window.border_inner_margin - window.border_outer_margin - window.border_width,
+-				text_start_y - window.border_inner_margin - window.border_outer_margin - window.border_width,
+-				text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2,
+-				text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2, 0);
+-		}
+-		destroy_window();
+-		free_fonts();
+-		if(x11_stuff.region) {
+-			XDestroyRegion(x11_stuff.region);
+-			x11_stuff.region = NULL;
+-		}
+-		XCloseDisplay(display);
+-		display = NULL;
+-		if(info.x11.desktop.all_names) {
+-			free(info.x11.desktop.all_names);
+-			info.x11.desktop.all_names = NULL;
+-		}
+-		if (info.x11.desktop.name) {
+-			free(info.x11.desktop.name);
+-			info.x11.desktop.name = NULL;
+-		}
+-		x_initialised = NO;
++		clean_up_x11();
+ 	}else{
+ 		free(fonts);	//in set_default_configurations a font is set but not loaded
+ 		font_count = -1;
+@@ -4097,6 +4115,12 @@ void clean_up(void *memtofree1, void* memtofree2)
+ 	}
+ }
+ 
++void clean_up(void *memtofree1, void* memtofree2)
++{
++	free_update_callbacks();
++	clean_up_without_threads(memtofree1, memtofree2);
++}
++
+ static int string_to_bool(const char *s)
+ {
+ 	if (!s) {
+@@ -4200,9 +4224,7 @@ static void set_default_configurations(void)
+ #ifdef IOSTATS
+ 	top_io = 0;
+ #endif
+-#ifdef __linux__
+ 	top_running = 0;
+-#endif
+ #ifdef MPD
+ 	mpd_env_host = getenv("MPD_HOST");
+ 	mpd_env_port = getenv("MPD_PORT");
+@@ -4252,6 +4274,9 @@ static void set_default_configurations(void)
+ 	output_methods = TO_STDOUT;
+ #endif
+ #ifdef X11
++#ifdef BUILD_XFT
++	use_xft = 0;
++#endif
+ 	show_graph_scale = 0;
+ 	show_graph_range = 0;
+ 	draw_shades = 1;
+@@ -4282,11 +4307,11 @@ static void set_default_configurations(void)
+ 	text_alignment = BOTTOM_LEFT;
+ 	info.x11.monitor.number = 1;
+ 	info.x11.monitor.current = 0;
+-	info.x11.desktop.current = 1; 
++	info.x11.desktop.current = 1;
+ 	info.x11.desktop.number = 1;
+ 	info.x11.desktop.nitems = 0;
+-	info.x11.desktop.all_names = NULL; 
+-	info.x11.desktop.name = NULL; 
++	info.x11.desktop.all_names = NULL;
++	info.x11.desktop.name = NULL;
+ #endif /* X11 */
+ 
+ 	free_templates();
+@@ -4518,13 +4543,13 @@ void setalignment(int* ltext_alignment, unsigned int windowtype, const char* val
+ 		int a = string_to_alignment(value);
+ 
+ 		if (a <= 0) {
+-			if(setbyconffile == true) {
++			if (setbyconffile) {
+ 				CONF_ERR;
+ 			} else NORM_ERR("'%s' is not a alignment setting", value);
+ 		} else {
+ 			*ltext_alignment = a;
+ 		}
+-	} else if(setbyconffile == true) {
++	} else if (setbyconffile) {
+ 		CONF_ERR;
+ 	}
+ }
+@@ -4552,15 +4577,12 @@ char load_config_file(const char *f)
+ 
+ #ifdef X11
+ 		CONF2("out_to_x") {
+-			/* don't listen if X is already initialised or
+-			 * if we already know we don't want it */
+-			if(x_initialised != YES) {
+-				if (string_to_bool(value)) {
+-					output_methods &= TO_X;
+-				} else {
+-					output_methods &= ~TO_X;
+-					x_initialised = NEVER;
+-				}
++			if (string_to_bool(value)) {
++				output_methods &= TO_X;
++			} else {
++				clean_up_x11();
++				output_methods &= ~TO_X;
++				x_initialised = NEVER;
+ 			}
+ 		}
+ 		CONF("display") {
+@@ -4573,7 +4595,7 @@ char load_config_file(const char *f)
+ 			}
+ 		}
+ 		CONF("alignment") {
+-			setalignment(&text_alignment, window.type, value, f, line, true);
++			setalignment(&text_alignment, window.type, value, f, line, 1);
+ 		}
+ 		CONF("background") {
+ 			fork_to_background = string_to_bool(value);
+@@ -4609,7 +4631,7 @@ char load_config_file(const char *f)
+ 		CONF("border_width") {
+ 			if (value) {
+ 				window.border_width = strtol(value, 0, 0);
+-				if (window.border_width < 0) window.border_width = 0;
++				if (window.border_width < 1) window.border_width = 1;
+ 			} else {
+ 				CONF_ERR;
+ 			}
+@@ -5696,7 +5718,7 @@ void initialisation(int argc, char **argv) {
+ 				set_first_font(optarg);
+ 				break;
+ 			case 'a':
+-				setalignment(&text_alignment, window.type, optarg, NULL, 0, false);
++				setalignment(&text_alignment, window.type, optarg, NULL, 0, 0);
+ 				break;
+ 
+ #ifdef OWN_WINDOW
+@@ -5895,7 +5917,9 @@ int main(int argc, char **argv)
+ 				current_config = strndup(optarg, max_user_text);
+ 				break;
+ 			case 'q':
+-				freopen("/dev/null", "w", stderr);
++				if (!freopen("/dev/null", "w", stderr)) {
++					NORM_ERR("unable to redirect stderr to /dev/null");
++				}
+ 				break;
+ 			case 'h':
+ 				print_help(argv[0]);
+@@ -5929,7 +5953,13 @@ int main(int argc, char **argv)
+ #endif /* XOAP */
+ 
+ #ifdef HAVE_SYS_INOTIFY_H
+-	inotify_fd = inotify_init1(IN_NONBLOCK);
++	inotify_fd = inotify_init();
++	if(inotify_fd != -1) {
++		int fl;
++
++		fl = fcntl(inotify_fd, F_GETFL);
++		fcntl(inotify_fd, F_SETFL, fl | O_NONBLOCK);
++	}
+ #endif /* HAVE_SYS_INOTIFY_H */
+ 
+ 	initialisation(argc, argv);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-conky.h conky/files/patch-src-conky.h
--- /usr/ports/sysutils/conky.o/files/patch-src-conky.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-conky.h	2010-06-11 21:47:36.000000000 +0300
@@ -0,0 +1,21 @@
+--- src/conky.h.orig
++++ src/conky.h
+@@ -296,9 +296,7 @@ extern int top_cpu, top_mem, top_time;
+ #ifdef IOSTATS
+ extern int top_io;
+ #endif
+-#ifdef __linux__
+ extern int top_running;
+-#endif
+ 
+ /* defined in conky.c, needed by top.c */
+ extern int cpu_separate;
+@@ -308,7 +306,7 @@ extern int cpu_separate;
+ extern struct information info;
+ 
+ /* defined in users.c */
+-void update_users(void);
++int update_users(void);
+ void update_user_time(char *tty);
+ 
+ /* defined in conky.c */
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-core.c conky/files/patch-src-core.c
--- /usr/ports/sysutils/conky.o/files/patch-src-core.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-core.c	2010-06-11 21:47:50.000000000 +0300
@@ -0,0 +1,103 @@
+--- src/core.c.orig
++++ src/core.c
+@@ -171,8 +171,6 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 			NORM_ERR("acpiacadapter: arg is only used on linux");
+ #endif
+ 		}
+-		if(! obj->data.opaque)
+-			obj->data.opaque = strdup("AC");
+ #endif /* !__OpenBSD__ */
+ 	END OBJ(freq, 0)
+ 		get_cpu_count();
+@@ -279,8 +277,9 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		obj->data.s = strndup(bat, text_buffer_size);
+ 	END OBJ(battery_bar, 0)
+ 		char bat[64];
+-		if (arg) {
+-			arg = scan_bar(obj, arg);
++
++		arg = scan_bar(obj, arg);
++		if (arg && strlen(arg)>0) {
+ 			sscanf(arg, "%63s", bat);
+ 		} else {
+ 			strcpy(bat, "BAT0");
+@@ -372,18 +371,18 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		scan_loadgraph_arg(obj, arg);
+ #endif /* X11 */
+ 	END OBJ(diskio, &update_diskio)
+-		parse_diskio_arg(obj, arg);
++		parse_diskio_arg(obj, dev_name(arg));
+ 	END OBJ(diskio_read, &update_diskio)
+-		parse_diskio_arg(obj, arg);
++		parse_diskio_arg(obj, dev_name(arg));
+ 	END OBJ(diskio_write, &update_diskio)
+-		parse_diskio_arg(obj, arg);
++		parse_diskio_arg(obj, dev_name(arg));
+ #ifdef X11
+ 	END OBJ(diskiograph, &update_diskio)
+-		parse_diskiograph_arg(obj, arg);
++		parse_diskiograph_arg(obj, dev_name(arg));
+ 	END OBJ(diskiograph_read, &update_diskio)
+-		parse_diskiograph_arg(obj, arg);
++		parse_diskiograph_arg(obj, dev_name(arg));
+ 	END OBJ(diskiograph_write, &update_diskio)
+-		parse_diskiograph_arg(obj, arg);
++		parse_diskiograph_arg(obj, dev_name(arg));
+ #endif /* X11 */
+ 	END OBJ(color, 0)
+ #ifdef X11
+@@ -542,6 +541,11 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		parse_platform_sensor(obj, arg);
+ 	END OBJ_ARG(hwmon, 0, "hwmon needs argumanets")
+ 		parse_hwmon_sensor(obj, arg);
++	END OBJ(addr, &update_net_stats)
++		parse_net_stat_arg(obj, arg, free_at_crash);
++	END OBJ(addrs, &update_net_stats)
++		parse_net_stat_arg(obj, arg, free_at_crash);
++#endif /* __linux__ */
+ 	END
+ 	/* we have four different types of top (top, top_mem, top_time and top_io). To
+ 	 * avoid having almost-same code four times, we have this special
+@@ -552,12 +556,8 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		if (!parse_top_args(s, arg, obj)) {
+ 			return NULL;
+ 		}
+-	} else OBJ(addr, &update_net_stats)
+-		parse_net_stat_arg(obj, arg, free_at_crash);
+-	END OBJ(addrs, &update_net_stats)
+-		parse_net_stat_arg(obj, arg, free_at_crash);
+-#endif /* __linux__ */
+-	END OBJ_ARG(tail, 0, "tail needs arguments")
++	} else
++		OBJ_ARG(tail, 0, "tail needs arguments")
+ 		init_tailhead("tail", arg, obj, free_at_crash);
+ 	END OBJ_ARG(head, 0, "head needs arguments")
+ 		init_tailhead("head", arg, obj, free_at_crash);
+@@ -657,6 +657,7 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		obj->sub = malloc(sizeof(struct text_object));
+ 		extract_variable_text_internal(obj->sub, arg);
+ 	END OBJ(nodename, 0)
++	END OBJ(nodename_short, 0)
+ 	END OBJ_ARG(cmdline_to_pid, 0, "cmdline_to_pid needs a command line as argument")
+ 		scan_cmdline_to_pid_arg(obj, arg, free_at_crash);
+ 	END OBJ_ARG(pid_chroot, 0, "pid_chroot needs a pid as argument")
+@@ -786,9 +787,9 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
+ 		obj->sub = malloc(sizeof(struct text_object));
+ 		extract_variable_text_internal(obj->sub, arg);
+ 	END OBJ(processes, &update_total_processes)
+-#ifdef __linux__
+ 	END OBJ(running_processes, &update_top)
+ 		top_running = 1;
++#ifdef __linux__
+ 	END OBJ(threads, &update_threads)
+ 	END OBJ(running_threads, &update_stat)
+ #else
+@@ -1327,7 +1328,7 @@ int extract_variable_text_internal(struct text_object *retval, const char *const
+ 			strfold(p, 1);
+ 		} else if (*p == '#') {
+ 			char c;
+-			if (remove_comment(p, &c) && p > orig_p && c == '\n') {
++			if (remove_comment(p, &c) && p >= orig_p && c == '\n') {
+ 				/* if remove_comment removed a newline, we need to 'back up' with p */
+ 				p--;
+ 			}
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-diskio.c conky/files/patch-src-diskio.c
--- /usr/ports/sysutils/conky.o/files/patch-src-diskio.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-diskio.c	2010-06-11 21:43:59.000000000 +0300
@@ -0,0 +1,15 @@
+--- src/diskio.c.orig
++++ src/diskio.c
+@@ -76,12 +76,6 @@ struct diskio_stat *prepare_diskio_stat(const char *s)
+ 	if (!s)
+ 		return &stats;
+ 
+-#if defined(__FreeBSD__)
+-	if (strncmp(s, "/dev/", 5) == 0) {
+-		// supplied a /dev/device arg, so cut off the /dev part
+-		strncpy(device_name, s + 5, text_buffer_size);
+-	} else
+-#endif
+ 	strncpy(device_name, s, text_buffer_size);
+ 
+ 	snprintf(stat_name, text_buffer_size, "/dev/%s", device_name);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-diskio.h conky/files/patch-src-diskio.h
--- /usr/ports/sysutils/conky.o/files/patch-src-diskio.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-diskio.h	2010-06-11 21:48:49.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/diskio.h.orig
++++ src/diskio.h
+@@ -47,7 +47,7 @@ struct diskio_stat {
+ extern struct diskio_stat stats;
+ 
+ struct diskio_stat *prepare_diskio_stat(const char *);
+-void update_diskio(void);
++int update_diskio(void);
+ void clear_diskio_stats(void);
+ void update_diskio_values(struct diskio_stat *, unsigned int, unsigned int);
+ 
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-entropy.c conky/files/patch-src-entropy.c
--- /usr/ports/sysutils/conky.o/files/patch-src-entropy.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-entropy.c	2010-06-11 21:49:01.000000000 +0300
@@ -0,0 +1,15 @@
+--- src/entropy.c.orig
++++ src/entropy.c
+@@ -49,10 +49,11 @@ static struct {
+ 	.poolsize = 0,
+ };
+ 
+-void update_entropy(void)
++int update_entropy(void)
+ {
+ 	get_entropy_avail(&entropy.avail);
+ 	get_entropy_poolsize(&entropy.poolsize);
++	return 0;
+ }
+ 
+ void print_entropy_avail(struct text_object *obj, char *p, int p_max_size)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-entropy.h conky/files/patch-src-entropy.h
--- /usr/ports/sysutils/conky.o/files/patch-src-entropy.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-entropy.h	2010-06-11 21:49:13.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/entropy.h.orig
++++ src/entropy.h
+@@ -31,7 +31,7 @@
+ #ifndef _ENTROPY_H
+ #define _ENTROPY_H
+ 
+-void update_entropy(void);
++int update_entropy(void);
+ 
+ void print_entropy_avail(struct text_object *, char *, int);
+ void print_entropy_perc(struct text_object *, char *, int);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-exec.c conky/files/patch-src-exec.c
--- /usr/ports/sysutils/conky.o/files/patch-src-exec.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-exec.c	2010-06-11 21:49:41.000000000 +0300
@@ -0,0 +1,129 @@
+--- src/exec.c.orig
++++ src/exec.c
+@@ -140,7 +140,8 @@ static inline double get_barnum(char *buf)
+ 	return barnum;
+ }
+ 
+-static inline void read_exec(const char *data, char *buf, const int size)
++static inline void read_exec(const char *data, char *buf, const int size, const
++		char use_alarm)
+ {
+ 	FILE *fp;
+ 
+@@ -149,7 +150,7 @@ static inline void read_exec(const char *data, char *buf, const int size)
+ 	if (!data)
+ 		return;
+ 
+-	alarm(update_interval);
++	if (use_alarm) alarm(update_interval);
+ 	fp = pid_popen(data, "r", &childpid);
+ 	if(fp) {
+ 		int length;
+@@ -163,7 +164,7 @@ static inline void read_exec(const char *data, char *buf, const int size)
+ 	} else {
+ 		buf[0] = '\0';
+ 	}
+-	alarm(0);
++	if (use_alarm) alarm(0);
+ }
+ 
+ static void *threaded_exec(void *) __attribute__((noreturn));
+@@ -176,7 +177,7 @@ static void *threaded_exec(void *arg)
+ 
+ 	while (1) {
+ 		buff = malloc(text_buffer_size);
+-		read_exec(ed->cmd, buff, text_buffer_size);
++		read_exec(ed->cmd, buff, text_buffer_size, 0);
+ 		p2 = buff;
+ 		while (*p2) {
+ 			if (*p2 == '\001') {
+@@ -216,7 +217,7 @@ void scan_pre_exec_arg(struct text_object *obj, const char *arg)
+ 	char buf[2048];
+ 
+ 	obj->type = OBJ_text;
+-	read_exec(arg, buf, sizeof(buf));
++	read_exec(arg, buf, sizeof(buf), 1);
+ 	obj->data.s = strndup(buf, text_buffer_size);
+ }
+ 
+@@ -258,7 +259,7 @@ void scan_execgraph_arg(struct text_object *obj, const char *arg)
+ 
+ void print_exec(struct text_object *obj, char *p, int p_max_size)
+ {
+-	read_exec(obj->data.s, p, p_max_size);
++	read_exec(obj->data.s, p, p_max_size, 1);
+ 	remove_deleted_chars(p);
+ }
+ 
+@@ -271,7 +272,7 @@ void print_execp(struct text_object *obj, char *p, int p_max_size)
+ 	buf = malloc(text_buffer_size);
+ 	memset(buf, 0, text_buffer_size);
+ 
+-	read_exec(obj->data.s, buf, text_buffer_size);
++	read_exec(obj->data.s, buf, text_buffer_size, 1);
+ 
+ 	tmp_info = malloc(sizeof(struct information));
+ 	memcpy(tmp_info, &info, sizeof(struct information));
+@@ -292,7 +293,7 @@ void print_execi(struct text_object *obj, char *p, int p_max_size)
+ 	if (time_to_update(ed)) {
+ 		if (!ed->buffer)
+ 			ed->buffer = malloc(text_buffer_size);
+-		read_exec(ed->cmd, ed->buffer, text_buffer_size);
++		read_exec(ed->cmd, ed->buffer, text_buffer_size, 1);
+ 		ed->last_update = current_update_time;
+ 	}
+ 	snprintf(p, p_max_size, "%s", ed->buffer);
+@@ -365,7 +366,7 @@ void print_execgauge(struct text_object *obj, char *p, int p_max_size)
+ {
+ 	double barnum;
+ 
+-	read_exec(obj->data.s, p, p_max_size);
++	read_exec(obj->data.s, p, p_max_size, 1);
+ 	barnum = get_barnum(p); /*using the same function*/
+ 
+ 	if (barnum >= 0.0) {
+@@ -383,7 +384,7 @@ void print_execgraph(struct text_object *obj, char *p, int p_max_size)
+ 	if (!ed)
+ 		return;
+ 
+-	read_exec(ed->cmd, p, p_max_size);
++	read_exec(ed->cmd, p, p_max_size, 1);
+ 	barnum = get_barnum(p);
+ 
+ 	if (barnum > 0) {
+@@ -401,7 +402,7 @@ void print_execigraph(struct text_object *obj, char *p, int p_max_size)
+ 	if (time_to_update(ed)) {
+ 		double barnum;
+ 
+-		read_exec(ed->cmd, p, p_max_size);
++		read_exec(ed->cmd, p, p_max_size, 1);
+ 		barnum = get_barnum(p);
+ 
+ 		if (barnum >= 0.0) {
+@@ -423,7 +424,7 @@ void print_execigauge(struct text_object *obj, char *p, int p_max_size)
+ 	if (time_to_update(ed)) {
+ 		double barnum;
+ 
+-		read_exec(ed->cmd, p, p_max_size);
++		read_exec(ed->cmd, p, p_max_size, 1);
+ 		barnum = get_barnum(p);
+ 
+ 		if (barnum >= 0.0) {
+@@ -437,7 +438,7 @@ void print_execigauge(struct text_object *obj, char *p, int p_max_size)
+ void print_execbar(struct text_object *obj, char *p, int p_max_size)
+ {
+ 	double barnum;
+-	read_exec(obj->data.s, p, p_max_size);
++	read_exec(obj->data.s, p, p_max_size, 1);
+ 	barnum = get_barnum(p);
+ 
+ 	if (barnum >= 0.0) {
+@@ -455,7 +456,7 @@ void print_execibar(struct text_object *obj, char *p, int p_max_size)
+ 		return;
+ 
+ 	if (time_to_update(ed)) {
+-		read_exec(ed->cmd, p, p_max_size);
++		read_exec(ed->cmd, p, p_max_size, 1);
+ 		barnum = get_barnum(p);
+ 
+ 		if (barnum >= 0.0) {
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-freebsd.c conky/files/patch-src-freebsd.c
--- /usr/ports/sysutils/conky.o/files/patch-src-freebsd.c	2010-01-28 03:59:35.000000000 +0200
+++ conky/files/patch-src-freebsd.c	2010-06-11 21:49:56.000000000 +0300
@@ -1,7 +1,96 @@
---- src/freebsd.c.orig	2009-08-09 00:05:55.000000000 +0400
-+++ src/freebsd.c	2010-01-11 01:20:59.000000000 +0300
-@@ -284,40 +284,38 @@
+--- src/freebsd.c.orig
++++ src/freebsd.c
+@@ -67,7 +67,7 @@
+ #endif
+ 
+ __attribute__((gnu_inline)) inline void
+-proc_find_top(struct process **cpu, struct process **mem);
++proc_find_top(struct process **cpu, struct process **mem, struct process **time);
+ 
+ static short cpu_setup = 0;
+ 
+@@ -118,7 +118,7 @@ void prepare_update(void)
+ {
+ }
+ 
+-void update_uptime(void)
++int update_uptime(void)
+ {
+ 	int mib[2] = { CTL_KERN, KERN_BOOTTIME };
+ 	struct timeval boottime;
+@@ -133,6 +133,8 @@ void update_uptime(void)
+ 		fprintf(stderr, "Could not get uptime\n");
+ 		info.uptime = 0;
+ 	}
++
++	return 0;
+ }
+ 
+ int check_mount(char *s)
+@@ -150,7 +152,7 @@ int check_mount(char *s)
+ 	return 0;
+ }
+ 
+-void update_meminfo(void)
++int update_meminfo(void)
+ {
+ 	u_int total_pages, inactive_pages, free_pages;
+ 	unsigned long swap_avail, swap_free;
+@@ -182,9 +184,11 @@ void update_meminfo(void)
+ 		info.swap = 0;
+ 		info.swapfree = 0;
+ 	}
++
++	return 0;
+ }
+ 
+-void update_net_stats(void)
++int update_net_stats(void)
+ {
+ 	struct net_stat *ns;
+ 	double delta;
+@@ -195,11 +199,11 @@ void update_net_stats(void)
+ 	/* get delta */
+ 	delta = current_update_time - last_update_time;
+ 	if (delta <= 0.0001) {
+-		return;
++		return 0;
+ 	}
+ 
+ 	if (getifaddrs(&ifap) < 0) {
+-		return;
++		return 0;
+ 	}
+ 
+ 	for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
+@@ -255,18 +259,20 @@ void update_net_stats(void)
+ 	}
+ 
+ 	freeifaddrs(ifap);
++	return 0;
+ }
+ 
+-void update_total_processes(void)
++int update_total_processes(void)
+ {
+ 	int n_processes;
+ 
+ 	kvm_getprocs(kd, KERN_PROC_ALL, 0, &n_processes);
+ 
+ 	info.procs = n_processes;
++	return 0;
+ }
+ 
+-void update_running_processes(void)
++int update_running_processes(void)
+ {
+ 	struct kinfo_proc *p;
+ 	int n_processes;
+@@ -284,42 +290,41 @@ void update_running_processes(void)
+ 	}
+ 
  	info.run_procs = cnt;
++	return 0;
  }
  
 -struct cpu_load_struct {
@@ -39,12 +128,13 @@
  }
  
 -/* XXX: SMP support */
+-void update_cpu_usage(void)
 +struct cpu_info {
 +	long oldtotal;
 +	long oldused;
 +};
 +
- void update_cpu_usage(void)
++int update_cpu_usage(void)
  {
 +	int i, j = 0;
  	long used, total;
@@ -58,7 +148,7 @@
  
  	/* add check for !info.cpu_usage since that mem is freed on a SIGUSR1 */
  	if ((cpu_setup == 0) || (!info.cpu_usage)) {
-@@ -325,28 +323,68 @@
+@@ -327,31 +332,72 @@ void update_cpu_usage(void)
  		cpu_setup = 1;
  	}
  
@@ -69,14 +159,6 @@
 +		cpu = malloc(malloc_cpu_size);
 +		memset(cpu, 0, malloc_cpu_size);
 +		global_cpu = cpu;
-+	}
-+
-+	/* cpu[0] is overall stats, get it from separate sysctl */
-+	cp_len = CPUSTATES * sizeof(long);
-+	cp_time = malloc(cp_len);
-+
-+	if (sysctlbyname("kern.cp_time", cp_time, &cp_len, NULL, 0) < 0) {
-+		fprintf(stderr, "Cannot get kern.cp_time\n");
  	}
  
 -	fresh.load[0] = cp_time[CP_USER];
@@ -84,17 +166,23 @@
 -	fresh.load[2] = cp_time[CP_SYS];
 -	fresh.load[3] = cp_time[CP_IDLE];
 -	fresh.load[4] = cp_time[CP_IDLE];
--
++	/* cpu[0] is overall stats, get it from separate sysctl */
++	cp_len = CPUSTATES * sizeof(long);
++	cp_time = malloc(cp_len);
+ 
 -	used = fresh.load[0] + fresh.load[1] + fresh.load[2];
 -	total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3];
--
--	if ((total - oldtotal) != 0) {
--		info.cpu_usage[0] = ((double) (used - oldused)) /
--			(double) (total - oldtotal);
++	if (sysctlbyname("kern.cp_time", cp_time, &cp_len, NULL, 0) < 0) {
++		fprintf(stderr, "Cannot get kern.cp_time\n");
++	}
++
 +	total = 0;
 +	for (j = 0; j < CPUSTATES; j++)
 +		total += cp_time[j];
-+
+ 
+-	if ((total - oldtotal) != 0) {
+-		info.cpu_usage[0] = ((double) (used - oldused)) /
+-			(double) (total - oldtotal);
 +	used = total - cp_time[CP_IDLE];
 +
 +	if ((total - cpu[0].oldtotal) != 0) {
@@ -140,6 +228,144 @@
 +	}
 +
 +	free(cp_time);
++	return 0;
  }
  
- void update_load_average(void)
+-void update_load_average(void)
++int update_load_average(void)
+ {
+ 	double v[3];
+ 
+@@ -360,6 +406,8 @@ void update_load_average(void)
+ 	info.loadavg[0] = (double) v[0];
+ 	info.loadavg[1] = (double) v[1];
+ 	info.loadavg[2] = (double) v[2];
++
++	return 0;
+ }
+ 
+ double get_acpi_temperature(int fd)
+@@ -540,9 +588,10 @@ char get_freq(char *p_client_buffer, size_t client_buffer_size, const char *p_fo
+ 	return 1;
+ }
+ 
+-void update_top(void)
++int update_top(void)
+ {
+-	proc_find_top(info.cpu, info.memu);
++	proc_find_top(info.cpu, info.memu, info.time);
++	return 0;
+ }
+ 
+ #if 0
+@@ -600,7 +649,7 @@ cleanup:
+ }
+ #endif
+ 
+-void update_diskio(void)
++int update_diskio(void)
+ {
+ 	int devs_count, num_selected, num_selections, dn;
+ 	struct device_selection *dev_select = NULL;
+@@ -618,7 +667,7 @@ void update_diskio(void)
+ 
+ 	if (devstat_getdevs(NULL, &statinfo_cur) < 0) {
+ 		free(statinfo_cur.dinfo);
+-		return;
++		return 0;
+ 	}
+ 
+ 	devs_count = statinfo_cur.dinfo->numdevs;
+@@ -650,6 +699,7 @@ void update_diskio(void)
+ 	}
+ 
+ 	free(statinfo_cur.dinfo);
++	return 0;
+ }
+ 
+ /* While topless is obviously better, top is also not bad. */
+@@ -676,8 +726,15 @@ int comparemem(const void *a, const void *b)
+ 	}
+ }
+ 
++int comparetime(const void *va, const void *vb)
++{
++	struct process *a = (struct process *)va, *b = (struct process *)vb;
++
++	return b->total_cpu_time - a->total_cpu_time;
++}
++
+ __attribute__((gnu_inline)) inline void
+-proc_find_top(struct process **cpu, struct process **mem)
++proc_find_top(struct process **cpu, struct process **mem, struct process **time)
+ {
+ 	struct kinfo_proc *p;
+ 	int n_processes;
+@@ -701,6 +758,9 @@ proc_find_top(struct process **cpu, struct process **mem)
+ 			processes[j].amount = 100.0 * p[i].ki_pctcpu / FSCALE;
+ 			processes[j].vsize = p[i].ki_size;
+ 			processes[j].rss = (p[i].ki_rssize * getpagesize());
++			/* ki_runtime is in microseconds, total_cpu_time in centiseconds.
++			 * Therefore we divide by 10000. */
++			processes[j].total_cpu_time = p[i].ki_runtime / 10000;
+ 			j++;
+ 		}
+ 	}
+@@ -710,11 +770,8 @@ proc_find_top(struct process **cpu, struct process **mem)
+ 		struct process *tmp, *ttmp;
+ 
+ 		tmp = malloc(sizeof(struct process));
+-		tmp->pid = processes[i].pid;
+-		tmp->amount = processes[i].amount;
++		memcpy(tmp, &processes[i], sizeof(struct process));
+ 		tmp->name = strndup(processes[i].name, text_buffer_size);
+-		tmp->rss = processes[i].rss;
+-		tmp->vsize = processes[i].vsize;
+ 
+ 		ttmp = mem[i];
+ 		mem[i] = tmp;
+@@ -729,11 +786,8 @@ proc_find_top(struct process **cpu, struct process **mem)
+ 		struct process *tmp, *ttmp;
+ 
+ 		tmp = malloc(sizeof(struct process));
+-		tmp->pid = processes[i].pid;
+-		tmp->amount = processes[i].amount;
++		memcpy(tmp, &processes[i], sizeof(struct process));
+ 		tmp->name = strndup(processes[i].name, text_buffer_size);
+-		tmp->rss = processes[i].rss;
+-		tmp->vsize = processes[i].vsize;
+ 
+ 		ttmp = cpu[i];
+ 		cpu[i] = tmp;
+@@ -743,6 +797,22 @@ proc_find_top(struct process **cpu, struct process **mem)
+ 		}
+ 	}
+ 
++	qsort(processes, j - 1, sizeof(struct process), comparetime);
++	for (i = 0; i < 10 && i < n_processes; i++) {
++		struct process *tmp, *ttmp;
++
++		tmp = malloc(sizeof(struct process));
++		memcpy(tmp, &processes[i], sizeof(struct process));
++		tmp->name = strndup(processes[i].name, text_buffer_size);
++
++		ttmp = time[i];
++		time[i] = tmp;
++		if (ttmp != NULL) {
++			free(ttmp->name);
++			free(ttmp);
++		}
++	}
++
+ #if defined(FREEBSD_DEBUG)
+ 	printf("=====\nmem\n");
+ 	for (i = 0; i < 10; i++) {
+@@ -916,8 +986,3 @@ int get_entropy_poolsize(unsigned int *val)
+ 	(void)val;
+ 	return 1;
+ }
+-
+-/* empty stub so conky links */
+-void free_all_processes(void)
+-{
+-}
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-fs.c conky/files/patch-src-fs.c
--- /usr/ports/sysutils/conky.o/files/patch-src-fs.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-fs.c	2010-06-11 21:50:07.000000000 +0300
@@ -0,0 +1,26 @@
+--- src/fs.c.orig
++++ src/fs.c
+@@ -65,13 +65,13 @@ static void update_fs_stat(struct fs_stat *fs);
+ 
+ void get_fs_type(const char *path, char *result);
+ 
+-void update_fs_stats(void)
++int update_fs_stats(void)
+ {
+ 	unsigned i;
+ 	static double last_fs_update = 0.0;
+ 
+ 	if (current_update_time - last_fs_update < 13)
+-		return;
++		return 0;
+ 
+ 	for (i = 0; i < MAX_FS_STATS; ++i) {
+ 		if (fs_stats[i].set) {
+@@ -79,6 +79,7 @@ void update_fs_stats(void)
+ 		}
+ 	}
+ 	last_fs_update = current_update_time;
++	return 0;
+ }
+ 
+ void clear_fs_stats(void)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-fs.h conky/files/patch-src-fs.h
--- /usr/ports/sysutils/conky.o/files/patch-src-fs.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-fs.h	2010-06-11 21:50:19.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/fs.h.orig
++++ src/fs.h
+@@ -28,7 +28,7 @@ void print_fs_size(struct text_object *, char *, int);
+ void print_fs_used(struct text_object *, char *, int);
+ void print_fs_type(struct text_object *, char *, int);
+ 
+-void update_fs_stats(void);
++int update_fs_stats(void);
+ struct fs_stat *prepare_fs_stat(const char *path);
+ void clear_fs_stats(void);
+ 
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-i8k.c conky/files/patch-src-i8k.c
--- /usr/ports/sysutils/conky.o/files/patch-src-i8k.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-i8k.c	2010-06-11 21:51:01.000000000 +0300
@@ -0,0 +1,34 @@
+--- src/i8k.c.orig
++++ src/i8k.c
+@@ -53,7 +53,7 @@ struct {
+ #define PROC_I8K "/proc/i8k"
+ #define I8K_DELIM " "
+ static char *i8k_procbuf = NULL;
+-void update_i8k(void)
++int update_i8k(void)
+ {
+ 	FILE *fp;
+ 
+@@ -61,8 +61,13 @@ void update_i8k(void)
+ 		i8k_procbuf = (char *) malloc(128 * sizeof(char));
+ 	}
+ 	if ((fp = fopen(PROC_I8K, "r")) == NULL) {
+-		CRIT_ERR(NULL, NULL, "/proc/i8k doesn't exist! use insmod to make sure the kernel "
++		free(i8k_procbuf);
++		i8k_procbuf = NULL;
++		NORM_ERR("/proc/i8k doesn't exist! use insmod to make sure the kernel "
+ 			"driver is loaded...");
++		clean_up_without_threads(NULL, NULL);
++		free(current_mail_spool);
++		return 1;
+ 	}
+ 
+ 	memset(&i8k_procbuf[0], 0, 128);
+@@ -82,6 +87,7 @@ void update_i8k(void)
+ 	i8k.right_fan_rpm = strtok(NULL, I8K_DELIM);
+ 	i8k.ac_status = strtok(NULL, I8K_DELIM);
+ 	i8k.buttons_status = strtok(NULL, I8K_DELIM);
++	return 0;
+ }
+ 
+ static const char *fan_status_to_string(int status)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-i8k.h conky/files/patch-src-i8k.h
--- /usr/ports/sysutils/conky.o/files/patch-src-i8k.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-i8k.h	2010-06-11 21:51:15.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/i8k.h.orig
++++ src/i8k.h
+@@ -32,7 +32,7 @@
+ #ifndef _I8K_H
+ #define _I8K_H
+ 
+-void update_i8k(void);
++int update_i8k(void);
+ void print_i8k_left_fan_status(struct text_object *, char *, int);
+ void print_i8k_cpu_temp(struct text_object *, char *, int);
+ void print_i8k_right_fan_status(struct text_object *, char *, int);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-logging.h conky/files/patch-src-logging.h
--- /usr/ports/sysutils/conky.o/files/patch-src-logging.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-logging.h	2010-06-11 21:52:26.000000000 +0300
@@ -0,0 +1,20 @@
+--- src/logging.h.orig
++++ src/logging.h
+@@ -30,6 +30,7 @@
+ #include "mail.h"
+ 
+ void clean_up(void *memtofree1, void* memtofree2);
++void clean_up_without_threads(void *memtofree1, void* memtofree2);
+ 
+ #ifndef _LOGGING_H
+ #define _LOGGING_H
+@@ -44,6 +45,9 @@ void clean_up(void *memtofree1, void* memtofree2);
+ #define CRIT_ERR(memtofree1, memtofree2, ...) \
+ 	{ NORM_ERR(__VA_ARGS__); clean_up(memtofree1, memtofree2); free(current_mail_spool); exit(EXIT_FAILURE); }
+ 
++#define THREAD_CRIT_ERR(memtofree1, memtofree2, ...) \
++	{ NORM_ERR(__VA_ARGS__); clean_up_without_threads(memtofree1, memtofree2); free(current_mail_spool); return; }
++
+ /* debugging output */
+ extern int global_debug_level;
+ #define __DBGP(level, ...) \
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-mail.c conky/files/patch-src-mail.c
--- /usr/ports/sysutils/conky.o/files/patch-src-mail.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-mail.c	2010-06-11 21:52:37.000000000 +0300
@@ -0,0 +1,46 @@
+--- src/mail.c.orig
++++ src/mail.c
+@@ -61,6 +61,8 @@
+ #define POP3_TYPE 1
+ #define IMAP_TYPE 2
+ 
++#define MAXFOLDERSIZE 128
++
+ struct mail_s {			// for imap and pop3
+ 	unsigned long unseen;
+ 	unsigned long messages;
+@@ -74,7 +76,7 @@ struct mail_s {			// for imap and pop3
+ 	char user[128];
+ 	char pass[128];
+ 	char command[1024];
+-	char folder[128];
++	char folder[MAXFOLDERSIZE];
+ 	timed_thread *p_timed_thread;
+ 	char secure;
+ };
+@@ -465,17 +467,20 @@ struct mail_s *parse_mail_args(char type, const char *arg)
+ 	if (type == IMAP_TYPE) {
+ 		tmp = strstr(arg, "-f ");
+ 		if (tmp) {
+-			int len = 1024;
++			int len = MAXFOLDERSIZE-1;
+ 			tmp += 3;
+ 			if (tmp[0] == '\'') {
+ 				len = strstr(tmp + 1, "'") - tmp - 1;
+-				if (len > 1024) {
+-					len = 1024;
++				if (len > MAXFOLDERSIZE-1) {
++					len = MAXFOLDERSIZE-1;
+ 				}
++				tmp++;
+ 			}
+-			strncpy(mail->folder, tmp + 1, len);
++			strncpy(mail->folder, tmp, len);
++			mail->folder[len-1] = 0;
+ 		} else {
+-			strncpy(mail->folder, "INBOX", 128);	// default imap inbox
++			strncpy(mail->folder, "INBOX", MAXFOLDERSIZE-1);	// default imap inbox
++			mail->folder[MAXFOLDERSIZE-1] = 0;
+ 		}
+ 	}
+ 	tmp = strstr(arg, "-e ");
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-mixer.c conky/files/patch-src-mixer.c
--- /usr/ports/sysutils/conky.o/files/patch-src-mixer.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-mixer.c	2010-06-11 21:52:49.000000000 +0300
@@ -0,0 +1,196 @@
+--- src/mixer.c.orig
++++ src/mixer.c
+@@ -38,9 +38,6 @@
+ #include <ctype.h>
+ 
+ 
+-#ifdef MIXER_IS_ALSA
+-#include <alsa/asoundlib.h>
+-#else
+ #ifdef HAVE_LINUX_SOUNDCARD_H
+ #include <linux/soundcard.h>
+ #else
+@@ -50,173 +47,12 @@
+ #include <sys/soundcard.h>
+ #endif /* __OpenBSD__ */
+ #endif /* HAVE_LINUX_SOUNDCARD_H */
+-#endif /* MIXER_IS_ALSA */
+ 
+ #define MIXER_DEV "/dev/mixer"
+ 
+-#ifdef MIXER_IS_ALSA
+-#define MAX_MIXERS 8
+-struct mixer_control {
+-	char name[64];
+-	snd_mixer_t *mixer;
+-	snd_mixer_selem_id_t *sid;
+-	snd_mixer_elem_t *elem;
+-	long vol_min, vol_max;
+-};
+-
+-static struct mixer_control mixer_data[MAX_MIXERS];
+-int num_mixers = 0;
+-static char soundcard[64] = "default";
+-#else
+ static int mixer_fd;
+ static const char *devs[] = SOUND_DEVICE_NAMES;
+-#endif
+-
+-#ifdef MIXER_IS_ALSA
+-static int parse_simple_id(const char *str, snd_mixer_selem_id_t *sid)
+-{
+-	int c, size;
+-	char buf[128];
+-	char *ptr = buf;
+-
+-	while (*str == ' ' || *str == '\t')
+-		str++;
+-	if (!(*str))
+-		return -EINVAL;
+-	size = 1;	/* for '\0' */
+-	if (*str != '"' && *str != '\'') {
+-		while (*str && *str != ',') {
+-			if (size < (int)sizeof(buf)) {
+-				*ptr++ = *str;
+-				size++;
+-			}
+-			str++;
+-		}
+-	} else {
+-		c = *str++;
+-		while (*str && *str != c) {
+-			if (size < (int)sizeof(buf)) {
+-				*ptr++ = *str;
+-				size++;
+-			}
+-			str++;
+-		}
+-		if (*str == c)
+-			str++;
+-	}
+-	if (*str == '\0') {
+-		snd_mixer_selem_id_set_index(sid, 0);
+-		*ptr = 0;
+-		goto _set;
+-	}
+-	if (*str != ',')
+-		return -EINVAL;
+-	*ptr = 0;	/* terminate the string */
+-	str++;
+-	if (!isdigit(*str))
+-		return -EINVAL;
+-	snd_mixer_selem_id_set_index(sid, atoi(str));
+-       _set:
+-	snd_mixer_selem_id_set_name(sid, buf);
+-	return 0;
+-}
+-
+-int mixer_init (const char *name)
+-{
+-	/* from amixer.c, replaced -EINVAL with -1 */
+-	int i, err;
+-	if (!name)
+-		name = "Master";
+-
+-	for (i = 0; i < num_mixers; i++) {
+-		if (!strcasecmp (mixer_data[i].name, name)) {
+-			return i;
+-		}
+-	}
+-	if (i == MAX_MIXERS) {
+-		fprintf (stderr, "max mixers (%d) reached\n", MAX_MIXERS);
+-		return -1;
+-	};
+-
+-	num_mixers++;
+-#define data mixer_data[i]
+-
+-	strncpy (mixer_data[i].name, name, 63);
+-	mixer_data[i].name[63] = '\0';
+-	snd_mixer_selem_id_alloca (&data.sid);
+-	data.mixer = NULL;
+-	if (parse_simple_id (name, data.sid) < 0) {
+-		fprintf (stderr, "Wrong mixer identifier: %s\n", name);
+-		return -1;
+-	}
+-	if ((err = snd_mixer_open (&data.mixer, 0)) < 0) {
+-		fprintf (stderr, "snd_mixer_open: %s\n", snd_strerror (err));
+-		return -1;
+-	}
+-	if ((err = snd_mixer_attach (data.mixer, soundcard)) < 0) {
+-		fprintf (stderr, "snd_mixer_attach: %s\n", snd_strerror (err));
+-		return -1;
+-	}
+-	if ((err = snd_mixer_selem_register (data.mixer, NULL, NULL)) < 0) {
+-		fprintf (stderr, "snd_mixer_selem_register: %s\n",
+-			 snd_strerror (err));
+-		return -1;
+-	}
+-	if ((err = snd_mixer_load (data.mixer)) < 0) {
+-		fprintf (stderr, "snd_mixer_load: %s\n", snd_strerror (err));
+-		return -1;
+-	}
+-	if (!(data.elem = snd_mixer_find_selem (data.mixer, data.sid))) {
+-		fprintf (stderr, "snd_mixer_find_selem (\"%s\", %i)\n",
+-			 snd_mixer_selem_id_get_name (data.sid),
+-			 snd_mixer_selem_id_get_index (data.sid));
+-		return -1;
+-	}
+-	snd_mixer_selem_get_playback_volume_range(data.elem, &data.vol_min, &data.vol_max);
+-	return i;
+-}
+-static int mixer_get_avg (int i)
+-{
+-	long val;
+-
+-	snd_mixer_handle_events (data.mixer);
+-	snd_mixer_selem_get_playback_volume (data.elem, 0, &val);
+-	if(data.vol_max != 100) {
+-		float avgf = ((float)val / data.vol_max) * 100;
+-		int avg = (int)avgf;
+-		return (avgf - avg < 0.5) ? avg : avg + 1;
+-	}
+-	return (int) val;
+-}
+-static int mixer_get_left (int i)
+-{
+-  /* stub */
+-  return mixer_get_avg (i);
+-}
+-static int mixer_get_right (int i)
+-{
+-  /* stub */
+-  return mixer_get_avg (i);
+-}
+-int mixer_to_255(int i, int x)
+-{
+-  return (x-data.vol_min)*255/(data.vol_max-data.vol_min);
+-}
+-int mixer_is_mute(int i)
+-{
+-	snd_mixer_handle_events (data.mixer);
+-	if (snd_mixer_selem_has_playback_switch (data.elem)) {
+-		int val, err;
+-		if ((err = snd_mixer_selem_get_playback_switch(data.elem, 0, &val)) < 0)
+-			fprintf (stderr, "playback_switch: %s\n", snd_strerror (err));
+-		return !val;
+-	} else {
+-		return !mixer_get_avg(i);
+-	}
+-}
+-#undef data
+ 
+-#else /* MIXER_IS_ALSA */
+ int mixer_init(const char *name)
+ {
+ 	unsigned int i;
+@@ -281,8 +117,7 @@ int mixer_is_mute(int i)
+ 	return !mixer_get(i);
+ }
+ 
+-#define mixer_to_255(i, x) x
+-#endif /* MIXER_IS_ALSA */
++#define mixer_to_255(i, x) x * 2.55
+ 
+ void parse_mixer_arg(struct text_object *obj, const char *arg)
+ {
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-moc.c conky/files/patch-src-moc.c
--- /usr/ports/sysutils/conky.o/files/patch-src-moc.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-moc.c	2010-06-11 21:52:58.000000000 +0300
@@ -0,0 +1,12 @@
+--- src/moc.c.orig
++++ src/moc.c
+@@ -133,7 +133,8 @@ static int run_moc_thread(double interval)
+ 	return 0;
+ }
+ 
+-void update_moc(void)
++int update_moc(void)
+ {
+ 	run_moc_thread(info.music_player_interval * 100000);
++	return 0;
+ }
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-moc.h conky/files/patch-src-moc.h
--- /usr/ports/sysutils/conky.o/files/patch-src-moc.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-moc.h	2010-06-11 21:53:09.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/moc.h.orig
++++ src/moc.h
+@@ -40,7 +40,7 @@ struct moc_s {
+ };
+ extern struct moc_s moc;
+ 
+-void update_moc(void);
++int update_moc(void);
+ void free_moc(void);
+ 
+ #endif /* MOC_H_ */
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-mpd.c conky/files/patch-src-mpd.c
--- /usr/ports/sysutils/conky.o/files/patch-src-mpd.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-mpd.c	2010-06-11 21:53:19.000000000 +0300
@@ -0,0 +1,30 @@
+--- src/mpd.c.orig
++++ src/mpd.c
+@@ -113,23 +113,24 @@ void free_mpd(void)
+ 
+ static void *update_mpd_thread(void *) __attribute__((noreturn));
+ 
+-void update_mpd(void)
++int update_mpd(void)
+ {
+ 	int interval;
+ 	static timed_thread *thread = NULL;
+ 
+ 	if (thread)
+-		return;
++		return 0;
+ 
+ 	interval = info.music_player_interval * 1000000;
+ 	thread = timed_thread_create(&update_mpd_thread, &thread, interval);
+ 	if (!thread) {
+ 		NORM_ERR("Failed to create MPD timed thread");
+-		return;
++		return 0;
+ 	}
+ 	timed_thread_register(thread, &thread);
+ 	if (timed_thread_run(thread))
+ 		NORM_ERR("Failed to run MPD timed thread");
++	return 0;
+ }
+ 
+ /* stringMAXdup dups at most text_buffer_size bytes */
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-mpd.h conky/files/patch-src-mpd.h
--- /usr/ports/sysutils/conky.o/files/patch-src-mpd.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-mpd.h	2010-06-11 21:53:31.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/mpd.h.orig
++++ src/mpd.h
+@@ -31,7 +31,7 @@ int mpd_set_port(const char *);
+ void init_mpd(void);
+ struct mpd_s *mpd_get_info(void);
+ void free_mpd(void);
+-void update_mpd(void);
++int update_mpd(void);
+ 
+ void print_mpd_elapsed(struct text_object *, char *, int);
+ void print_mpd_length(struct text_object *, char *, int);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-net_stat.c conky/files/patch-src-net_stat.c
--- /usr/ports/sysutils/conky.o/files/patch-src-net_stat.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-net_stat.c	2010-06-11 21:53:45.000000000 +0300
@@ -0,0 +1,28 @@
+--- src/net_stat.c.orig
++++ src/net_stat.c
+@@ -400,7 +400,7 @@ void free_dns_data(void)
+ 	memset(&dns_data, 0, sizeof(dns_data));
+ }
+ 
+-void update_dns_data(void)
++int update_dns_data(void)
+ {
+ 	FILE *fp;
+ 	char line[256];
+@@ -416,7 +416,7 @@ void update_dns_data(void)
+ 	free_dns_data();
+ 
+ 	if ((fp = fopen("/etc/resolv.conf", "r")) == NULL)
+-		return;
++		return 0;
+ 	while(!feof(fp)) {
+ 		if (fgets(line, 255, fp) == NULL) {
+ 			break;
+@@ -429,6 +429,7 @@ void update_dns_data(void)
+ 		}
+ 	}
+ 	fclose(fp);
++	return 0;
+ }
+ 
+ void parse_nameserver_arg(struct text_object *obj, const char *arg)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-net_stat.h conky/files/patch-src-net_stat.h
--- /usr/ports/sysutils/conky.o/files/patch-src-net_stat.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-net_stat.h	2010-06-11 21:53:57.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/net_stat.h.orig
++++ src/net_stat.h
+@@ -94,7 +94,7 @@ int interface_up(struct text_object *);
+ void free_if_up(struct text_object *);
+ 
+ void free_dns_data(void);
+-void update_dns_data(void);
++int update_dns_data(void);
+ void parse_nameserver_arg(struct text_object *, const char *);
+ void print_nameserver(struct text_object *, char *, int);
+ 
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-read_tcp.c conky/files/patch-src-read_tcp.c
--- /usr/ports/sysutils/conky.o/files/patch-src-read_tcp.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-read_tcp.c	2010-06-11 21:54:08.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/read_tcp.c.orig
++++ src/read_tcp.c
+@@ -87,7 +87,7 @@ void print_read_tcp(struct text_object *obj, char *p, int p_max_size)
+ 	addr.sin_family = AF_INET;
+ 	addr.sin_port = rtd->port;
+ 	memcpy(&addr.sin_addr, he->h_addr, he->h_length);
+-	if (!connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr))) {
++	if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr)) != 0) {
+ 		NORM_ERR("read_tcp: Couldn't create a connection");
+ 		return;
+ 	}
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-rss.c conky/files/patch-src-rss.c
--- /usr/ports/sysutils/conky.o/files/patch-src-rss.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-rss.c	2010-06-11 21:54:19.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/rss.c.orig
++++ src/rss.c
+@@ -67,7 +67,7 @@ static void rss_process_info(char *p, int p_max_size, char *uri, char *action, i
+ 		curloc->result = malloc(sizeof(PRSS));
+ 		memset(curloc->result, 0, sizeof(PRSS));
+ 		curloc->process_function = &prss_parse_data;
+-		ccurl_init_thread(curloc, interval);
++		ccurl_init_thread(curloc, interval * 60);
+ 		if (!curloc->p_timed_thread) {
+ 			NORM_ERR("error setting up RSS thread");
+ 		}
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-tcp-portmon.c conky/files/patch-src-tcp-portmon.c
--- /usr/ports/sysutils/conky.o/files/patch-src-tcp-portmon.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-tcp-portmon.c	2010-06-11 21:54:31.000000000 +0300
@@ -0,0 +1,14 @@
+--- src/tcp-portmon.c.orig
++++ src/tcp-portmon.c
+@@ -139,9 +139,10 @@ int tcp_portmon_action(struct text_object *obj, char *p, int p_max_size)
+ 	return 0;
+ }
+ 
+-void tcp_portmon_update(void)
++int tcp_portmon_update(void)
+ {
+ 	update_tcp_port_monitor_collection(pmc);
++	return 0;
+ }
+ 
+ int tcp_portmon_clear(void)
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-tcp-portmon.h conky/files/patch-src-tcp-portmon.h
--- /usr/ports/sysutils/conky.o/files/patch-src-tcp-portmon.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-tcp-portmon.h	2010-06-11 21:54:43.000000000 +0300
@@ -0,0 +1,11 @@
+--- src/tcp-portmon.h.orig
++++ src/tcp-portmon.h
+@@ -40,7 +40,7 @@ struct text_object;
+ 
+ int tcp_portmon_init(struct text_object *, const char *);
+ int tcp_portmon_action(struct text_object *, char *, int);
+-void tcp_portmon_update(void);
++int tcp_portmon_update(void);
+ int tcp_portmon_clear(void);
+ int tcp_portmon_set_max_connections(int);
+ void tcp_portmon_free(struct text_object *);
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-text_object.h conky/files/patch-src-text_object.h
--- /usr/ports/sysutils/conky.o/files/patch-src-text_object.h	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-text_object.h	2010-06-11 21:43:59.000000000 +0300
@@ -0,0 +1,10 @@
+--- src/text_object.h.orig
++++ src/text_object.h
+@@ -230,6 +230,7 @@ enum text_object_type {
+ #endif /* X11 */
+ 	OBJ_nameserver,
+ 	OBJ_nodename,
++	OBJ_nodename_short,
+ 	OBJ_nvidia,
+ 	OBJ_pre_exec,
+ 	OBJ_cmdline_to_pid,
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-top.c conky/files/patch-src-top.c
--- /usr/ports/sysutils/conky.o/files/patch-src-top.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-top.c	2010-06-11 21:55:02.000000000 +0300
@@ -0,0 +1,25 @@
+--- src/top.c.orig
++++ src/top.c
+@@ -880,16 +880,22 @@ int parse_top_args(const char *s, const char *arg, struct text_object *obj)
+ #else /* IOSTATS */
+ 			NORM_ERR("must be one of: name, cpu, pid, mem, time, mem_res, mem_vsize");
+ #endif /* IOSTATS */
++			free(td->s);
++			free(obj->data.opaque);
+ 			return 0;
+ 		}
+ 		if (n < 1 || n > 10) {
+ 			NORM_ERR("invalid num arg for top. Must be between 1 and 10.");
++			free(td->s);
++			free(obj->data.opaque);
+ 			return 0;
+ 		} else {
+ 			td->num = n - 1;
+ 		}
+ 	} else {
+ 		NORM_ERR("invalid argument count for top");
++		free(td->s);
++		free(obj->data.opaque);
+ 		return 0;
+ 	}
+ 	return 1;
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-users.c conky/files/patch-src-users.c
--- /usr/ports/sysutils/conky.o/files/patch-src-users.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-users.c	2010-06-11 21:55:13.000000000 +0300
@@ -0,0 +1,17 @@
+--- src/users.c.orig
++++ src/users.c
+@@ -157,7 +157,7 @@ void update_user_time(char *tty)
+ 	}
+ }
+ 
+-void update_users(void)
++int update_users(void)
+ {
+ 	struct information *current_info = &info;
+ 	char temp[BUFLEN] = "";
+@@ -221,4 +221,5 @@ void update_users(void)
+ 		current_info->users.times = malloc(text_buffer_size);
+ 		strncpy(current_info->users.times, "broken", text_buffer_size);
+ 	}
++	return 0;
+ }
diff -urNbB /usr/ports/sysutils/conky.o/files/patch-src-x11.c conky/files/patch-src-x11.c
--- /usr/ports/sysutils/conky.o/files/patch-src-x11.c	1970-01-01 02:00:00.000000000 +0200
+++ conky/files/patch-src-x11.c	2010-06-11 21:55:26.000000000 +0300
@@ -0,0 +1,37 @@
+--- src/x11.c.orig
++++ src/x11.c
+@@ -44,7 +44,7 @@
+ 
+ #ifdef XFT
+ #include <X11/Xft/Xft.h>
+-int use_xft = 0;
++int use_xft;
+ #endif
+ 
+ #ifdef HAVE_XDBE
+@@ -336,7 +336,7 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour,
+ 			XClassHint classHint;
+ 			XWMHints wmHint;
+ 			Atom xa;
+-			
++
+ #ifdef USE_ARGB
+ 			if (have_argb_visual) {
+ 				attrs.colormap = window.colourmap;
+@@ -775,13 +775,14 @@ void get_x11_desktop_info(Display *current_display, Atom atom)
+ 	}
+ }
+ 
+-void update_x11info(void)
++int update_x11info(void)
+ {
+ 	struct information *current_info = &info;
+ 	if (x_initialised != YES)
+-		return;
++		return 0;
+ 	current_info->x11.monitor.number = XScreenCount(display);
+ 	current_info->x11.monitor.current = XDefaultScreen(display);
++	return 0;
+ }
+ 
+ #ifdef OWN_WINDOW


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006111922.o5BJMjA5053874>