X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fconky.c;h=7f5ec0055ead4b037ccbd90b16b588be3cc98cf1;hb=72c9a740c77f3e73e2d104add63890ee7df13b43;hp=97a8a2a8fd156f7ed423295d3ed77f925958af25;hpb=72f5aa7ece3226cc0eb106d4fc2aa5886ed7bd6b;p=monky diff --git a/src/conky.c b/src/conky.c index 97a8a2a..7f5ec00 100644 --- a/src/conky.c +++ b/src/conky.c @@ -70,6 +70,9 @@ #ifdef XOAP #include #endif /* XOAP */ +#ifdef HAVE_CURL +#include +#endif /* local headers */ #include "core.h" @@ -166,9 +169,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 +270,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 +461,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 +510,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'; @@ -607,7 +606,7 @@ void human_readable(long long num, char *buf, int size) spaced_print(buf, size, "%d", 6, round_to_int(num)); return; } - if (short_units) { + if (short_units || llabs(num) < 1000LL) { width = 5; format = "%.*f%.1s"; } else { @@ -634,11 +633,11 @@ void human_readable(long long num, char *buf, int size) * adjusting the decimal part of the number. Sample output: * 123MiB * 23.4GiB - * 5.12B + * 5.12B * so the point of alignment resides between number and unit. The * upside of this is that there is minimal padding necessary, though * there should be a way to make alignment take place at the decimal - * dot (then with fixed width decimal part). + * dot (then with fixed width decimal part). * * Note the repdigits below: when given a precision value, printf() * rounds the float to it, not just cuts off the remaining digits. So @@ -765,6 +764,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) { @@ -878,6 +879,12 @@ void generate_text_internal(char *p, int p_max_size, OBJ(battery_time) { get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_TIME); } + OBJ(battery_volts) { + get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_VOLTS); + } + OBJ(battery_temp) { + get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_TEMP); + } OBJ(battery_percent) { percent_print(p, p_max_size, get_battery_perct(obj->data.s)); } @@ -887,6 +894,12 @@ void generate_text_internal(char *p, int p_max_size, OBJ(battery_short) { get_battery_short_status(p, p_max_size, obj->data.s); } + OBJ(cell_radio_dbm) { + get_dbus_stuff(p, p_max_size, DBUS_CELL_DBM); + } + OBJ(cell_radio_percent) { + get_dbus_stuff(p, p_max_size, DBUS_CELL_PERCENT); + } #endif /* __OpenBSD__ */ OBJ(buffers) { @@ -1330,7 +1343,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 +1516,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); } @@ -2062,9 +2084,11 @@ void generate_text_internal(char *p, int p_max_size, OBJ(xmms2_percent) { snprintf(p, p_max_size, "%2.0f", cur->xmms2.progress * 100); } +#ifdef X11 OBJ(xmms2_bar) { new_bar(obj, p, p_max_size, (int) (cur->xmms2.progress * 255.0f)); } +#endif /* X11 */ OBJ(xmms2_playlist) { snprintf(p, p_max_size, "%s", cur->xmms2.playlist); } @@ -2140,6 +2164,7 @@ void generate_text_internal(char *p, int p_max_size, snprintf(p, p_max_size, "%s", cur->audacious.items[AUDACIOUS_MAIN_VOLUME]); } +#ifdef X11 OBJ(audacious_bar) { double progress; @@ -2148,6 +2173,7 @@ void generate_text_internal(char *p, int p_max_size, atof(cur->audacious.items[AUDACIOUS_LENGTH_SECONDS]); new_bar(obj, p, p_max_size, (int) (progress * 255.0f)); } +#endif /* X11 */ #endif /* AUDACIOUS */ #ifdef BMPX @@ -2173,7 +2199,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 +2207,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); } @@ -2272,18 +2296,26 @@ void generate_text_internal(char *p, int p_max_size, } } } - OBJ(to_bytes) { + OBJ(to_bytes) {//commented code is original - not working when input value contains a decimal point char buf[max_user_text]; - long long bytes; + //long long bytes; + long double bytes; char unit[16]; // 16 because we can also have long names (like mega-bytes) generate_text_internal(buf, max_user_text, *obj->sub, cur); - if(sscanf(buf, "%lli%s", &bytes, unit) == 2 && strlen(unit) < 16){ - if(strncasecmp("b", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes); - else if(strncasecmp("k", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024); - else if(strncasecmp("m", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024); - else if(strncasecmp("g", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024 * 1024); - else if(strncasecmp("t", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024 * 1024 * 1024); +// if(sscanf(buf, "%lli%s", &bytes, unit) == 2 && strlen(unit) < 16){ +// if(strncasecmp("b", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes); +// else if(strncasecmp("k", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024); +// else if(strncasecmp("m", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024); +// else if(strncasecmp("g", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024 * 1024); +// else if(strncasecmp("t", unit, 1) == 0) snprintf(buf, max_user_text, "%lli", bytes * 1024 * 1024 * 1024 * 1024); +// } + if(sscanf(buf, "%Lf%s", &bytes, unit) == 2 && strlen(unit) < 16){ + if(strncasecmp("b", unit, 1) == 0) snprintf(buf, max_user_text, "%Lf", bytes); + else if(strncasecmp("k", unit, 1) == 0) snprintf(buf, max_user_text, "%Lf", bytes * 1024); + else if(strncasecmp("m", unit, 1) == 0) snprintf(buf, max_user_text, "%Lf", bytes * 1024 * 1024); + else if(strncasecmp("g", unit, 1) == 0) snprintf(buf, max_user_text, "%Lf", bytes * 1024 * 1024 * 1024); + else if(strncasecmp("t", unit, 1) == 0) snprintf(buf, max_user_text, "%Lf", bytes * 1024 * 1024 * 1024 * 1024); } snprintf(p, p_max_size, "%s", buf); } @@ -2295,7 +2327,7 @@ void generate_text_internal(char *p, int p_max_size, } #ifdef NVIDIA OBJ(nvidia) { - print_nvidia_value(obj, display, p, p_max_size); + print_nvidia_value(obj, p, p_max_size); } #endif /* NVIDIA */ #ifdef APCUPSD @@ -2375,9 +2407,10 @@ 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 + if (obj->type == OBJ_execp || obj->type == OBJ_execpi || obj->type + == OBJ_exec #ifdef HAVE_LUA - && obj->type != OBJ_lua && obj->type != OBJ_lua_parse + || obj->type == OBJ_lua || obj->type == OBJ_lua_parse #endif /* HAVE_LUA */ ) { substitute_newlines(p, a - 2); @@ -3075,12 +3108,14 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) ); } #endif /* DEBUG_lol */ - XSetForeground(display, window.gc, tmpcolour[ - (int)((float)(w - 2) - specials[special_index].graph[j] * - (w - 2) / (float)specials[special_index].graph_scale) - ]); + set_foreground_color(tmpcolour[ + (int)((float)(w - 2) - + specials[special_index].graph[j] + * (w - 2) / + (float)specials[special_index].graph_scale) + ]); } else { - XSetForeground(display, window.gc, tmpcolour[colour_idx++]); + set_foreground_color(tmpcolour[colour_idx++]); } } /* this is mugfugly, but it works */ @@ -3119,36 +3154,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; } @@ -3446,8 +3494,20 @@ static void clear_text(int exposures) { #ifdef HAVE_XDBE if (use_xdbe) { - /* The swap action is XdbeBackground, which clears */ +/* + The swap action is XdbeBackground, which clears return; +*/ + if (display && window.back_buffer) { // make sure these are !null + /* there is some extra space for borders and outlines */ + XFillRectangle(display, window.back_buffer, window.gc_back, + 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); + } + + } else #endif if (display && window.window) { // make sure these are !null @@ -3512,7 +3572,7 @@ static void main_loop(void) if(update_interval_bat != NOBATTERY && update_interval_bat != update_interval_old) { char buf[max_user_text]; - get_battery_short_status(buf, max_user_text, "BAT0"); + get_battery_short_status(buf, max_user_text, "bq27200-0"); //why is this even hardcoded here? oh well. if(buf[0] == 'D') { update_interval = update_interval_bat; } else { @@ -3585,6 +3645,20 @@ static void main_loop(void) draw_stuff(); /* redraw everything in our newly sized window */ XResizeWindow(display, window.window, window.width, window.height); /* resize window */ + fprintf(stderr, PACKAGE_NAME": resizing window to %d x %d\n",window.width,window.height); +#ifdef HAVE_XDBE + if (use_xdbe) { + XFreePixmap(display, window.back_buffer); + window.back_buffer = XCreatePixmap(display, window.window, + window.width, window.height, window.depth); + if (window.back_buffer != None) + window.drawable = window.back_buffer; + else { + window.drawable = window.window; + use_xdbe = 0; + } + } +#endif set_transparent_background(window.window, own_window_argb_value); #ifdef HAVE_XDBE /* swap buffers */ @@ -3710,7 +3784,21 @@ static void main_loop(void) window.window, &attrs)) { window.width = attrs.width; window.height = attrs.height; + fprintf(stderr, PACKAGE_NAME": x11? resized our window to %d x %d\n",window.width,window.height); } +#ifdef HAVE_XDBE + if (use_xdbe) { + XFreePixmap(display, window.back_buffer); + window.back_buffer = XCreatePixmap(display, window.window, + window.width, window.height, window.depth); + if (window.back_buffer != None) + window.drawable = window.back_buffer; + else { + window.drawable = window.window; + use_xdbe = 0; + } + } +#endif } text_width = window.width - window.border_inner_margin * 2 - window.border_outer_margin * 2 - window.border_width * 2; @@ -3744,6 +3832,17 @@ static void main_loop(void) window.type == TYPE_DESKTOP) { /* allow conky to hold input focus. */ break; + } else if(TEST_HINT(window.hints,HINT_FULLSCREEN)) { + //detect top right click + if (ev.xbutton.x > 750 && ev.xbutton.y < 50) + { + terminate = 1; + } + if (ev.xbutton.x <= 50 && ev.xbutton.y <= 50) + { //minimize / goto task switcher + dbus_exit_app_view(); + } + break; } else { /* forward the click to the desktop window */ XUngrabPointer(display, ev.xbutton.time); @@ -3829,6 +3928,7 @@ static void main_loop(void) } else { #endif /* X11 */ t = (next_update_time - get_time()) * 1000000; + fprintf(stderr, PACKAGE_NAME": trying to sleep %d microseconds\n",t); if(t > 0) usleep((useconds_t)t); update_text(); draw_stuff(); @@ -3974,11 +4074,40 @@ static void reload_config(void) initialisation(argc_copy, argv_copy); } -void clean_up(void *memtofree1, void* memtofree2) +#ifdef X11 +void clean_up_x11(void) { - int i; + 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,34 +4130,15 @@ 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; } +#ifdef NVIDIA + set_nvidia_display(NULL); +#endif #endif /* X11 */ free_templates(); @@ -4097,6 +4207,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 +4316,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 +4366,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 +4399,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(); @@ -4508,7 +4625,7 @@ static int do_config_step(int *line, FILE *fp, char *buf, char **name, char **va } #ifdef X11 -void setalignment(int* text_alignment, unsigned int windowtype, const char* value, const char *f, int line, char setbyconffile) { +void setalignment(int* ltext_alignment, unsigned int windowtype, const char* value, const char *f, int line, char setbyconffile) { #ifdef OWN_WINDOW if (windowtype == TYPE_DOCK) { NORM_ERR("alignment is disabled when own_window_type is dock"); @@ -4518,13 +4635,13 @@ void setalignment(int* text_alignment, unsigned int windowtype, const char* valu 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 { - *text_alignment = a; + *ltext_alignment = a; } - } else if(setbyconffile == true) { + } else if (setbyconffile) { CONF_ERR; } } @@ -4552,15 +4669,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") { @@ -4572,8 +4686,14 @@ char load_config_file(const char *f) disp = strdup(value); } } +#ifdef NVIDIA + CONF("nvidia_display") { + if(value) + set_nvidia_display(value); + } +#endif 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 +4729,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; } @@ -5024,8 +5144,8 @@ char load_config_file(const char *f) SET_HINT(window.hints, HINT_STICKY); } else if (strncmp(p_hint, "skip_taskbar", 12) == EQUAL) { SET_HINT(window.hints, HINT_SKIP_TASKBAR); - } else if (strncmp(p_hint, "skip_pager", 10) == EQUAL) { - SET_HINT(window.hints, HINT_SKIP_PAGER); + } else if (strncmp(p_hint, "fullscreen", 10) == EQUAL) { + SET_HINT(window.hints, HINT_FULLSCREEN); } else { CONF_ERR; } @@ -5562,6 +5682,7 @@ static const char *getopt_string = "vVqdDt:u:i:hc:p:" static const struct option longopts[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, + { "quiet", 0, NULL, 'q' }, { "debug", 0, NULL, 'D' }, { "config", 1, NULL, 'c' }, #ifdef CONFIG_OUTPUT @@ -5581,12 +5702,14 @@ static const struct option longopts[] = { { "window-id", 1, NULL, 'w' }, #endif /* X11 */ { "text", 1, NULL, 't' }, - { "interval", 0, NULL, 'u' }, - { "pause", 0, NULL, 'p' }, + { "interval", 1, NULL, 'u' }, + { "pause", 1, NULL, 'p' }, { 0, 0, 0, 0 } }; -void set_current_config() { +void set_current_config(void); +void set_current_config(void) +{ /* check if specified config file is valid */ if (current_config) { struct stat sb; @@ -5671,6 +5794,7 @@ void initialisation(int argc, char **argv) { "kvm_open")) == NULL) { CRIT_ERR(NULL, NULL, "cannot read kvm"); } + pthread_mutex_init(&kvm_proc_mutex, NULL); #endif while (1) { @@ -5693,7 +5817,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 @@ -5852,6 +5976,11 @@ int main(int argc, char **argv) tcp_portmon_set_max_connections(0); #endif +#ifdef HAVE_CURL + if(curl_global_init(CURL_GLOBAL_ALL)) + NORM_ERR("curl_global_init() failed, you may not be able to use curl variables"); +#endif + /* handle command line parameters that don't change configs */ #ifdef X11 if (((s = getenv("LC_ALL")) && *s) || ((s = getenv("LC_CTYPE")) && *s) @@ -5892,7 +6021,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]); @@ -5926,7 +6057,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); @@ -5935,8 +6072,13 @@ int main(int argc, char **argv) main_loop(); +#ifdef HAVE_CURL + curl_global_cleanup(); +#endif + #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) kvm_close(kd); + pthread_mutex_destroy(&kvm_proc_mutex); #endif return 0; @@ -5953,7 +6095,7 @@ static void signal_handler(int sig) { /* signal handler is light as a feather, as it should be. * we will poll g_signal_pending with each loop of conky - * and do any signal processing there, NOT here (except + * and do any signal processing there, NOT here (except * SIGALRM because this is caused when conky is hanging) */ if(sig == SIGALRM) { alarm_handler();