]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/journal.c
Journal output lines instead of chunks
[empserver] / src / lib / subs / journal.c
index d2521f12902f6aec1879abc49bbeb26bace10703..85f68ce87b9d5ad3d7c10fa1ebc2b5caa1caf0f2 100644 (file)
@@ -66,6 +66,9 @@
 static char journal_fname[] = "journal.log";
 static FILE *journal;
 
+static void journal_entry(char *fmt, ...) ATTRIBUTE((format (printf, 1, 2)));
+static void journal_output_1(struct player *, char *, char *, int);
+
 static FILE *
 journal_open(void)
 {
@@ -170,14 +173,35 @@ journal_logout(void)
 }
 
 void
-journal_output(struct player *pl, int id, char *output)
+journal_output(struct player *pl, char *output)
 {
+    static char buf[1024];
+    char *s, *e;
+
     if (keep_journal < 2)
        return;
+
+    for (s = output; (e = strchr(s, '\n')); s = e + 1) {
+       journal_output_1(pl, buf, s, (int)(e + 1 - s));
+       buf[0] = 0;
+    }
+    if (strlen(buf) + strlen(s) < 1024)
+       strcpy(buf + strlen(buf), s);
+    else {
+       journal_output_1(pl, buf, s, -1);
+       buf[0] = 0;
+    }
+}
+
+void
+journal_output_1(struct player *pl, char *buf1, char *buf2, int buf2prec)
+{
     if (pl && pl->state == PS_PLAYING)
-       journal_entry("output %d %d %s", pl->cnum, id, output);
+       journal_entry("output %d %s%.*s",
+                     pl->cnum, buf1, buf2prec, buf2);
     else
-       journal_entry("output %p %d %s", pl, id, output);
+       journal_entry("output %p %s%.*s",
+                     pl, buf1, buf2prec, buf2);
 }
 
 void