X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmboxscan.c;h=c9aef48dda53c13dc512d153d18236f133558409;hb=349f5fc1c69755e942eb1616501fada58f17136c;hp=2d4030ee71e7b2dcc2a4961b3b055e111b79e904;hpb=3d26a4880e92df2c6004d85c1be458e35c6bfc3a;p=monky diff --git a/src/mboxscan.c b/src/mboxscan.c index 2d4030e..c9aef48 100644 --- a/src/mboxscan.c +++ b/src/mboxscan.c @@ -1,4 +1,7 @@ -/* Conky, a system monitor, based on torsmo +/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*- + * vim: ts=4 sw=4 noet ai cindent syntax=c + * + * Conky, a system monitor, based on torsmo * * Any original torsmo code is licensed under the BSD license * @@ -7,7 +10,7 @@ * Please see COPYING for details * * Copyright (c) 2006 Marco Candrian - * Copyright (c) 2005-2007 Brenden Matthews, Philip Kovacs, et. al. + * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al. * (see AUTHORS) * All rights reserved. * @@ -23,16 +26,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * $Id$ */ + */ #include "conky.h" +#include "logging.h" +#include "mail.h" +#include "text_object.h" #include #include #include -#include -#include -#include -#include "mboxscan.h" #define FROM_WIDTH 10 #define SUBJECT_WIDTH 22 @@ -53,32 +55,19 @@ static double last_update; static int args_ok = 0; static int from_width; static int subject_width; -static int print_mails; +static int print_num_mails; static int time_delay; -/* I don't know what to use: TEXT_BUFFER_SIZE or text_buffer_size - * text_buffer_size is the maximum output in chars - * TEXT_BUFFER_SIZE actually something like a allowed size for things in the - * config, below 'TEXT'. Or what is more probably max_user_text. - * Anyway, I used TEXT_BUFFER_SIZE for not 'output' things here - * -- calmar - * - * To clarify, TEXT_BUFFER_SIZE is used for buffers of fixed size, and - * text_buffer_size is used for buffers which can change in size. - * text_buffer_size is just defined as TEXT_BUFFER_SIZE to start, so it's okay - * for most things, however if something is allocated with text_buffer_size and - * then text_buffer_size changes but the array doesn't, you might have some - * issues if you are using text_buffer_size to determine the size of the array. - * -- brenden */ - -static char mbox_mail_spool[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 force_rescan = 0; char buf[text_buffer_size]; struct stat statbuf; + struct ring_list *curr = 0, *prev = 0, *startlist = 0; + FILE *fp; /* output was set to 1 after malloc'ing in conky.c */ /* -> beeing able to test it here for catching SIGUSR1 */ @@ -92,14 +81,14 @@ void mbox_scan(char *args, char *output, size_t max_len) char *substr = strstr(args, "-n"); if (substr) { - if (sscanf(substr, "-n %i", &print_mails) != 1) { - print_mails = PRINT_MAILS; + if (sscanf(substr, "-n %i", &print_num_mails) != 1) { + print_num_mails = PRINT_MAILS; } } else { - print_mails = PRINT_MAILS; + print_num_mails = PRINT_MAILS; } - if (print_mails < 1) { - print_mails = 1; + if (print_num_mails < 1) { + print_num_mails = 1; } substr = strstr(args, "-t"); @@ -130,13 +119,14 @@ void mbox_scan(char *args, char *output, size_t max_len) } /* encapsulated with "'s find first occurrence of " */ if (args[strlen(args) - 1] == '"') { - strncpy(mbox_mail_spool, args, TEXT_BUFFER_SIZE); - char *start = strchr(mbox_mail_spool, '"') + 1; + char *start; + strncpy(mbox_mail_spool, args, DEFAULT_TEXT_BUFFER_SIZE); + start = strchr(mbox_mail_spool, '"') + 1; start[(long) (strrchr(mbox_mail_spool, '"') - start)] = '\0'; - strncpy(mbox_mail_spool, start, TEXT_BUFFER_SIZE); + strncpy(mbox_mail_spool, start, DEFAULT_TEXT_BUFFER_SIZE); } else { - char *copy_args = strdup(args); + char *copy_args = strndup(args, text_buffer_size); char *tmp = strtok(copy_args, " "); char *start = tmp; @@ -146,11 +136,11 @@ void mbox_scan(char *args, char *output, size_t max_len) start = tmp; } } - strncpy(mbox_mail_spool, start, TEXT_BUFFER_SIZE); + strncpy(mbox_mail_spool, start, DEFAULT_TEXT_BUFFER_SIZE); free(copy_args); } if (strlen(mbox_mail_spool) < 1) { - CRIT_ERR("Usage: ${mboxscan [-n ] " + CRIT_ERR(NULL, NULL, "Usage: ${mboxscan [-n ] " "[-fw ] [-sw ] " "[-t mbox]}"); } @@ -161,7 +151,7 @@ void mbox_scan(char *args, char *output, size_t max_len) } if (stat(mbox_mail_spool, &statbuf)) { - CRIT_ERR("can't stat %s: %s", mbox_mail_spool, strerror(errno)); + CRIT_ERR(NULL, NULL, "can't stat %s: %s", mbox_mail_spool, strerror(errno)); } args_ok = 1; /* args-computing necessary only once */ } @@ -175,7 +165,7 @@ void mbox_scan(char *args, char *output, size_t max_len) /* mbox still exists? and get stat-infos */ if (stat(mbox_mail_spool, &statbuf)) { - ERR("can't stat %s: %s", mbox_mail_spool, strerror(errno)); + NORM_ERR("can't stat %s: %s", mbox_mail_spool, strerror(errno)); output[0] = '\0'; /* delete any output */ return; } @@ -191,9 +181,7 @@ void mbox_scan(char *args, char *output, size_t max_len) /* build up double-linked ring-list to hold data, while scanning down the * mbox */ - struct ring_list *curr = 0, *prev = 0, *startlist = 0; - - for (i = 0; i < print_mails; i++) { + for (i = 0; i < print_num_mails; i++) { curr = (struct ring_list *) malloc(sizeof(struct ring_list)); curr->from = (char *) malloc(sizeof(char[from_width + 1])); curr->subject = (char *) malloc(sizeof(char[subject_width + 1])); @@ -215,8 +203,6 @@ void mbox_scan(char *args, char *output, size_t max_len) curr->next = startlist; /* mbox */ - FILE *fp; - fp = fopen(mbox_mail_spool, "r"); if (!fp) { return; @@ -353,12 +339,12 @@ void mbox_scan(char *args, char *output, size_t max_len) fclose(fp); output[0] = '\0'; - struct ring_list *tmp; - i = print_mails; + i = print_num_mails; while (i) { + struct ring_list *tmp; if (curr->from[0] != '\0') { - if (i != print_mails) { + if (i != print_num_mails) { snprintf(buf, text_buffer_size, "\nF: %-*s S: %-*s", from_width, curr->from, subject_width, curr->subject); } else { /* first time - no \n in front */ @@ -379,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; +} +