Added purify patches reported by Ram Bhamidipaty

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@337 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-03-13 17:25:53 +00:00
commit a49f8fef5f
3 changed files with 29 additions and 11 deletions

View file

@ -29,11 +29,11 @@ LIBSRCS = callable.c void.c fio.c memory.c base.c file.c list.c hash.c string.c
LIBHEADERS = $(srcdir)/../Include/doh.h
LIB = libdoh.a
INCLUDE = -I$(srcdir)/../Include
CFLAGS = -DDOH_STRING_UPDATE_LINES
CFLAGS = @CFLAGS@ -DDOH_STRING_UPDATE_LINES
SHELL = /bin/sh
#
# Rules for creation of a .o file from .cxx
# Rules for creation of a .o file from .c
.SUFFIXES: .c
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) -c -o $*.o $<

View file

@ -105,6 +105,8 @@ DohvPrintf(DOH *so, const char *format, va_list ap)
int nbytes = 0;
char encoder[128], *ec = 0;
memset (newformat, 0, sizeof (char *));
while (*p) {
switch(state) {
case 0: /* Ordinary text */

View file

@ -464,6 +464,7 @@ int String_delitem(DOH *so, int pos)
if (s->sp > pos) {
s->sp--;
assert (s->sp >= 0);
#ifdef DOH_STRING_UPDATE_LINES
if (s->str[pos] == '\n') s->line--;
#endif
@ -547,6 +548,9 @@ String_write(DOH *so, void *buffer, int len) {
int
String_seek(DOH *so, long offset, int whence) {
int pos, nsp, inc;
#ifdef DOH_STRING_UPDATE_LINES
int prev;
#endif
String *s = (String *) so;
if (whence == SEEK_SET) pos = 0;
else if (whence == SEEK_CUR) pos = s->sp;
@ -557,17 +561,25 @@ String_seek(DOH *so, long offset, int whence) {
else pos = s->sp;
nsp = pos + offset;
if (nsp < 0) nsp = 0;
if (nsp > s->len) nsp = s->len;
if (nsp > s->sp) inc = 1;
else inc = -1;
if (nsp < 0)
nsp = 0;
if (s->len > 0 && nsp >= s->len)
nsp = s->len-1;
inc = (nsp > s->sp) ? 1 : -1;
#ifdef DOH_STRING_UPDATE_LINES
while (s->sp != nsp) {
if (s->str[s->sp-1] == '\n') s->line += inc;
prev = s->sp + inc;
if (prev>=0 && prev<=s->len && s->str[prev] == '\n')
s->line += inc;
s->sp += inc;
}
#endif
#else
s->sp = nsp;
#endif
assert (s->sp >= 0);
s->pbi = 0;
return 0;
}
@ -618,8 +630,11 @@ int String_getc(DOH *so) {
if (s->pbi) {
c = (int) s->pb[--s->pbi];
} else if (s->sp >= s->len) c = EOF;
else c = (int) s->str[s->sp++];
}
else if (s->sp >= s->len)
c = EOF;
else
c = (int) s->str[s->sp++];
#ifdef DOH_STRING_UPDATE_LINES
if (c == '\n') s->line++;
#endif
@ -804,7 +819,7 @@ String_chop(DOH *s) {
/* Replace trailing whitespace */
c = str->str + str->len - 1;
while ((str->len >= 0) && (isspace(*c))) {
while ((str->len > 0) && (isspace(*c))) {
if (str->sp >= str->len) {
str->sp--;
#ifdef DOH_STRING_UPDATE_LINES
@ -814,6 +829,7 @@ String_chop(DOH *s) {
str->len--;
c--;
}
assert (str->sp >= 0);
str->hashkey = -1;
str->pbi = 0;
}