From 2f09812efa0701721825b17086de3631462039a6 Mon Sep 17 00:00:00 2001
From: Guido van Rossum <guido@python.org>
Date: Fri, 7 Dec 2001 20:20:28 +0000
Subject: O_cwrite(): rewrote for clarity, replacing all the (Oobject *)self
 casts with a variable oself that has the proper type.  A smart compiler may
 put this thing into a register.

(I'm not sure what good this does except satisfy my desire to
understand this function; I got a report about an uninitialized read
from Insure++ about this function and it hurt my eyes to even look at
it.  I gotta run away or I'll get tempted to reformat the entire
file...)
---
 Modules/cStringIO.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 49007e2..094804c 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -394,31 +394,32 @@ static char O_write__doc__[] =
 static int
 O_cwrite(PyObject *self, char *c, int  l) {
         int newl;
+        Oobject *oself;
 
         UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
-
-        newl=((Oobject*)self)->pos+l;
-        if (newl >= ((Oobject*)self)->buf_size) {
-            ((Oobject*)self)->buf_size*=2;
-            if (((Oobject*)self)->buf_size <= newl) 
-                    ((Oobject*)self)->buf_size=newl+1;
-            UNLESS (((Oobject*)self)->buf=
-                   (char*)realloc(
-                        ((Oobject*)self)->buf,
-                        (((Oobject*)self)->buf_size) *sizeof(char))) {
+        oself = (Oobject *)self;
+
+        newl = oself->pos+l;
+        if (newl >= oself->buf_size) {
+            oself->buf_size *= 2;
+            if (oself->buf_size <= newl) 
+                    oself->buf_size = newl+1;
+            UNLESS (oself->buf = 
+                    (char*)realloc(oself->buf,
+                                   (oself->buf_size) * sizeof(char))) {
                     PyErr_SetString(PyExc_MemoryError,"out of memory");
-                    ((Oobject*)self)->buf_size=((Oobject*)self)->pos=0;
+                    oself->buf_size = oself->pos = 0;
                     return -1;
               }
           }
 
-        memcpy(((Oobject*)((Oobject*)self))->buf+((Oobject*)self)->pos,c,l);
+        memcpy(oself->buf+oself->pos,c,l);
 
-        ((Oobject*)self)->pos += l;
+        oself->pos += l;
 
-        if (((Oobject*)self)->string_size < ((Oobject*)self)->pos) {
-            ((Oobject*)self)->string_size = ((Oobject*)self)->pos;
-          }
+        if (oself->string_size < oself->pos) {
+            oself->string_size = oself->pos;
+        }
 
         return l;
 }
-- 
cgit v0.12

