/** * Insert specific sub string into the destination string at specific position. */ void string_insert_substring( string_t* pstr_string, size_t t_pos, const string_t* cpstr_insert, size_t t_startpos, size_t t_len) { assert(pstr_string != cpstr_insert); _basic_string_pop_back(pstr_string); basic_string_insert_subcstr(pstr_string, t_pos, string_at(cpstr_insert, t_startpos), t_len); basic_string_push_back(pstr_string, '\0'); }
strings* complete(trie root, char* prefix) { uint32_t i, len; len = strlen(prefix); trie n = root; for(i = 0; n != NULL && i < len; i++) { n = get_child(n, prefix[i]); } if(n == NULL) { return NULL; } else { GSList* suffixes = reversed_suffixes(n); uint32_t len, prefix_len; len = g_slist_length(suffixes); prefix_len = strlen(prefix); strings* res = make_strings(len); string* str; int i,j; char c; // Loop through each suffix. We can't check if i >= 0, since i is unsigned. for(i = len; i--;) { str = g_slist_nth_data(suffixes, 0); // We don't want to include the last item in the prefix // (since it's going to be in the generated suffixes) for(j = 0; j < (int) prefix_len-1; j++) { append_char(string_at(res, i), prefix[j]); } while((c = remove_last_char(str)) != '\0') { append_char(string_at(res, i), c); } suffixes = g_slist_remove(suffixes, str); free(str); } return res; } }
static void socket_uart_callback_data_received(lwip_if_socket_t *socket, unsigned int received) { int current, length; uint8_t byte; bool strip_telnet; telnet_strip_state_t telnet_strip_state; length = string_length(&uart_socket_receive_buffer); strip_telnet = config_flags_match(flag_strip_telnet); telnet_strip_state = ts_copy; for(current = 0; current < length; current++) { byte = string_at(&uart_socket_receive_buffer, current); switch(telnet_strip_state) { case(ts_copy): { if(strip_telnet && (byte == 0xff)) telnet_strip_state = ts_dodont; else { if(uart_full(0)) stat_uart_receive_buffer_overflow++; else uart_send(0, byte); } break; } case(ts_dodont): { telnet_strip_state = ts_data; break; } case(ts_data): { telnet_strip_state = ts_copy; break; } } } string_clear(&uart_socket_receive_buffer); lwip_if_receive_buffer_unlock(socket); uart_flush(0); }
/** * Append specific sub string to destination string. */ void string_append_substring(string_t* pstr_dest, const string_t* cpstr_src, size_t t_pos, size_t t_len) { string_append_subcstr(pstr_dest, string_at(cpstr_src, t_pos), t_len); }
int main(void) { string_t temp; string_t string1 = string_new("hello world"); string_t string2 = string_new("another"); string_t string3 = string_new("a third"); printf("Testing new()...\n"); assert(strcmp("hello world", string1.bytes) == 0); printf("Testing at()...\n"); assert(*string_at(string1, 4) == 'o'); assert(*string_at(string1, -1) == 'd'); assert(string_at(string1, 100) == NULL); assert(string_at(string1, -100) == NULL); printf("Testing cmp()...\n"); assert(string_cmp(string1, string1) == 0); assert(string_cmp(string1, string2) > 0); assert(string_cmp(string2, string1) < 0); printf("Testing eq()...\n"); assert(string_eq(string1, string1)); assert(! string_eq(string1, string2)); printf("Testing cat()...\n"); temp = string_cat(string1, string2); assert(temp.length == string1.length + string2.length); assert(strncmp(string1.bytes, temp.bytes, string1.length) == 0); assert(strcmp(string2.bytes, temp.bytes + string1.length) == 0); string_free(temp); printf("Testing slice()...\n"); temp = string_slice(string1, 1, 6); assert(strcmp(temp.bytes, "ello")); string_free(temp); temp = string_slice(string1, 1, -1); assert(strcmp(temp.bytes, "ello worl") == 0); string_free(temp); temp = string_slice(string1, -5, -2); assert(strcmp(temp.bytes, "wor") == 0); string_free(temp); temp = string_slice(string1, -100, 100); assert(strcmp(temp.bytes, "hello world") == 0); string_free(temp); printf("Testing split()...\n"); string_split_t split = string_split_init(string1, 'o'); temp = string_split_next(&split); assert(strcmp(temp.bytes, "hell") == 0); string_free(temp); temp = string_split_next(&split); assert(strcmp(temp.bytes, " w") == 0); string_free(temp); temp = string_split_next(&split); assert(strcmp(temp.bytes, "rld") == 0); string_free(temp); temp = string_split_next(&split); assert(! temp.bytes); string_free(temp); printf("Testing join()...\n"); string_t parts[] = {string1, string2, string3}; temp = string_join(parts, 3, ' '); assert(strcmp(temp.bytes, "hello world another a third") == 0); string_free(temp); // string_t[] parts = {s1, s2, s3}; // int joined = join(parts, sizeof(parts) / sizeof(*parts)); string_free(string1); string_free(string2); string_free(string3); printf("All tests passed.\n"); return 0; }