X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/69d97910b92419335f6a1b35302ce4b8c1c9b2cc..21988c314858eeaf92a8b81be8e6ce6ee2243607:/tools/tesh2/src/str_replace.c diff --git a/tools/tesh2/src/str_replace.c b/tools/tesh2/src/str_replace.c index f4c275ab7c..efb916bd07 100644 --- a/tools/tesh2/src/str_replace.c +++ b/tools/tesh2/src/str_replace.c @@ -1,73 +1,247 @@ -#include -#include -#include -#include - -#include - -int -str_replace(char** str, const char* what, const char* with) -{ - int pos, i; - char* begin; - char* buf; - - if(!(begin = strstr(*str, what))) - { - errno = ESRCH; - return -1; - } - - pos = begin - *str; - - i = 0; - - /*while(begin[i] != ' ' && begin[i] != '\n' && begin[i] != '\r' && begin[i] != '\0') - i++; - - pos += i; - */ - - pos += strlen(what); - - if(begin == *str) - { - if(!(buf = (char*) calloc(strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) - return -1; - - strcpy(buf, with); - - if(pos < strlen(*str)) - strcpy(buf + strlen(with), *str + pos); - } - else - { - if(!(buf = (char*) calloc((begin - *str) + strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) - return -1; - - strncpy(buf, *str, (begin - *str)); - strcpy(buf + (begin - *str) , with); - - - if(pos < strlen(*str)) - strcpy(buf + (begin - *str) + strlen(with), *str + pos); - } - - free(*str);; - *str = buf; - - return 0; - -} - -int -str_replace_all(char** str, const char* what, const char* with) -{ - int rv; - - while(!(rv = str_replace(str, what, with))); - - return (errno == ESRCH) ? 0 : -1; -} - - +#include +#include +#include +#include + +#include + +/*int +str_replace(char** str, const char* what, const char* with) +{ + size_t pos, i; + char* begin; + char* buf; + + if(!(begin = strstr(*str, what))) + { + errno = ESRCH; + return -1; + } + + pos = begin - *str; + + i = 0; + + pos += strlen(what); + + if(begin == *str) + { + if(!(buf = (char*) calloc(strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + strcpy(buf, with); + + if(pos < strlen(*str)) + strcpy(buf + strlen(with), *str + pos); + } + else + { + if(!(buf = (char*) calloc((begin - *str) + strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + strncpy(buf, *str, (begin - *str)); + strcpy(buf + (begin - *str) , with); + + + if(pos < strlen(*str)) + strcpy(buf + (begin - *str) + strlen(with), *str + pos); + } + + free(*str);; + *str = buf; + + return 0; + +} +*/ + +/* last version int +str_replace(char** str, const char* what, const char* with, const char* delimiters) +{ + size_t pos, i, len; + char* begin; + char* buf; + char* delimited; + int size; + + if(!*str || !what || !with || !delimiters) + { + errno = EINVAL; + return -1; + } + + + if(!(delimited = (char*) calloc((strlen(what) + 2) , sizeof(char)))) + return -1; + + len = strlen(delimiters); + + for(i = 0; i < len; i++) + { + memset(delimited, 0, (strlen(what) + 2)); + + sprintf(delimited,"%s%c", what, delimiters[i]); + + if((begin = strstr(*str, delimited))) + break; + } + + free(delimited); + + + if(!begin && (size = (int)strlen(*str) - (int)strlen(what)) >= 0 && !strcmp(*str + size, what)) + begin = strstr(*str, what); + + if(!begin) + { + errno = ESRCH; + return -1; + } + + pos = begin - *str; + + i = 0; + + pos += strlen(what); + + if(begin == *str) + { + + + if(!(buf = (char*) calloc(strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + strcpy(buf, with); + + if(pos < strlen(*str)) + strcpy(buf + strlen(with), *str + pos); + } + else + { + if(!(buf = (char*) calloc((begin - *str) + strlen(with) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + strncpy(buf, *str, (begin - *str)); + strcpy(buf + (begin - *str) , with); + + if(pos < strlen(*str)) + strcpy(buf + (begin - *str) + strlen(with), *str + pos); + } + + free(*str);; + *str = buf; + + return 0; + +}*/ + +int +str_replace(char** str, const char* what, const char* with, const char* delimiters) +{ + size_t pos, i, len; + char* begin = NULL; + char* buf; + int size; + + if(!*str || !what) + { + errno = EINVAL; + return -1; + } + + if(delimiters) + { + char* delimited; + + if(!(delimited = (char*) calloc((strlen(what) + 2) , sizeof(char)))) + return -1; + + len = strlen(delimiters); + + for(i = 0; i < len; i++) + { + memset(delimited, 0, (strlen(what) + 2)); + + sprintf(delimited,"%s%c", what, delimiters[i]); + + if((begin = strstr(*str, delimited))) + break; + } + + free(delimited); + } + else + begin = strstr(*str, what); + + + if(!begin && (size = (int)strlen(*str) - (int)strlen(what)) >= 0 && !strcmp(*str + size, what)) + begin = strstr(*str, what); + + if(!begin) + { + errno = ESRCH; + return -1; + } + + pos = begin - *str; + + i = 0; + + pos += strlen(what); + + if(begin == *str) + { + if(!(buf = (char*) calloc((with ? strlen(with) : 0) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + if(with) + strcpy(buf, with); + + if(pos < strlen(*str)) + strcpy(buf + (with ? strlen(with) : 0), *str + pos); + } + else + { + if(!(buf = (char*) calloc((begin - *str) + (with ? strlen(with) : 0) + ((pos < strlen(*str)) ? strlen(*str + pos) : 0) + 1, sizeof(char)))) + return -1; + + strncpy(buf, *str, (begin - *str)); + + if(with) + strcpy(buf + (begin - *str) , with); + + if(pos < strlen(*str)) + strcpy(buf + (begin - *str) + (with ? strlen(with) : 0), *str + pos); + } + + free(*str); + + *str = buf; + + return 0; + +} + +int +str_replace_all(char** str, const char* what, const char* with, const char* delimiters) +{ + int rv; + + while(!(rv = str_replace(str, what, with, delimiters))); + + return (errno == ESRCH) ? 0 : -1; +} + + +/*int +str_replace_all(char** str, const char* what, const char* with) +{ + int rv; + + while(!(rv = str_replace(str, what, with))); + + return (errno == ESRCH) ? 0 : -1; +}*/ + + +