From 7d9b4133eb0771b1b6723570c1c24baa54a2af9d Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 25 Nov 1998 16:17:32 +0000 Subject: New version from Jim Fulton: - New copyright. (Open source) - Fixed problem in seek method. The seek method should (and now does) fill with nulls when seeking past the end of the "file". --- Modules/cStringIO.c | 140 ++++++++++++++++++++++++++-------------------------- 1 file changed, 69 insertions(+), 71 deletions(-) diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c index 494d895..6828a11 100644 --- a/Modules/cStringIO.c +++ b/Modules/cStringIO.c @@ -1,63 +1,56 @@ /* - - cStringIO.c,v 1.23 1997/12/04 00:12:05 jim Exp - - A simple fast partial StringIO replacement. - - - - Copyright - - Copyright 1996 Digital Creations, L.C., 910 Princess Anne - Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All - rights reserved. Copyright in this software is owned by DCLC, - unless otherwise indicated. Permission to use, copy and - distribute this software is hereby granted, provided that the - above copyright notice appear in all copies and that both that - copyright notice and this permission notice appear. Note that - any product, process or technology described in this software - may be the subject of other Intellectual Property rights - reserved by Digital Creations, L.C. and are not licensed - hereunder. - - Trademarks - - Digital Creations & DCLC, are trademarks of Digital Creations, L.C.. - All other trademarks are owned by their respective companies. - - No Warranty - - The software is provided "as is" without warranty of any kind, - either express or implied, including, but not limited to, the - implied warranties of merchantability, fitness for a particular - purpose, or non-infringement. This software could include - technical inaccuracies or typographical errors. Changes are - periodically made to the software; these changes will be - incorporated in new editions of the software. DCLC may make - improvements and/or changes in this software at any time - without notice. - - Limitation Of Liability - - In no event will DCLC be liable for direct, indirect, special, - incidental, economic, cover, or consequential damages arising - out of the use of or inability to use this software even if - advised of the possibility of such damages. Some states do not - allow the exclusion or limitation of implied warranties or - limitation of liability for incidental or consequential - damages, so the above limitation or exclusion may not apply to - you. - - If you have questions regarding this software, - contact: - - info@digicool.com - Digital Creations L.C. - - (540) 371-6909 - - -*/ + * cStringIO.c,v 1.26 1998/10/01 22:30:56 jim Exp + * + * Copyright (c) 1996-1998, Digital Creations, Fredericksburg, VA, USA. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * o Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the disclaimer that follows. + * + * o Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * o All advertising materials mentioning features or use of this + * software must display the following acknowledgement: + * + * This product includes software developed by Digital Creations + * and its contributors. + * + * o Neither the name of Digital Creations nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS + * IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL + * CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + # + # If you have questions regarding this software, contact: + # + # Digital Creations, L.C. + # 910 Princess Ann Street + # Fredericksburge, Virginia 22401 + # + # info@digicool.com + # + # (540) 371-6909 + */ static char cStringIO_module_documentation[] = "A simple fast partial StringIO replacement.\n" "\n" @@ -79,13 +72,13 @@ static char cStringIO_module_documentation[] = " an_input_stream=StringIO(a_string)\n" " spam=an_input_stream.readline()\n" " spam=an_input_stream.read(5)\n" -" an_input_stream.reset() # OK, start over\n" +" an_input_stream.seek(0) # OK, start over\n" " spam=an_input_stream.read() # and read it all\n" " \n" "If someone else wants to provide a more complete implementation,\n" "go for it. :-) \n" "\n" -"cStringIO.c,v 1.23 1997/12/04 00:12:05 jim Exp\n" +"cStringIO.c,v 1.26 1998/10/01 22:30:56 jim Exp\n" ; #include "Python.h" @@ -152,8 +145,19 @@ O_seek(Oobject *self, PyObject *args) { position += self->pos; } - self->pos = (position > self->string_size ? self->string_size : - (position < 0 ? 0 : position)); + if (position > self->buf_size) { + self->buf_size*=2; + if(self->buf_size <= position) self->buf_size=position+1; + UNLESS(self->buf=(char*)realloc(self->buf,self->buf_size*sizeof(char))) { + self->buf_size=self->pos=0; + return PyErr_NoMemory(); + } + } + else if(position < 0) position=0; + + self->pos=position; + + while(--position >= self->string_size) self->buf[position]=0; Py_INCREF(Py_None); return Py_None; @@ -389,12 +393,9 @@ O_dealloc(Oobject *self) { static PyObject * O_getattr(Oobject *self, char *name) { - if (name[0] == 's' && strcmp(name, "softspace") == 0) { + if (strcmp(name, "softspace") == 0) { return PyInt_FromLong(self->softspace); } - else if (name[0] == 'c' && strcmp(name, "closed") == 0) { - return PyInt_FromLong(self->closed); - } return Py_FindMethod(O_methods, (PyObject *)self, name); } @@ -499,9 +500,6 @@ I_dealloc(Iobject *self) { static PyObject * I_getattr(Iobject *self, char *name) { - if (name[0] == 'c' && strcmp(name,"closed") == 0) { - return PyInt_FromLong(self->closed); - } return Py_FindMethod(I_methods, (PyObject *)self, name); } @@ -565,7 +563,7 @@ static PyObject * IO_StringIO(PyObject *self, PyObject *args) { PyObject *s=0; - UNLESS(PyArg_ParseTuple(args, "|S", &s)) return NULL; + UNLESS(PyArg_ParseTuple(args, "|O", &s)) return NULL; if(s) return newIobject(s); return newOobject(128); } -- cgit v0.12