[ekg2-commit] ekg2: main.c (HEAD) [darkjames]
CVS commit
cvs w toxygen.net
Wto, 10 Kwi 2007, 11:29:55 CEST
Module name: ekg2
Changes by: darkjames 2007-04-10 11:29:53
Modified files:
main.c
Log message:
Don't open twice same logfile...
Index: main.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/logs/main.c,v
diff -d -u -r1.93 -r1.94
--- main.c 1 Apr 2007 16:45:12 -0000 1.93
+++ main.c 10 Apr 2007 09:29:52 -0000 1.94
@@ -647,6 +647,7 @@
query_connect_id(&logs_plugin, PROTOCOL_STATUS, logs_status_handler, NULL);
query_connect_id(&logs_plugin, CONFIG_POSTINIT, logs_postinit, NULL);
query_connect_id(&logs_plugin, SESSION_STATUS, logs_sestatus_handler, NULL);
+ /* XXX, implement UI_WINDOW_TARGET_CHANGED, IMPORTANT!!!!!! */
/* TODO: moze zmienna sesyjna ? ;> */
variable_add(&logs_plugin, ("away_log"), VAR_INT, 1, &config_away_log, &logs_changed_awaylog, NULL, NULL);
@@ -671,10 +672,11 @@
}
static int logs_plugin_destroy() {
- list_t l = log_logs;
+ list_t old_logs = log_logs;
+ list_t l;
- for (l = log_logs; l; l = l->next) {
- logs_log_t *ll = l->data;
+ for (; log_logs; log_logs = log_logs->next) {
+ logs_log_t *ll = log_logs->data;
FILE *f = NULL;
time_t t = time(NULL);
int ff = (ll->lw) ? ll->lw->logformat : logs_log_format(session_find(ll->session));
@@ -682,13 +684,13 @@
/* TODO: rewrite */
if (ff == LOG_FORMAT_IRSSI && xstrlen(IRSSI_LOG_EKG2_CLOSED)) {
char *path = (ll->lw) ? xstrdup(ll->lw->path) : logs_prepare_path(session_find(ll->session), config_logs_path, ll->uid, t);
- f = (ll->lw) ? logs_window_close(l->data, 0) : NULL;
+ f = (ll->lw) ? logs_window_close(log_logs->data, 0) : NULL;
if (!f)
f = logs_open_file(path, ff);
xfree(path);
} else
- logs_window_close(l->data, 1);
+ logs_window_close(log_logs->data, 1);
if (f) {
if (ff == LOG_FORMAT_IRSSI && xstrlen(IRSSI_LOG_EKG2_CLOSED)) {
@@ -702,7 +704,7 @@
xfree(ll->session);
xfree(ll->uid);
}
- list_destroy(log_logs, 1);
+ list_destroy(old_logs, 1); log_logs = NULL;
for (l = log_awaylog; l;) {
log_away_t *a = l->data;
@@ -846,6 +848,28 @@
errno = EACCES; /* = 0 ? */
return NULL;
}
+
+ { /* check if such file was already open SLOW :( */
+ list_t l;
+
+ for (l=log_logs; l; l = l->next) {
+ logs_log_t *ll = l->data;
+ log_window_t *lw;
+
+ if (!ll || !(lw = ll->lw))
+ continue;
+
+/* debug_error("here: %x [%s, %s] [%d %d]\n", lw->file, lw->path, path, lw->logformat, ff); */
+
+ if (lw->file && lw->logformat == ff && !xstrcmp(lw->path, path)) {
+ FILE *f = lw->file;
+ lw->file = NULL; /* simulate fclose() on this */
+ return f; /* simulate fopen() here */
+ }
+ }
+ }
+
+
xstrncpy(fullname, path, PATH_MAX);
if (mkdir_recursive(path, 0)) {
Więcej informacji o liście dyskusyjnej ekg2-commit