1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-12-25 04:06:03 +00:00

mboxscan: convert to generic object payload

This commit is contained in:
Phil Sutter 2009-10-06 21:59:45 +02:00
parent dd36fc4caa
commit 4b0c1d3226
5 changed files with 54 additions and 18 deletions

View File

@ -1682,9 +1682,7 @@ void generate_text_internal(char *p, int p_max_size,
print_trashed_mails(obj, p, p_max_size); print_trashed_mails(obj, p, p_max_size);
} }
OBJ(mboxscan) { OBJ(mboxscan) {
mbox_scan(obj->data.mboxscan.args, obj->data.mboxscan.output, print_mboxscan(obj, p, p_max_size);
text_buffer_size);
snprintf(p, p_max_size, "%s", obj->data.mboxscan.output);
} }
OBJ(nodename) { OBJ(nodename) {
snprintf(p, p_max_size, "%s", cur->uname_s.nodename); snprintf(p, p_max_size, "%s", cur->uname_s.nodename);

View File

@ -698,11 +698,7 @@ struct text_object *construct_text_object(const char *s, const char *arg, long
END OBJ(trashed_mails, 0) END OBJ(trashed_mails, 0)
parse_local_mail_args(obj, arg); parse_local_mail_args(obj, arg);
END OBJ(mboxscan, 0) END OBJ(mboxscan, 0)
obj->data.mboxscan.args = (char *) malloc(text_buffer_size); parse_mboxscan_arg(obj, arg);
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);
END OBJ(mem, &update_meminfo) END OBJ(mem, &update_meminfo)
END OBJ(memeasyfree, &update_meminfo) END OBJ(memeasyfree, &update_meminfo)
END OBJ(memfree, &update_meminfo) END OBJ(memfree, &update_meminfo)
@ -1379,8 +1375,7 @@ void free_text_objects(struct text_object *root, int internal)
free_tztime(obj); free_tztime(obj);
break; break;
case OBJ_mboxscan: case OBJ_mboxscan:
free(data.mboxscan.args); free_mboxscan(obj);
free(data.mboxscan.output);
break; break;
case OBJ_mails: case OBJ_mails:
case OBJ_new_mails: case OBJ_new_mails:

View File

@ -31,10 +31,10 @@
#include "conky.h" #include "conky.h"
#include "logging.h" #include "logging.h"
#include "mail.h" #include "mail.h"
#include "text_object.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
#include <errno.h> #include <errno.h>
#include "mboxscan.h"
#define FROM_WIDTH 10 #define FROM_WIDTH 10
#define SUBJECT_WIDTH 22 #define SUBJECT_WIDTH 22
@ -60,7 +60,7 @@ static int time_delay;
static char mbox_mail_spool[DEFAULT_TEXT_BUFFER_SIZE]; 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 i, u, flag;
int force_rescan = 0; int force_rescan = 0;
@ -365,3 +365,49 @@ void mbox_scan(char *args, char *output, size_t max_len)
i--; 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;
}

View File

@ -30,6 +30,8 @@
#ifndef _MBOXSCAN_H_ #ifndef _MBOXSCAN_H_
#define _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_ */ #endif /* _MBOXSCAN_H_ */

View File

@ -449,11 +449,6 @@ struct text_object {
unsigned int cpu_index; unsigned int cpu_index;
struct mail_s *mail; struct mail_s *mail;
struct {
char *args;
char *output;
} mboxscan;
struct { struct {
void *opaque; /* temporary workaround to not blow stuff */ void *opaque; /* temporary workaround to not blow stuff */
struct text_object *next; struct text_object *next;