/* alignments */
enum alignment {
- TOP_LEFT = 1,
+ ALIGNMENT_ERROR,
+ TOP_LEFT,
TOP_RIGHT,
TOP_MIDDLE,
BOTTOM_LEFT,
}
fclose(where);
} else {
- NORM_ERR("Could not open the file");
+ NORM_ERR("Could not open the file '%s'", f);
}
return ret;
}
print_cmdline_to_pid(obj, p, p_max_size);
}
OBJ(cpu) {
- if (obj->data.i > info.cpu_count) {
- NORM_ERR("obj->data.i %i info.cpu_count %i",
- obj->data.i, info.cpu_count);
- CRIT_ERR(NULL, NULL, "attempting to use more CPUs than you have!");
- }
if (cur->cpu_usage) {
+ if (obj->data.i > info.cpu_count) {
+ NORM_ERR("obj->data.i %i info.cpu_count %i",
+ obj->data.i, info.cpu_count);
+ CRIT_ERR(NULL, NULL, "attempting to use more CPUs than you have!");
+ }
percent_print(p, p_max_size,
round_to_int(cur->cpu_usage[obj->data.i] * 100.0));
}
print_diskiograph(obj, p, p_max_size);
}
OBJ(diskiograph_read) {
- print_diskiograph(obj, p, p_max_size);
+ print_diskiograph_read(obj, p, p_max_size);
}
OBJ(diskiograph_write) {
- print_diskiograph(obj, p, p_max_size);
+ print_diskiograph_write(obj, p, p_max_size);
}
#endif /* X11 */
OBJ(downspeed) {
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 = ' ';
}
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;
}
#endif /* HAVE_LUA */
g_signal_pending = 0;
}
- clean_up(NULL, NULL);
+ clean_up(current_mail_spool, NULL);
#ifdef HAVE_SYS_INOTIFY_H
if (inotify_fd != -1) {
} else if (strcasecmp(s, "none") == EQUAL) {
return NONE;
}
- return TOP_LEFT;
+ return ALIGNMENT_ERROR;
}
#endif /* X11 */
return 0;
}
+#ifdef X11
+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");
+ } else
+#endif /*OWN_WINDOW */
+ if (value) {
+ int a = string_to_alignment(value);
+
+ if (a <= 0) {
+ if (setbyconffile) {
+ CONF_ERR;
+ } else NORM_ERR("'%s' is not a alignment setting", value);
+ } else {
+ *ltext_alignment = a;
+ }
+ } else if (setbyconffile) {
+ CONF_ERR;
+ }
+}
+#endif /* X11 */
+
char load_config_file(const char *f)
{
int line = 0;
}
}
CONF("alignment") {
-#ifdef OWN_WINDOW
- if (window.type == TYPE_DOCK)
- ;
- else
-#endif /*OWN_WINDOW */
- if (value) {
- int a = string_to_alignment(value);
-
- if (a <= 0) {
- CONF_ERR;
- } else {
- text_alignment = a;
- }
- } else {
- CONF_ERR;
- }
+ setalignment(&text_alignment, window.type, value, f, line, 1);
}
CONF("background") {
fork_to_background = string_to_bool(value);
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
{ "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);
+void set_current_config(void)
+{
+ /* check if specified config file is valid */
+ if (current_config) {
+ struct stat sb;
+ if (stat(current_config, &sb) ||
+ (!S_ISREG(sb.st_mode) && !S_ISLNK(sb.st_mode))) {
+ NORM_ERR("invalid configuration file '%s'\n", current_config);
+ free(current_config);
+ current_config = 0;
+ }
+ }
+
+ /* load current_config, CONFIG_FILE or SYSTEM_CONFIG_FILE */
+
+ if (!current_config) {
+ /* load default config file */
+ char buf[DEFAULT_TEXT_BUFFER_SIZE];
+ FILE *fp;
+
+ /* Try to use personal config file first */
+ to_real_path(buf, CONFIG_FILE);
+ if (buf[0] && (fp = fopen(buf, "r"))) {
+ current_config = strndup(buf, max_user_text);
+ fclose(fp);
+ }
+
+ /* Try to use system config file if personal config not readable */
+ if (!current_config && (fp = fopen(SYSTEM_CONFIG_FILE, "r"))) {
+ current_config = strndup(SYSTEM_CONFIG_FILE, max_user_text);
+ fclose(fp);
+ }
+
+ /* No readable config found */
+ if (!current_config) {
+#define NOCFGFILEFOUND "no readable personal or system-wide config file found"
+#ifdef BUILD_BUILTIN_CONFIG
+ current_config = strdup("==builtin==");
+ NORM_ERR(NOCFGFILEFOUND
+ ", using builtin default");
+#else
+ CRIT_ERR(NULL, NULL, NOCFGFILEFOUND);
+#endif /* ! CONF_OUTPUT */
+ }
+ }
+}
+
void initialisation(int argc, char **argv) {
struct sigaction act, oact;
set_default_configurations();
+ set_current_config();
load_config_file(current_config);
currentconffile = conftree_add(currentconffile, current_config);
while (1) {
int c = getopt_long(argc, argv, getopt_string, longopts, NULL);
- static int startup_pause = 0;
+ int startup_pause;
if (c == -1) {
break;
set_first_font(optarg);
break;
case 'a':
- text_alignment = string_to_alignment(optarg);
+ setalignment(&text_alignment, window.type, optarg, NULL, 0, 0);
break;
#ifdef OWN_WINDOW
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]);
}
}
- /* check if specified config file is valid */
- if (current_config) {
- struct stat sb;
- if (stat(current_config, &sb) ||
- (!S_ISREG(sb.st_mode) && !S_ISLNK(sb.st_mode))) {
- NORM_ERR("invalid configuration file '%s'\n", current_config);
- free(current_config);
- current_config = 0;
- }
- }
-
- /* load current_config, CONFIG_FILE or SYSTEM_CONFIG_FILE */
-
- if (!current_config) {
- /* load default config file */
- char buf[DEFAULT_TEXT_BUFFER_SIZE];
- FILE *fp;
-
- /* Try to use personal config file first */
- to_real_path(buf, CONFIG_FILE);
- if (buf[0] && (fp = fopen(buf, "r"))) {
- current_config = strndup(buf, max_user_text);
- fclose(fp);
- }
-
- /* Try to use system config file if personal config not readable */
- if (!current_config && (fp = fopen(SYSTEM_CONFIG_FILE, "r"))) {
- current_config = strndup(SYSTEM_CONFIG_FILE, max_user_text);
- fclose(fp);
- }
-
- /* No readable config found */
- if (!current_config) {
-#ifdef CONFIG_OUTPUT
- current_config = strdup("==builtin==");
- NORM_ERR("no readable personal or system-wide config file found,"
- " using builtin default");
-#else
- CRIT_ERR(NULL, NULL, "no readable personal or system-wide config file found");
-#endif /* ! CONF_OUTPUT */
- }
- }
+ set_current_config();
#ifdef XOAP
/* Load xoap keys, if existing */