From 4b0c1d3226da749b9008ed5fc7e930083dc9a738 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Tue, 6 Oct 2009 21:59:45 +0200 Subject: [PATCH] mboxscan: convert to generic object payload --- src/conky.c | 4 +--- src/core.c | 9 ++------- src/mboxscan.c | 50 +++++++++++++++++++++++++++++++++++++++++++++-- src/mboxscan.h | 4 +++- src/text_object.h | 5 ----- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/src/conky.c b/src/conky.c index e2b1d2d4..05fce9ad 100644 --- a/src/conky.c +++ b/src/conky.c @@ -1682,9 +1682,7 @@ void generate_text_internal(char *p, int p_max_size, print_trashed_mails(obj, p, p_max_size); } OBJ(mboxscan) { - mbox_scan(obj->data.mboxscan.args, obj->data.mboxscan.output, - text_buffer_size); - snprintf(p, p_max_size, "%s", obj->data.mboxscan.output); + print_mboxscan(obj, p, p_max_size); } OBJ(nodename) { snprintf(p, p_max_size, "%s", cur->uname_s.nodename); diff --git a/src/core.c b/src/core.c index ffc24b3c..49f2576b 100644 --- a/src/core.c +++ b/src/core.c @@ -698,11 +698,7 @@ struct text_object *construct_text_object(const char *s, const char *arg, long END OBJ(trashed_mails, 0) parse_local_mail_args(obj, arg); END OBJ(mboxscan, 0) - obj->data.mboxscan.args = (char *) malloc(text_buffer_size); - obj->data.mboxscan.output = (char *) malloc(text_buffer_size); - /* if '1' (in mboxscan.c) then there was SIGUSR1, hmm */ - obj->data.mboxscan.output[0] = 1; - strncpy(obj->data.mboxscan.args, arg, text_buffer_size); + parse_mboxscan_arg(obj, arg); END OBJ(mem, &update_meminfo) END OBJ(memeasyfree, &update_meminfo) END OBJ(memfree, &update_meminfo) @@ -1379,8 +1375,7 @@ void free_text_objects(struct text_object *root, int internal) free_tztime(obj); break; case OBJ_mboxscan: - free(data.mboxscan.args); - free(data.mboxscan.output); + free_mboxscan(obj); break; case OBJ_mails: case OBJ_new_mails: diff --git a/src/mboxscan.c b/src/mboxscan.c index 13f0582a..f106f0aa 100644 --- a/src/mboxscan.c +++ b/src/mboxscan.c @@ -31,10 +31,10 @@ #include "conky.h" #include "logging.h" #include "mail.h" +#include "text_object.h" #include #include #include -#include "mboxscan.h" #define FROM_WIDTH 10 #define SUBJECT_WIDTH 22 @@ -60,7 +60,7 @@ static int time_delay; static char mbox_mail_spool[DEFAULT_TEXT_BUFFER_SIZE]; -void mbox_scan(char *args, char *output, size_t max_len) +static void mbox_scan(char *args, char *output, size_t max_len) { int i, u, flag; int force_rescan = 0; @@ -365,3 +365,49 @@ void mbox_scan(char *args, char *output, size_t max_len) i--; } } + +struct mboxscan_data { + char *args; + char *output; +}; + +void parse_mboxscan_arg(struct text_object *obj, const char *arg) +{ + struct mboxscan_data *msd; + + msd = malloc(sizeof(struct mboxscan_data)); + memset(msd, 0, sizeof(struct mboxscan_data)); + + msd->args = strndup(arg, text_buffer_size); + msd->output = (char *) malloc(text_buffer_size); + /* if '1' (in mboxscan.c) then there was SIGUSR1, hmm */ + msd->output[0] = 1; + + obj->data.opaque = msd; +} + +void print_mboxscan(struct text_object *obj, char *p, int p_max_size) +{ + struct mboxscan_data *msd = obj->data.opaque; + + if (!msd) + return; + + mbox_scan(msd->args, msd->output, text_buffer_size); + snprintf(p, p_max_size, "%s", msd->output); +} + +void free_mboxscan(struct text_object *obj) +{ + struct mboxscan_data *msd = obj->data.opaque; + + if (!msd) + return; + if (msd->args) + free(msd->args); + if (msd->output) + free(msd->output); + free(obj->data.opaque); + obj->data.opaque = NULL; +} + diff --git a/src/mboxscan.h b/src/mboxscan.h index cd0b690c..76387ee9 100644 --- a/src/mboxscan.h +++ b/src/mboxscan.h @@ -30,6 +30,8 @@ #ifndef _MBOXSCAN_H_ #define _MBOXSCAN_H_ -void mbox_scan(char *args, char *output, size_t max_len); +void parse_mboxscan_arg(struct text_object *, const char *); +void print_mboxscan(struct text_object *, char *, int); +void free_mboxscan(struct text_object *); #endif /* _MBOXSCAN_H_ */ diff --git a/src/text_object.h b/src/text_object.h index 7d819f1e..8731cd66 100644 --- a/src/text_object.h +++ b/src/text_object.h @@ -449,11 +449,6 @@ struct text_object { unsigned int cpu_index; struct mail_s *mail; - struct { - char *args; - char *output; - } mboxscan; - struct { void *opaque; /* temporary workaround to not blow stuff */ struct text_object *next;