refactor(flatfile): single-line file header with format-version marker
All checks were successful
CI Code / Check coding style (pull_request) Successful in 59s
CI Code / Check spelling (pull_request) Successful in 1m35s
CI Code / Linux (debian) (pull_request) Successful in 7m24s
CI Code / Linux (ubuntu) (pull_request) Successful in 7m24s
CI Code / Code Coverage (pull_request) Successful in 6m56s
CI Code / Linux (arch) (pull_request) Successful in 9m36s
All checks were successful
CI Code / Check coding style (pull_request) Successful in 59s
CI Code / Check spelling (pull_request) Successful in 1m35s
CI Code / Linux (debian) (pull_request) Successful in 7m24s
CI Code / Linux (ubuntu) (pull_request) Successful in 7m24s
CI Code / Code Coverage (pull_request) Successful in 6m56s
CI Code / Linux (arch) (pull_request) Successful in 9m36s
This commit is contained in:
@@ -26,10 +26,10 @@
|
||||
|
||||
#define DIR_FLATLOG "flatlog"
|
||||
#define FLATFILE_FORMAT_VERSION 1
|
||||
#define FF_VERSION_PREFIX "# format-version: "
|
||||
#define FLATFILE_HEADER \
|
||||
"# profanity chat log — UTF-8, LF line endings\n" \
|
||||
"# format-version: 1\n"
|
||||
#define FF_VERSION_MARKER "format-version: "
|
||||
#define FF_STRINGIFY_(x) #x
|
||||
#define FF_STRINGIFY(x) FF_STRINGIFY_(x)
|
||||
#define FLATFILE_HEADER "# profanity chat log — UTF-8, LF line endings, " FF_VERSION_MARKER FF_STRINGIFY(FLATFILE_FORMAT_VERSION) "\n"
|
||||
#define FF_MAX_LINE_LEN (10 * 1024 * 1024) /* 10 MB — reject lines longer than this */
|
||||
#define FF_MAX_LMC_DEPTH 100 /* max correction chain depth */
|
||||
|
||||
|
||||
@@ -342,10 +342,11 @@ ff_skip_bom(FILE* fp)
|
||||
// Format-version helper
|
||||
// =========================================================================
|
||||
//
|
||||
// Scan leading '#' comment lines for `# format-version: <N>`. Stops at
|
||||
// the first non-comment line or after FF_VERSION_SCAN_MAX comments.
|
||||
// Restores fp to its position at entry, so callers can re-parse the
|
||||
// header normally afterwards.
|
||||
// Scan leading '#' comment lines for the `format-version: <N>` marker
|
||||
// (anywhere within the comment line). Stops at the first non-comment
|
||||
// line or after FF_VERSION_SCAN_MAX comments. Restores fp to its
|
||||
// position at entry, so callers can re-parse the header normally
|
||||
// afterwards.
|
||||
#define FF_VERSION_SCAN_MAX 16
|
||||
|
||||
int
|
||||
@@ -356,7 +357,7 @@ ff_read_format_version(FILE* fp)
|
||||
return -1;
|
||||
|
||||
int version = 0;
|
||||
size_t prefix_len = strlen(FF_VERSION_PREFIX);
|
||||
size_t marker_len = strlen(FF_VERSION_MARKER);
|
||||
|
||||
for (int i = 0; i < FF_VERSION_SCAN_MAX; i++) {
|
||||
gboolean truncated = FALSE;
|
||||
@@ -367,10 +368,12 @@ ff_read_format_version(FILE* fp)
|
||||
free(line);
|
||||
break;
|
||||
}
|
||||
if (strncmp(line, FF_VERSION_PREFIX, prefix_len) == 0) {
|
||||
char* found = strstr(line, FF_VERSION_MARKER);
|
||||
if (found) {
|
||||
char* num_start = found + marker_len;
|
||||
char* endptr = NULL;
|
||||
long v = strtol(line + prefix_len, &endptr, 10);
|
||||
if (endptr != line + prefix_len && v > 0 && v <= INT_MAX)
|
||||
long v = strtol(num_start, &endptr, 10);
|
||||
if (endptr != num_start && v > 0 && v <= INT_MAX)
|
||||
version = (int)v;
|
||||
free(line);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user