commit - 0952df4dba1fa6bfa901a43dbe2f173d9c1bd5f7
commit + 531c239673c159514ba6035b670a1e650d7ef2a0
blob - f1cb02e9b387ed768122a486ebac75a9cb33c85e
blob + 4012d5ff7fc8d537bd7a071745f16b5298bc13c2
--- include/statbar.h
+++ include/statbar.h
/* FS */
extern bool weather_loc_valid;
-extern bool mail_path_valid;
extern void read_config(void);
extern int open_command_interface(void);
/* Mail */
extern char mail_string[7];
-extern bool get_mail(void);
-extern char **get_mail_path_ptr(void);
+extern void get_mail(void);
+extern char **get_append_mail_path_ptr(void);
extern void close_mail(void);
/* Network */
blob - 831622e305ba0930a787c90c60cc59b6d52f954a
blob + a12a3dc312ce17805a89431f02c513fdbdc46287
--- modules/mail.c
+++ modules/mail.c
-#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "statbar.h"
+#define MAX_MAILDIRS 8
+
char mail_string[7];
-static char *mail_path;
+static char *mail_path[MAX_MAILDIRS];
char **
-get_mail_path_ptr(void)
+get_append_mail_path_ptr(void)
{
- return &mail_path;
+ int i;
+
+ for (i = 0; i < MAX_MAILDIRS; i++)
+ {
+ if (mail_path[i] == NULL) return &mail_path[i];
+ }
+
+ return NULL;
}
-bool
+void
get_mail(void)
{
DIR *dir;
struct dirent *dp;
+ int new_mail = 0;
+ int i = 0;
- dir = opendir(mail_path);
- if (dir == NULL)
+ while (mail_path[i])
{
- perror("opendir");
+ dir = opendir(mail_path[i]);
+ if (dir == NULL)
+ {
+ perror("opendir");
- return false;
- }
- for (;;)
- {
- dp = readdir(dir);
+ continue;
+ }
+ for (;;)
+ {
+ dp = readdir(dir);
- if (dp == NULL ||
- (strcmp(dp->d_name, ".") != 0
- && strcmp(dp->d_name, "..") != 0)) break;
- }
- (void)snprintf(mail_string, 7, "%s ", dp ? MAIL : "");
- (void)closedir(dir);
+ if (dp == NULL ||
+ (strcmp(dp->d_name, ".") != 0
+ && strcmp(dp->d_name, "..") != 0)) break;
+ }
+ if (dp) new_mail = 1;
+ (void)closedir(dir);
- return true;
+ if (new_mail || ++i == MAX_MAILDIRS) break;
+ }
+
+ (void)snprintf(mail_string, 7, "%s ", new_mail ? MAIL : "");
}
void
close_mail(void)
{
- free(mail_path);
+ int i = 0;
+
+ while (mail_path[i])
+ {
+ free(mail_path[i]);
+
+ if (++i == MAX_MAILDIRS) break;
+ }
}
blob - 69fa60c0842cd0e65676319e03802e91134cdb44
blob + cc7751e57650ee33fa7bbd84596ce844f64b7149
--- src/fs.c
+++ src/fs.c
time_t battery_ms;
time_t cputemp_ms;
char **weather_location;
+ char **mail_ptr;
uid_t uid;
struct passwd *pw;
FILE *file;
}
if (strncmp(line, "inbox directory", strlen("inbox directory")) == 0)
{
- if (mail_path_valid && *get_mail_path_ptr() != NULL) close_mail();
+ mail_ptr = get_append_mail_path_ptr();
+ if (mail_ptr == NULL)
+ {
+ (void)printf("Config error line %d: Too many mailboxes specified\n", i);
+
+ continue;
+ }
delim++;
while (*delim == ' ') delim++;
- if (asprintf(get_mail_path_ptr(), "%s/new", delim) == -1)
+ if (asprintf(mail_ptr, "%s/new", delim) == -1)
perror("asprintf");
- else
- mail_path_valid = true;
continue;
}
blob - 91ed0768eda2efa5c651da097817dda010c5a390
blob + 92680bf0f31b186e21edb4298305a38a480d615f
--- src/main.c
+++ src/main.c
static int reload_battery = 0;
bool weather_loc_valid = false;
-bool mail_path_valid = false;
void
sig_handler(int sig)
weather_pfd->events = POLLIN;
get_weather(weather_pipe[1]);
}
- if (mail_path_valid) mail_path_valid = get_mail();
+ get_mail();
display = XOpenDisplay(NULL);
if (display == NULL)
}
while (!should_quit)
{
- if (mail_path_valid == false)
- close_mail();
-
(void)clock_gettime(CLOCK_BOOTTIME, &now);
next_event = NULL;
for (i = 0; i < CLOCKS_COUNT; i++)
(void)clock_gettime(CLOCK_BOOTTIME, &now);
/* Mail */
- if (mail_path_valid && reload_mail)
+ if (reload_mail)
{
reload_mail = 0;
- mail_path_valid = get_mail();
+ get_mail();
dirty = true;
}
if (vol_pid > 0) (void)kill(vol_pid, SIGTERM);
if (network_pid > 0) (void)kill(network_pid, SIGTERM);
if (weather_loc_valid) close_weather();
- if (mail_path_valid) close_mail();
+ close_mail();
(void)XCloseDisplay(display);
if (weather_pfd)
{