Add hb_buffer_reset() and hb_buffer_set_length()
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 5a44a3f..839a256 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 1998-2004  David Turner and Werner Lemberg
  * Copyright (C) 2004,2007,2009,2010  Red Hat, Inc.
+ * Copyright (C) 2011  Google, Inc.
  *
  * This is part of HarfBuzz, a text shaping library.
  *
@@ -23,6 +24,7 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
  */
 
 #include "hb-buffer-private.hh"
@@ -227,6 +229,17 @@
 
 
 void
+hb_buffer_reset (hb_buffer_t *buffer)
+{
+  hb_buffer_clear (buffer);
+
+  buffer->props = _hb_buffer_nil.props;
+
+  hb_unicode_funcs_destroy (buffer->unicode);
+  buffer->unicode = _hb_buffer_nil.unicode;
+}
+
+void
 hb_buffer_clear (hb_buffer_t *buffer)
 {
   buffer->have_output = FALSE;
@@ -434,6 +447,24 @@
 
 /* Public API again */
 
+hb_bool_t
+hb_buffer_set_length (hb_buffer_t  *buffer,
+		      unsigned int  length)
+{
+  if (!hb_buffer_ensure (buffer, length))
+    return FALSE;
+
+  /* Wipe the new space */
+  if (length > buffer->len) {
+    memset (buffer->info + buffer->len, 0, sizeof (buffer->info[0]) * (length - buffer->len));
+    if (buffer->have_positions)
+      memset (buffer->pos + buffer->len, 0, sizeof (buffer->pos[0]) * (length - buffer->len));
+  }
+
+  buffer->len = length;
+  return TRUE;
+}
+
 unsigned int
 hb_buffer_get_length (hb_buffer_t *buffer)
 {