data-writer: New function dfm_put_record_utf8().
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 6 Dec 2021 05:15:02 +0000 (21:15 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 6 Dec 2021 17:05:31 +0000 (09:05 -0800)
This will have another user in the upcoming support for the matrix
language.

src/language/data-io/data-writer.c
src/language/data-io/data-writer.h
src/language/data-io/print.c

index bf9505e7dd82878270a59ab13372c2a0137720c4..f38bc6896d94d96f6468d8e8cec8476091b13190 100644 (file)
@@ -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)
index 10ad6cd656c6acfc2036c66f11be2fbf0304e886..573f4a0dd13312336c289ea503698218760f7f7d 100644 (file)
@@ -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 */
index 9e4d8a294dfee4c88d58f42f44c946df50ee189f..c0fc3d84f115bfbeebcb761ad880ab2ab16b1f33 100644 (file)
@@ -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);
         }
     }
 }