Actually call hb_subset
diff --git a/util/hb-subset.cc b/util/hb-subset.cc
index 3dda921..808cb04 100644
--- a/util/hb-subset.cc
+++ b/util/hb-subset.cc
@@ -28,6 +28,7 @@
#include <unistd.h>
#include "main-font-text.hh"
+#include "hb-subset.h"
/*
* Command line interface to the harfbuzz font subsetter.
@@ -51,28 +52,44 @@
{
}
+ hb_bool_t
+ write_file (const char *output_file, hb_blob_t *blob) {
+ unsigned int data_length;
+ const char* data = hb_blob_get_data (blob, &data_length);
+
+ int fd_out = open(output_file, O_CREAT | O_WRONLY, S_IRWXU);
+ if (fd_out == -1) {
+ fprintf(stderr, "Unable to open output file");
+ return false;
+ }
+ ssize_t bytes_written = write(fd_out, data, data_length);
+ if (bytes_written == -1) {
+ fprintf(stderr, "Unable to write output file\n");
+ return false;
+ }
+ if (bytes_written != data_length) {
+ fprintf(stderr, "Expected %u bytes written, got %ld\n", data_length,
+ bytes_written);
+ return false;
+ }
+ return true;
+ }
+
void finish (const font_options_t *font_opts)
{
- hb_face_t *face = hb_font_get_face (font);
- hb_blob_t *result = hb_face_reference_blob (face);
- unsigned int data_length;
- const char* data = hb_blob_get_data (result, &data_length);
+ // TODO(Q1) check for errors from creates and such
+ hb_subset_profile_t *subset_profile = hb_subset_profile_create();
+ hb_subset_input_t *subset_input = hb_subset_input_create();
+ hb_face_t *face = hb_font_get_face (font);
+ hb_subset_face_t *subset_face = hb_subset_face_create(face);
- int fd_out = open(options.output_file, O_CREAT | O_WRONLY, S_IRWXU);
- if (fd_out != -1) {
- ssize_t bytes_written = write(fd_out, data, data_length);
- if (bytes_written == -1) {
- fprintf(stderr, "Unable to write output file");
- failed = true;
- } else if (bytes_written != data_length) {
- fprintf(stderr, "Wrong number of bytes written");
- failed = true;
- }
- } else {
- fprintf(stderr, "Unable to open output file");
- failed = true;
- }
+ hb_blob_t *result = nullptr;
+ failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
+ && write_file(options.output_file, result));
+ hb_subset_profile_destroy (subset_profile);
+ hb_subset_input_destroy (subset_input);
+ hb_subset_face_destroy (subset_face);
hb_blob_destroy (result);
hb_font_destroy (font);
}