From a6e2dce2d00a981b99c4843088949aa24a746af2 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 5 Dec 2021 21:15:02 -0800 Subject: [PATCH] data-writer: New function dfm_put_record_utf8(). This will have another user in the upcoming support for the matrix language. --- src/language/data-io/data-writer.c | 19 +++++++++++++++++++ src/language/data-io/data-writer.h | 1 + src/language/data-io/print.c | 9 +-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/language/data-io/data-writer.c b/src/language/data-io/data-writer.c index bf9505e7dd..f38bc6896d 100644 --- a/src/language/data-io/data-writer.c +++ b/src/language/data-io/data-writer.c @@ -203,6 +203,25 @@ dfm_put_record (struct dfm_writer *w, const char *rec, size_t len) return !dfm_write_error (w); } +/* Writes record REC (which need not be null-terminated) having length LEN to + the file corresponding to HANDLE. REC is encoded in UTF-8, which this + function recodes to the correct encoding for W before writing. Adds any + needed formatting, such as a trailing new-line. Returns true on success, + false on failure. */ +bool +dfm_put_record_utf8 (struct dfm_writer *w, const char *rec, size_t len) +{ + if (is_encoding_utf8 (w->encoding)) + return dfm_put_record (w, rec, len); + else + { + char *recoded = recode_string (w->encoding, UTF8, rec, len); + bool ok = dfm_put_record (w, recoded, strlen (recoded)); + free (recoded); + return ok; + } +} + /* Closes data file writer W. */ bool dfm_close_writer (struct dfm_writer *w) diff --git a/src/language/data-io/data-writer.h b/src/language/data-io/data-writer.h index 10ad6cd656..573f4a0dd1 100644 --- a/src/language/data-io/data-writer.h +++ b/src/language/data-io/data-writer.h @@ -28,6 +28,7 @@ struct dfm_writer *dfm_open_writer (struct file_handle *, bool dfm_close_writer (struct dfm_writer *); bool dfm_write_error (const struct dfm_writer *); bool dfm_put_record (struct dfm_writer *, const char *rec, size_t len); +bool dfm_put_record_utf8 (struct dfm_writer *, const char *rec, size_t len); const char *dfm_writer_get_encoding (const struct dfm_writer *); #endif /* data-writer.h */ diff --git a/src/language/data-io/print.c b/src/language/data-io/print.c index 9e4d8a294d..c0fc3d84f1 100644 --- a/src/language/data-io/print.c +++ b/src/language/data-io/print.c @@ -575,14 +575,7 @@ print_text_flush_records (struct print_trns *trns, struct u8_line *line, len--; } - if (is_encoding_utf8 (trns->encoding)) - dfm_put_record (trns->writer, s, len); - else - { - char *recoded = recode_string (trns->encoding, UTF8, s, len); - dfm_put_record (trns->writer, recoded, strlen (recoded)); - free (recoded); - } + dfm_put_record_utf8 (trns->writer, s, len); } } } -- 2.30.2