Пример #1
0
/**
 * 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');
}
Пример #2
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;
  }
}
Пример #3
0
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);
}
Пример #4
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);
}
Пример #5
0
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;
}