diff --git a/src/.cvsignore b/src/.cvsignore index 052a12327b9cb318aae4d16a08687e8bbad361f3..f693a5edb4eb8e42a4ac2f92136df5455fddbd59 100644 --- a/src/.cvsignore +++ b/src/.cvsignore @@ -4,6 +4,7 @@ config.h.in config.log config.status configure +conftest.c conftest.h dependencies language.c diff --git a/src/.gitignore b/src/.gitignore index 48b552bef05757a3756b88d9e6c299ae669bcced..51c6f0f67c8e2dcd4a76d4f2aeeaf38726821332 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -4,6 +4,7 @@ /config.log /config.status /configure +/conftest.c /conftest.h /dependencies /language.c diff --git a/src/ChangeLog b/src/ChangeLog index 802458d4c5c882b3bcdde865ece4a9abb0c28744..fab8219ccf2708eb5d1a02013ee763038f5aab66 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +Tue Jul 8 17:51:06 1997 Fredrik Hubinette <hubbe@cytocin.hubbe.net> + + * stralloc.c: fixed a bug in replace() (if 'from' is an empty string) + * testsuite.in: added a test for the above + * configure.in: added more debug to dynamic module tests + Fri Jun 27 19:30:52 1997 Henrik Grubbstr�m <grubba@infovav.se> * modules/Sql/sql.pike (create): The host argument can now use the diff --git a/src/configure.in b/src/configure.in index c189b15cea2c46f2d0f1e24d1f92a5a96604a3bb..f2cb9eb11e3a6c2d86ca5f87d8a2f6e28a74eddf 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1,4 +1,4 @@ -AC_REVISION("$Id: configure.in,v 1.101 1997/06/12 14:59:05 grubba Exp $") +AC_REVISION("$Id: configure.in,v 1.102 1997/07/09 00:57:04 hubbe Exp $") AC_INIT(interpret.c) AC_CONFIG_HEADER(machine.h) @@ -1507,7 +1507,13 @@ AC_MSG_RESULT($LINKFORSHARED) ############################################################################# cat >conftest.c <<EOF -void testfunc(void) { testfunc2(); exit(1); } +#include <stdio.h> +void testfunc(void) { + fprintf(stderr,"Calling testfunc2\n"); + testfunc2(); + fprintf(stderr,"testfunc2 returned!\n"); + exit(1); +} EOF AC_MSG_CHECKING(if dynamic loading works) diff --git a/src/dynamic_load.c b/src/dynamic_load.c index 93d4896b9e1038ac4f12bcfc0ee71ffe3e680df4..e9d8478ccbbf0940cffe26e6482d646f1cec3a00 100644 --- a/src/dynamic_load.c +++ b/src/dynamic_load.c @@ -183,7 +183,9 @@ int main() fprintf(stderr,"Failed to find function testfunc: %s\n",dlerror()); exit(1); } + fprintf(stderr,"Calling testfunc\n"); ((void (*)(void))fun)(); + fprintf(stderr,"testfunc returned!\n"); exit(1); } #endif diff --git a/src/gc.c b/src/gc.c index 6b33fc6d70450f4edfbd49277d4e0f1ca6aa34ee..c857796a234b32a2919d93bf845b32f568fc29d9 100644 --- a/src/gc.c +++ b/src/gc.c @@ -257,7 +257,8 @@ void do_gc() hash=(struct marker **)xalloc(sizeof(struct marker **)*hashsize); MEMSET((char *)hash,0,sizeof(struct marker **)*hashsize); markers_left_in_chunk=0; - + + /* First we count internal references */ gc_check_all_arrays(); gc_check_all_multisets(); gc_check_all_mappings(); @@ -265,6 +266,7 @@ void do_gc() gc_check_all_objects(); call_callback(& gc_callbacks, (void *)0); + /* Next we mark anything with external references */ gc_mark_all_arrays(); gc_mark_all_multisets(); gc_mark_all_mappings(); @@ -274,6 +276,7 @@ void do_gc() if(d_flag) gc_mark_all_strings(); + /* Now we free the unused stuff */ gc_free_all_unreferenced_arrays(); gc_free_all_unreferenced_multisets(); gc_free_all_unreferenced_mappings(); diff --git a/src/stralloc.c b/src/stralloc.c index ba03109b9e207f8f07722e035458ef0a48b6af6f..4e71ee19dd92f9d3b0a6ba5fd957d6ebc4ac520e 100644 --- a/src/stralloc.c +++ b/src/stralloc.c @@ -510,6 +510,27 @@ struct pike_string *string_replace(struct pike_string *str, char *s,*tmp,*r,*end; struct mem_searcher searcher; + if(!str->len) + { + str->refs++; + return str; + } + + if(!del->len) + { + int e; + ret=begin_shared_string(str->len + to->len * (str->len -1)); + s=ret->str; + *(s++)=str->str[0]; + for(e=1;e<str->len;e++) + { + MEMCPY(s,to->str,to->len); + s+=to->len; + *(s++)=str->str[e]; + } + return end_shared_string(ret); + } + s=str->str; end=s+str->len; diff --git a/src/testsuite.in b/src/testsuite.in index b5c18f0fa2bff38847735250f5ae28fed68e0365..94f40bda808e3c646c72c95df13818a1640bd407 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -1,4 +1,4 @@ -test_true([["$Id: testsuite.in,v 1.44 1997/06/12 23:08:10 grubba Exp $"]]) +test_true([["$Id: testsuite.in,v 1.45 1997/07/09 00:57:07 hubbe Exp $"]]) test_eq(1e1,10.0) test_eq(1E1,10.0) test_eq(1e+1,10.0) @@ -20,6 +20,7 @@ test_compile_error([[int a() { switch(random(2)) { case 3: if(random(2)) { case test_true(encode_value(0)) test_true(encode_value(0)[0]=='\266') define(test_encode, [[ test_equal($1, decode_value(encode_value($1))) ]]) +test_eq(replace("foobar","","X"),"fXoXoXbXaXr") test_encode(0) test_encode("") test_encode(0.0)