Commit 5e11bcd8 authored by Guido van Rossum's avatar Guido van Rossum

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...)
parent 749d00b1
...@@ -394,31 +394,32 @@ static char O_write__doc__[] = ...@@ -394,31 +394,32 @@ static char O_write__doc__[] =
static int static int
O_cwrite(PyObject *self, char *c, int l) { O_cwrite(PyObject *self, char *c, int l) {
int newl; int newl;
Oobject *oself;
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1; UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
oself = (Oobject *)self;
newl=((Oobject*)self)->pos+l;
if (newl >= ((Oobject*)self)->buf_size) { newl = oself->pos+l;
((Oobject*)self)->buf_size*=2; if (newl >= oself->buf_size) {
if (((Oobject*)self)->buf_size <= newl) oself->buf_size *= 2;
((Oobject*)self)->buf_size=newl+1; if (oself->buf_size <= newl)
UNLESS (((Oobject*)self)->buf= oself->buf_size = newl+1;
(char*)realloc( UNLESS (oself->buf =
((Oobject*)self)->buf, (char*)realloc(oself->buf,
(((Oobject*)self)->buf_size) *sizeof(char))) { (oself->buf_size) * sizeof(char))) {
PyErr_SetString(PyExc_MemoryError,"out of memory"); PyErr_SetString(PyExc_MemoryError,"out of memory");
((Oobject*)self)->buf_size=((Oobject*)self)->pos=0; oself->buf_size = oself->pos = 0;
return -1; 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) { if (oself->string_size < oself->pos) {
((Oobject*)self)->string_size = ((Oobject*)self)->pos; oself->string_size = oself->pos;
} }
return l; return l;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment