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);
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)
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:
#include "conky.h"
#include "logging.h"
#include "mail.h"
+#include "text_object.h"
#include <sys/stat.h>
#include <sys/time.h>
#include <errno.h>
-#include "mboxscan.h"
#define FROM_WIDTH 10
#define SUBJECT_WIDTH 22
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;
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;
+}
+
#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_ */
struct mail_s *mail;
struct {
- char *args;
- char *output;
- } mboxscan;
-
- struct {
void *opaque; /* temporary workaround to not blow stuff */
struct text_object *next;
char *s;