* Please see COPYING for details
*
* Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
- * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
+ * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
* (see AUTHORS)
* All rights reserved.
*
#include "diskio.h"
#include "entropy.h"
#include "exec.h"
+#include "i8k.h"
#include "proc.h"
#ifdef X11
#include "fonts.h"
#include <string.h>
#include <ctype.h>
+
/* strip a leading /dev/ if any, following symlinks first
*
* BEWARE: this function returns a pointer to static content
obj->data.l = get_x11_color(s);
} else
#endif /* X11 */
-#ifdef __OpenBSD__
- OBJ(freq, 0)
-#else
+#ifndef __OpenBSD__
OBJ(acpitemp, 0)
obj->data.i = open_acpi_temperature(arg);
END OBJ(acpiacadapter, 0)
- END OBJ(freq, 0)
+ if(arg) {
+#ifdef __linux__
+ if(strpbrk(arg, "/.") != NULL) {
+ /*
+ * a bit of paranoia. screen out funky paths
+ * i hope no device will have a '.' in its name
+ */
+ NORM_ERR("acpiacadapter: arg must not contain '/' or '.'");
+ } else
+ obj->data.opaque = strdup(arg);
+#else
+ NORM_ERR("acpiacadapter: arg is only used on linux");
+#endif
+ }
#endif /* !__OpenBSD__ */
+ END OBJ(freq, 0)
get_cpu_count();
if (!arg || !isdigit(arg[0]) || strlen(arg) >= 2 || atoi(&arg[0]) == 0
|| atoi(&arg[0]) > info.cpu_count) {
if (arg) {
sscanf(arg, "%63s", bat);
} else {
- strcpy(bat, "BAT0");
+ strcpy(bat, "bq27200-0");
}
obj->data.s = strndup(bat, text_buffer_size);
END OBJ(battery_short, 0)
if (arg) {
sscanf(arg, "%63s", bat);
} else {
- strcpy(bat, "BAT0");
+ strcpy(bat, "bq27200-0");
}
obj->data.s = strndup(bat, text_buffer_size);
END OBJ(battery_time, 0)
if (arg) {
sscanf(arg, "%63s", bat);
} else {
- strcpy(bat, "BAT0");
+ strcpy(bat, "bq27200-0");
}
obj->data.s = strndup(bat, text_buffer_size);
END OBJ(battery_percent, 0)
if (arg) {
sscanf(arg, "%63s", bat);
} else {
- strcpy(bat, "BAT0");
+ strcpy(bat, "bq27200-0");
}
obj->data.s = strndup(bat, text_buffer_size);
END OBJ(battery_bar, 0)
char bat[64];
+
+ arg = scan_bar(obj, arg);
+ if (arg && strlen(arg)>0) {
+ sscanf(arg, "%63s", bat);
+ } else {
+ strcpy(bat, "bq27200-0");
+ }
+ obj->data.s = strndup(bat, text_buffer_size);
+ END OBJ(battery_volts, 0)
+ char bat[64];
if (arg) {
- arg = scan_bar(obj, arg);
sscanf(arg, "%63s", bat);
} else {
- strcpy(bat, "BAT0");
+ strcpy(bat, "bq27200-0");
}
obj->data.s = strndup(bat, text_buffer_size);
+ END OBJ(battery_temp, 0)
+ char bat[64];
+ if (arg) {
+ sscanf(arg, "%63s", bat);
+ } else {
+ strcpy(bat, "bq27200-0");
+ }
+ obj->data.s = strndup(bat, text_buffer_size);
+ END OBJ(cell_radio_dbm, 0)
+ END OBJ(cell_radio_percent, 0)
#endif /* !__OpenBSD__ */
#if defined(__linux__)
END OBJ(cpu, &update_cpu_usage)
SCAN_CPU(arg, obj->data.i);
DBGP2("Adding $cpu for CPU %d", obj->data.i);
-#ifdef X11
END OBJ(cpugauge, &update_cpu_usage)
SCAN_CPU(arg, obj->data.i);
scan_gauge(obj, arg);
DBGP2("Adding $cpugauge for CPU %d", obj->data.i);
-#endif /* X11 */
END OBJ(cpubar, &update_cpu_usage)
SCAN_CPU(arg, obj->data.i);
scan_bar(obj, arg);
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
obj->data.s = scan_font(arg);
#endif /* X11 */
END OBJ(conky_version, 0)
+ obj->type = OBJ_text;
+ obj->data.s = strdup(VERSION);
END OBJ(conky_build_date, 0)
+ obj->type = OBJ_text;
+ obj->data.s = strdup(BUILD_DATE);
END OBJ(conky_build_arch, 0)
+ obj->type = OBJ_text;
+ obj->data.s = strdup(BUILD_ARCH);
END OBJ(downspeed, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
END OBJ(downspeedf, &update_net_stats)
scan_exec_arg(obj, arg);
END OBJ(execbar, 0)
scan_exec_arg(obj, arg);
-#ifdef X11
END OBJ(execgauge, 0)
scan_exec_arg(obj, arg);
+#ifdef X11
END OBJ(execgraph, 0)
scan_execgraph_arg(obj, arg);
#endif /* X11 */
#ifdef X11
END OBJ_ARG(execigraph, 0, "execigraph needs arguments")
scan_execgraph_arg(obj, arg);
+#endif /* X11 */
END OBJ_ARG(execigauge, 0, "execigauge needs arguments")
scan_execi_arg(obj, arg);
-#endif /* X11 */
END OBJ_ARG(execi, 0, "execi needs arguments")
scan_execi_arg(obj, arg);
END OBJ_ARG(execpi, 0, "execpi needs arguments")
parse_platform_sensor(obj, arg);
END OBJ_ARG(hwmon, 0, "hwmon needs argumanets")
parse_hwmon_sensor(obj, arg);
+ END OBJ(addrs, &update_net_stats)
+ parse_net_stat_arg(obj, arg, free_at_crash);
+#endif /* __linux__ */
+ END OBJ(addr, &update_net_stats)
+ parse_net_stat_arg(obj, arg, free_at_crash);
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
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);
obj->data.s = strndup(arg, text_buffer_size);
END OBJ_IF_ARG(if_mounted, 0, "if_mounted needs an argument")
obj->data.s = strndup(arg, text_buffer_size);
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
END OBJ_IF_ARG(if_running, &update_top, "if_running needs an argument")
top_running = 1;
obj->data.s = strndup(arg, text_buffer_size);
#else
END OBJ_IF_ARG(if_running, 0, "if_running needs an argument")
- char buf[256];
+ char buf[text_buffer_size];
- snprintf(buf, 256, "pidof %s >/dev/null", arg);
+ snprintf(buf, text_buffer_size, "pidof %s >/dev/null", arg);
obj->data.s = strndup(buf, text_buffer_size);
#endif
END OBJ(kernel, 0)
END OBJ(memfree, &update_meminfo)
END OBJ(memmax, &update_meminfo)
END OBJ(memperc, &update_meminfo)
-#ifdef X11
END OBJ(memgauge, &update_meminfo)
scan_gauge(obj, arg);
-#endif /* X11*/
END OBJ(membar, &update_meminfo)
scan_bar(obj, arg);
#ifdef X11
parse_mixer_arg(obj, arg);
END OBJ(mixerr, 0)
parse_mixer_arg(obj, arg);
-#ifdef X11
END OBJ(mixerbar, 0)
scan_mixer_bar(obj, arg);
END OBJ(mixerlbar, 0)
scan_mixer_bar(obj, arg);
END OBJ(mixerrbar, 0)
scan_mixer_bar(obj, arg);
-#endif
END OBJ_IF(if_mixer_mute, 0)
parse_mixer_arg(obj, arg);
#ifdef X11
END OBJ(desktop_number, &update_x11info)
END OBJ(desktop_name, &update_x11info)
#endif
+ END OBJ_ARG(format_time, 0, "format_time needs a pid as argument")
+ 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")
END OBJ_ARG(uid_name, 0, "uid_name needs a uid as argument")
obj->sub = malloc(sizeof(struct text_object));
extract_variable_text_internal(obj->sub, arg);
+ END OBJ_ARG(pid_read, 0, "pid_read needs a pid as argument")
+ obj->sub = malloc(sizeof(struct text_object));
+ extract_variable_text_internal(obj->sub, arg);
END OBJ_ARG(pid_vmpeak, 0, "pid_vmpeak needs a pid as argument")
obj->sub = malloc(sizeof(struct text_object));
extract_variable_text_internal(obj->sub, arg);
END OBJ_ARG(pid_vmpte, 0, "pid_vmpte needs a pid as argument")
obj->sub = malloc(sizeof(struct text_object));
extract_variable_text_internal(obj->sub, arg);
+ END OBJ_ARG(pid_write, 0, "pid_write needs a pid as argument")
+ 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
obj->data.s = strndup(arg, text_buffer_size);
END OBJ_ARG(smapi_bat_power, 0, "smapi_bat_power needs an argument")
obj->data.s = strndup(arg, text_buffer_size);
-#ifdef X11
END OBJ_ARG(smapi_bat_bar, 0, "smapi_bat_bar needs an argument")
int cnt;
if(sscanf(arg, "%i %n", &obj->data.i, &cnt) <= 0) {
obj->data.i = -1;
} else
arg = scan_bar(obj, arg + cnt);
-#endif /* X11 */
#endif /* IBM */
#ifdef MPD
#define mpd_set_maxlen(name) \
#ifdef X11
END OBJ(xmms2_bar, &update_xmms2)
scan_bar(obj, arg);
-#endif /* X11 */
+#endif
END OBJ(xmms2_smart, &update_xmms2)
END OBJ(xmms2_playlist, &update_xmms2)
END OBJ(xmms2_timesplayed, &update_xmms2)
#ifdef X11
END OBJ(audacious_bar, &update_audacious)
scan_bar(obj, arg);
-#endif /* X11 */
+#endif
#endif
#ifdef BMPX
END OBJ(bmpx_title, &update_bmpx)
} else {
CRIT_ERR(obj, free_at_crash, "lua_graph needs arguments: <function name> [height],[width] [gradient colour 1] [gradient colour 2] [scale] [-t] [-l]");
}
+#endif /* X11 */
END OBJ_ARG(lua_gauge, 0, "lua_gauge needs arguments: <height>,<width> <function name> [function parameters]")
arg = scan_gauge(obj, arg);
if (arg) {
} else {
CRIT_ERR(obj, free_at_crash, "lua_gauge needs arguments: <height>,<width> <function name> [function parameters]");
}
-#endif /* X11 */
#endif /* HAVE_LUA */
#ifdef HDDTEMP
END OBJ(hddtemp, &update_hddtemp)
char* buf = 0;
buf = scan_graph(obj, arg, 0);
if (buf) free(buf);
+#endif /* X11 */
END OBJ(apcupsd_loadgauge, &update_apcupsd)
scan_gauge(obj, arg);
-#endif /* X11 */
END OBJ(apcupsd_charge, &update_apcupsd)
END OBJ(apcupsd_timeleft, &update_apcupsd)
END OBJ(apcupsd_temp, &update_apcupsd)
END OBJ(apcupsd_lastxfer, &update_apcupsd)
#endif /* APCUPSD */
END {
- char buf[256];
+ char buf[text_buffer_size];
NORM_ERR("unknown variable %s", s);
obj->type = OBJ_text;
- snprintf(buf, 256, "${%s}", s);
+ snprintf(buf, text_buffer_size, "${%s}", s);
obj->data.s = strndup(buf, text_buffer_size);
}
#undef OBJ
s = orig_p = p;
if (strcmp(p, const_p)) {
- DBGP("replaced all templates in text: input is\n'%s'\noutput is\n'%s'", const_p, p);
+ DBGP2("replaced all templates in text: input is\n'%s'\noutput is\n'%s'", const_p, p);
} else {
- DBGP("no templates to replace");
+ DBGP2("no templates to replace");
}
memset(retval, 0, sizeof(struct text_object));
s = p;
if (*p != '$') {
- char buf[256];
+ char buf[text_buffer_size];
const char *var;
/* variable is either $foo or ${foo} */
}
/* copy variable to buffer */
- len = (p - s > 255) ? 255 : (p - s);
+ len = ((unsigned int) (p - s) > text_buffer_size - 1) ? text_buffer_size - 1 : (unsigned int) (p - s);
strncpy(buf, s, len);
buf[len] = '\0';
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--;
}
case OBJ_acpitemp:
close(data.i);
break;
+ case OBJ_acpiacadapter:
+ free(data.opaque);
+ break;
#endif /* !__OpenBSD__ */
#ifdef __linux__
case OBJ_i2c:
case OBJ_cmdline_to_pid:
free(data.s);
break;
+ case OBJ_format_time:
case OBJ_pid_environ:
case OBJ_pid_chroot:
case OBJ_pid_cmdline:
case OBJ_pid_egid:
case OBJ_pid_sgid:
case OBJ_pid_fsgid:
+ case OBJ_pid_read:
case OBJ_pid_vmpeak:
case OBJ_pid_vmsize:
case OBJ_pid_vmlck:
case OBJ_pid_vmexe:
case OBJ_pid_vmlib:
case OBJ_pid_vmpte:
+ case OBJ_pid_write:
case OBJ_gid_name:
if(obj->sub) {
free_text_objects(obj->sub, 1);
break;
case OBJ_exec:
case OBJ_execbar:
-#ifdef X11
case OBJ_execgauge:
+#ifdef X11
case OBJ_execgraph:
#endif
case OBJ_execp:
case OBJ_lua_bar:
#ifdef X11
case OBJ_lua_graph:
- case OBJ_lua_gauge:
#endif /* X11 */
+ case OBJ_lua_gauge:
free(data.s);
break;
#endif /* HAVE_LUA */
case OBJ_battery_time:
free(data.s);
break;
+ case OBJ_battery_volts:
+ free(data.s);
+ break;
+ case OBJ_battery_temp:
+ free(data.s);
+ break;
#endif /* !__OpenBSD__ */
case OBJ_execpi:
case OBJ_execi:
case OBJ_texeci:
#ifdef X11
case OBJ_execigraph:
- case OBJ_execigauge:
#endif /* X11 */
+ case OBJ_execigauge:
free_execi(obj);
break;
case OBJ_nameserver:
case OBJ_apcupsd_loadbar:
#ifdef X11
case OBJ_apcupsd_loadgraph:
- case OBJ_apcupsd_loadgauge:
#endif /* X11 */
+ case OBJ_apcupsd_loadgauge:
case OBJ_apcupsd_charge:
case OBJ_apcupsd_timeleft:
case OBJ_apcupsd_temp: