local_mails: convert to generic object payload
authorPhil Sutter <phil@nwl.cc>
Sat, 24 Oct 2009 23:59:07 +0000 (01:59 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 3 Nov 2009 22:23:22 +0000 (23:23 +0100)
This also includes a little header include cleanup.

src/core.c
src/mail.c
src/mail.h
src/net_stat.c
src/read_tcp.c
src/tailhead.c
src/text_object.c
src/text_object.h
src/timeinfo.c

index ea7dcc7..23022a1 100644 (file)
@@ -1356,7 +1356,7 @@ void free_text_objects(struct text_object *root, int internal)
                        case OBJ_unreplied_mails:
                        case OBJ_draft_mails:
                        case OBJ_trashed_mails:
-                               free(data.local_mail.mbox);
+                               free_local_mails(obj);
                                break;
                        case OBJ_imap_unseen:
                        case OBJ_imap_messages:
index 1bf0e58..d676fa1 100644 (file)
@@ -32,7 +32,6 @@
 #include "conky.h"
 #include "common.h"
 #include "logging.h"
-#include "mail.h"
 #include "text_object.h"
 
 #include <errno.h>
  * #define MAX(a, b)  ((a > b) ? a : b)
  */
 
+#define POP3_TYPE 1
+#define IMAP_TYPE 2
+
+struct mail_s {                        // for imap and pop3
+       unsigned long unseen;
+       unsigned long messages;
+       unsigned long used;
+       unsigned long quota;
+       unsigned long port;
+       unsigned int retries;
+       float interval;
+       double last_update;
+       char host[128];
+       char user[128];
+       char pass[128];
+       char command[1024];
+       char folder[128];
+       timed_thread *p_timed_thread;
+       char secure;
+};
+
+struct local_mail_s {
+       char *mbox;
+       int mail_count;
+       int new_mail_count;
+       int seen_mail_count;
+       int unseen_mail_count;
+       int flagged_mail_count;
+       int unflagged_mail_count;
+       int forwarded_mail_count;
+       int unforwarded_mail_count;
+       int replied_mail_count;
+       int unreplied_mail_count;
+       int draft_mail_count;
+       int trashed_mail_count;
+       float interval;
+       time_t last_mtime;
+       double last_update;
+};
+
 char *current_mail_spool;
 
 static struct mail_s *global_mail;
 static int global_mail_use = 0;
 
-void update_mail_count(struct local_mail_s *mail)
+static void update_mail_count(struct local_mail_s *mail)
 {
        struct stat st;
 
@@ -301,6 +340,7 @@ void parse_local_mail_args(struct text_object *obj, const char *arg)
 {
        float n1;
        char mbox[256], dst[256];
+       struct local_mail_s *locmail;
 
        if (!arg) {
                n1 = 9.5;
@@ -318,15 +358,22 @@ void parse_local_mail_args(struct text_object *obj, const char *arg)
        }
 
        variable_substitute(mbox, dst, sizeof(dst));
-       obj->data.local_mail.mbox = strndup(dst, text_buffer_size);
-       obj->data.local_mail.interval = n1;
+
+       locmail = malloc(sizeof(struct local_mail_s));
+       memset(locmail, 0, sizeof(struct local_mail_s));
+       locmail->mbox = strndup(dst, text_buffer_size);
+       locmail->interval = n1;
+       obj->data.opaque = locmail;
 }
 
 #define PRINT_MAILS_GENERATOR(x) \
 void print_##x##mails(struct text_object *obj, char *p, int p_max_size) \
 { \
-       update_mail_count(&obj->data.local_mail); \
-       snprintf(p, p_max_size, "%d", obj->data.local_mail.x##mail_count); \
+       struct local_mail_s *locmail = obj->data.opaque; \
+       if (!locmail) \
+               return; \
+       update_mail_count(locmail); \
+       snprintf(p, p_max_size, "%d", locmail->x##mail_count); \
 }
 
 PRINT_MAILS_GENERATOR()
@@ -342,6 +389,19 @@ PRINT_MAILS_GENERATOR(unreplied_)
 PRINT_MAILS_GENERATOR(draft_)
 PRINT_MAILS_GENERATOR(trashed_)
 
+void free_local_mails(struct text_object *obj)
+{
+       struct local_mail_s *locmail = obj->data.opaque;
+
+       if (!locmail)
+               return;
+
+       if (locmail->mbox)
+               free(locmail->mbox);
+       free(obj->data.opaque);
+       obj->data.opaque = 0;
+}
+
 #define MAXDATASIZE 1000
 
 struct mail_s *parse_mail_args(char type, const char *arg)
index d653d1e..c4a4e5e 100644 (file)
@@ -3,56 +3,8 @@
 #ifndef _MAIL_H
 #define _MAIL_H
 
-#include "timed_thread.h"
-#include <time.h>
-
-/* forward declare to make gcc happy */
-struct text_object;
-
 extern char *current_mail_spool;
 
-struct mail_s {                        // for imap and pop3
-       unsigned long unseen;
-       unsigned long messages;
-       unsigned long used;
-       unsigned long quota;
-       unsigned long port;
-       unsigned int retries;
-       float interval;
-       double last_update;
-       char host[128];
-       char user[128];
-       char pass[128];
-       char command[1024];
-       char folder[128];
-       timed_thread *p_timed_thread;
-       char secure;
-};
-
-struct local_mail_s {
-       char *mbox;
-       int mail_count;
-       int new_mail_count;
-       int seen_mail_count;
-       int unseen_mail_count;
-       int flagged_mail_count;
-       int unflagged_mail_count;
-       int forwarded_mail_count;
-       int unforwarded_mail_count;
-       int replied_mail_count;
-       int unreplied_mail_count;
-       int draft_mail_count;
-       int trashed_mail_count;
-       float interval;
-       time_t last_mtime;
-       double last_update;
-};
-
-void update_mail_count(struct local_mail_s *);
-
-#define POP3_TYPE 1
-#define IMAP_TYPE 2
-
 void parse_local_mail_args(struct text_object *, const char *);
 
 #define PRINT_MAILS_PROTO_GENERATOR(x) \
@@ -71,6 +23,8 @@ PRINT_MAILS_PROTO_GENERATOR(unreplied_)
 PRINT_MAILS_PROTO_GENERATOR(draft_)
 PRINT_MAILS_PROTO_GENERATOR(trashed_)
 
+void free_local_mails(struct text_object *obj);
+
 void parse_global_imap_mail_args(const char *);
 void parse_global_pop3_mail_args(const char *);
 
index 288b4e1..663fe0b 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include "config.h"
+#include "conky.h"
 #include "logging.h"
 #include "specials.h"
 #include "net/if.h"
index 8617fbb..e33d947 100644 (file)
  *
  */
 
+#include "conky.h"
 #include "logging.h"
 #include "text_object.h"
 #include <netdb.h>
+#include <stdlib.h>
+#include <string.h>
 
 struct read_tcp_data {
        char *host;
index 43478ff..c9eff2a 100644 (file)
  *
  */
 
+#define _GNU_SOURCE
+#include "common.h"
 #include "text_object.h"
 #include "logging.h"
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <string.h>
 #include <unistd.h>
 
 #define MAX_HEADTAIL_LINES 30
index a4db5c6..cbde6b4 100644 (file)
@@ -28,6 +28,8 @@
  */
 #include "text_object.h"
 #include "logging.h"
+#include <stdlib.h>
+#include <stdio.h>
 
 /* text_object_list
  *
index 998aaa7..c250c8d 100644 (file)
 #define _TEXT_OBJECT_H
 
 #include "config.h"            /* for the defines */
-#include "timed_thread.h"      /* timed_thread */
-
-#ifdef TCP_PORT_MONITOR
-#include "tcp-portmon.h"       /* tcp_port_monitor_data */
-#endif
-
-#include "mail.h"              /* local_mail_s */
-#include "fs.h"                        /* struct fs_stat */
 
 enum text_object_type {
        OBJ_read_tcp,
@@ -456,7 +448,6 @@ struct text_object {
                        int a, b;
                } pair;                 /* 2 */
 
-               struct local_mail_s local_mail;
        } data;
        int type;
        int a, b;
index 183b04f..326cfd9 100644 (file)
  *
  */
 
+#include "conky.h"
 #include "text_object.h"
 #include <locale.h>
+#include <string.h>
+#include <time.h>
 
 struct tztime_s {
        char *tz;       /* timezone variable */