Add _PyBytesWriter_Resize() function

This function gives a control to the buffer size without using min_size.
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index e54f299..ae7b1ea 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3997,29 +3997,14 @@
 }
 
 void*
-_PyBytesWriter_Prepare(_PyBytesWriter *writer, void *str, Py_ssize_t size)
+_PyBytesWriter_Resize(_PyBytesWriter *writer, void *str, Py_ssize_t size)
 {
     Py_ssize_t allocated, pos;
 
     _PyBytesWriter_CheckConsistency(writer, str);
-    assert(size >= 0);
+    assert(writer->allocated < size);
 
-    if (size == 0) {
-        /* nothing to do */
-        return str;
-    }
-
-    if (writer->min_size > PY_SSIZE_T_MAX - size) {
-        PyErr_NoMemory();
-        goto error;
-    }
-    writer->min_size += size;
-
-    allocated = writer->allocated;
-    if (writer->min_size <= allocated)
-        return str;
-
-    allocated = writer->min_size;
+    allocated = size;
     if (writer->overallocate
         && allocated <= (PY_SSIZE_T_MAX - allocated / OVERALLOCATE_FACTOR)) {
         /* overallocate to limit the number of realloc() */
@@ -4080,6 +4065,33 @@
     return NULL;
 }
 
+void*
+_PyBytesWriter_Prepare(_PyBytesWriter *writer, void *str, Py_ssize_t size)
+{
+    Py_ssize_t new_min_size;
+
+    _PyBytesWriter_CheckConsistency(writer, str);
+    assert(size >= 0);
+
+    if (size == 0) {
+        /* nothing to do */
+        return str;
+    }
+
+    if (writer->min_size > PY_SSIZE_T_MAX - size) {
+        PyErr_NoMemory();
+        _PyBytesWriter_Dealloc(writer);
+        return NULL;
+    }
+    new_min_size = writer->min_size + size;
+
+    if (new_min_size > writer->allocated)
+        str = _PyBytesWriter_Resize(writer, str, new_min_size);
+
+    writer->min_size = new_min_size;
+    return str;
+}
+
 /* Allocate the buffer to write size bytes.
    Return the pointer to the beginning of buffer data.
    Raise an exception and return NULL on error. */