From 4da5d63fabadd2e1bf2ff538ec02dfaa0bc2e6e7 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 26 Oct 2009 13:16:37 +0100 Subject: [PATCH] Read the last logfile and set log_lines_written apropriately This will prevent cluttered logfiles if the program is loaded many times. Previously, a new logfile was always started when loading. --- include/kasse.h | 1 + src/config.c | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/include/kasse.h b/include/kasse.h index 4b76410..96e1ed4 100644 --- a/include/kasse.h +++ b/include/kasse.h @@ -8,5 +8,6 @@ char log_num = 0; int log_lines_written = 0; #else extern int log_num; +extern int log_lines_written; #endif #endif diff --git a/src/config.c b/src/config.c index 34a09a2..3ee69bd 100644 --- a/src/config.c +++ b/src/config.c @@ -1,6 +1,6 @@ /* * RGB2R-C128-Kassenprogramm - * (c) 2007-2008 phil_fry, sECuRE, sur5r + * (c) 2007-2009 phil_fry, sECuRE, sur5r * See LICENSE for license information * */ @@ -37,14 +37,25 @@ struct credits_array_t credits; * */ static void lookup_needed_files() { - BYTE lfn = 8; + BYTE lfn = 8, c; struct cbm_dirent dirent; + char *buffer = malloc(sizeof(char) * 64 * 100); + char *walk; + char filename[8]; + int n; + + if (buffer == NULL) { + cprintf("Not enough memory available\r\n"); + exit(1); + } if (cbm_opendir(lfn, (BYTE)8) != 0) { cprintf("could not open directory\r\n"); return; } while (cbm_readdir(lfn, &dirent) == 0) { + /* NOTE: You MUST NOT delete any logfiles. This does only work + * under the assumption that logfiles are named continuously */ if (strncmp(dirent.name, "log", 3) == 0) log_num++; if (strcasecmp(dirent.name, "items") == 0) @@ -53,6 +64,31 @@ static void lookup_needed_files() { credits_exists = true; } cbm_closedir(lfn); + + /* Try to find out how many lines the last logfile got to seamlessly + * append to it, if we got more than one logfile. */ + if (log_num > 0) { + log_num--; + + sprintf(filename, "log-%d", log_num); + if ((c = cbm_open(lfn, (BYTE)8, (BYTE)CBM_READ, filename)) != 0) { + c128_perror(c, "cbm_open(log) for reading"); + exit(1); + } + n = cbm_read(lfn, buffer, sizeof(char) * 64 * 100); + if (n < 0) { + cprintf("error while cbm_read()ing the logfile\r\n"); + exit(1); + } + buffer[n] = '\0'; + for (walk = buffer; (walk - buffer) < n; walk++) { + if (*walk == '\r' || *walk == '\n') + log_lines_written++; + } + cbm_close(lfn); + } + + free(buffer); } void load_items() { -- 2.39.5