Mercurial > repos > rhope
diff string.c @ 3:94c885692eb5
Partial set of fixes and enhancements from Linux box
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 29 Apr 2009 03:21:23 -0400 |
parents | 76568becd6d6 |
children | 3cc5e4a42344 |
line wrap: on
line diff
--- a/string.c Wed Apr 29 02:58:03 2009 -0400 +++ b/string.c Wed Apr 29 03:21:23 2009 -0400 @@ -141,7 +141,8 @@ if(len < 0) len = strlen(string); output = new_datum(BUILTIN_TYPE_STRING, 1, len+1, prog); - memcpy(output->c.generic.data, string, len); + if(string) + memcpy(output->c.generic.data, string, len); ((char *)output->c.generic.data)[len] = '\0'; return output; } @@ -313,6 +314,7 @@ else { ERRORPUTS("Second argument to Get DString@String must be either a String or a List"); + print_stack_trace(worker_entry->instance); release_ref(inputlist[0]); release_ref(inputlist[1]); return -1; @@ -358,3 +360,57 @@ } return 0; } + +int vis_string_lefttrim(datum ** params, queue_entry * entry) +{ + BOOL isatrimchar; + int i,j; + char *string,*trim_chars; + string = params[0]->c.generic.data; + trim_chars = params[1]->c.generic.data; + isatrimchar = TRUE; + for(i = 0; i < params[0]->c.generic.len-1; ++i) + { + isatrimchar = FALSE; + for(j = 0; j < params[1]->c.generic.len-1; ++j) + if(string[i] == trim_chars[j]) + { + isatrimchar = TRUE; + break; + } + if(!isatrimchar) + break; + } + release_ref(params[1]); + params[1] = params[0]; + params[0] = make_string(string+i, params[1]->c.generic.len-1-i, entry->instance->def->program); + release_ref(params[1]); + return 0; +} + +int vis_string_righttrim(datum ** params, queue_entry * entry) +{ + BOOL isatrimchar; + int i,j; + char *string,*trim_chars; + string = params[0]->c.generic.data; + trim_chars = params[1]->c.generic.data; + isatrimchar = TRUE; + for(i = params[0]->c.generic.len-2; i >= 0 ; --i) + { + isatrimchar = FALSE; + for(j = 0; j < params[1]->c.generic.len-1; ++j) + if(string[i] == trim_chars[j]) + { + isatrimchar = TRUE; + break; + } + if(!isatrimchar) + break; + } + release_ref(params[1]); + params[1] = params[0]; + params[0] = make_string(string, i+1, entry->instance->def->program); + release_ref(params[1]); + return 0; +} \ No newline at end of file