X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Flib%2Fgscplftaaux%2Frts_string.c;h=e9f457dc4d1b07036cc7105228cd27976154c459;hb=87cd81502f23b63c980bbce93b6159379299c782;hp=8c3165767ba77ecb198ef897cc5c3e6deeda8233;hpb=c9783d8ea8b85d810483559e50dbf2297109e349;p=com%2Fgs-lite.git diff --git a/src/lib/gscplftaaux/rts_string.c b/src/lib/gscplftaaux/rts_string.c index 8c31657..e9f457d 100644 --- a/src/lib/gscplftaaux/rts_string.c +++ b/src/lib/gscplftaaux/rts_string.c @@ -57,6 +57,7 @@ gs_retval_t str_replace( struct FTA * f, struct gs_string * dest, struct gs_stri return str_assign_with_copy(f, dest, src); } +// --------------------------------------------------- /* Searching within a string */ @@ -110,15 +111,11 @@ gs_uint32_t byte_match_offset( gs_uint32_t offset, gs_uint32_t val, struct gs_st gs_retval_t str_compare( struct gs_string * str1, struct gs_string * str2) { gs_int32_t len; - gs_int32_t x; + gs_int32_t x, ret; len = (str1->length>str2->length)?str2->length:str1->length; for(x=0;xdata[x]>str2->data[x]) { - return 1; - } - if (str1->data[x]data[x]) { - return -1; - } + if (ret = (str1->data[x]-str2->data[x])) + return ret; } if (str1->length>str2->length) { @@ -130,8 +127,73 @@ gs_retval_t str_compare( struct gs_string * str1, struct gs_string * str2) return 0; } -gs_retval_t str_constructor(struct gs_string *s, gs_sp_t l){ - s->data = l; +gs_retval_t str_equal( struct gs_string * str1, struct gs_string * str2) +{ + gs_int32_t x; + + if (str1->length != str2->length) + return -1; + + for(x=0;xlength;x++) { + if (str1->data[x]!=str2->data[x]) { + return -1; + } + } + + return 0; +} + +//////////////////////////////////// +// Substring functions + +// get last n bytes, if available +// getting the prefix is done by str_truncate, defined in the include file +gs_retval_t str_suffix(struct gs_string * ret, struct gs_string *s, gs_uint32_t n){ + register gs_uint8_t * st = s->data; + int prefix = (n > s->length) ? 0 : s->length-n; + ret->data = st + prefix; + ret->length = s->length-prefix; + ret->owner = 0; + return 0; +} + + +// Split the string on sep, get the i'th substring, if any +gs_retval_t get_list_entry(struct gs_string * ret, struct gs_string *l, struct gs_string *sep, gs_uint32_t pos){ + char s; + gs_int32_t c; + + ret->data = l->data; // empty return string + ret->owner=0; + ret->length = 0; + + if(sep->length > 0){ // get the sep char, ensure the string is nonempty + s = sep->data[0]; + }else{ + return 0; + } + + for(c=0;c < l->length && pos>0; ++c){ + if(l->data[c] == s){ + pos--; + } + } + + if(pos>0 || c >= l->length-1){ // not enough seps, or final string is empty + return 0; + } + + ret->data = l->data + c; + for(; clength && l->data[c] != s; ++c, ++ret->length); + + return 0; +} + + +// ------------------------------------------------------ + +gs_retval_t str_constructor(struct gs_string *s, gs_csp_t l){ + s->data = (gs_sp_t)l; s->length = 0; while(l[s->length] != '\0') s->length++; s->owner = NULL;