Ejemplo n.º 1
0
void g_string_append_c(GString* baseString, char appendedCharacter)
{
    size_t newSizeNeeded = baseString->currentStringLength + 1;
    ensureStringBufferCanHold(baseString, newSizeNeeded);
    
    baseString->str[baseString->currentStringLength] = appendedCharacter;
    baseString->currentStringLength++;
    baseString->str[baseString->currentStringLength] = '\0';
}
Ejemplo n.º 2
0
void g_string_append(GString* baseString, char* appendedString)
{
	if ((appendedString != NULL) && (strlen(appendedString) > 0))
	{
		size_t appendedStringLength = strlen(appendedString);
		size_t newStringLength = baseString->currentStringLength + appendedStringLength;
		ensureStringBufferCanHold(baseString, newStringLength);

		strncat(baseString->str + baseString->currentStringLength, appendedString, appendedStringLength);
		baseString->currentStringLength = newStringLength;
	}
}
Ejemplo n.º 3
0
void Test_ensureStringBufferCanHold(CuTest* tc) {
	char * test = "foo";

	DString * result = d_string_new(test);

	ensureStringBufferCanHold(result, 1024);
	CuAssertIntEquals(tc, 2048, result->currentStringBufferSize);

	ensureStringBufferCanHold(result, 1024);
	CuAssertIntEquals(tc, 2048, result->currentStringBufferSize);

	/* This becomes 0 after we add 1 for the '\0' */
	ensureStringBufferCanHold(result, -1);
	CuAssertIntEquals(tc, 2048, result->currentStringBufferSize);

	ensureStringBufferCanHold(result, 1024 * 1024 - 1);
	CuAssertIntEquals(tc, 1024 * 1024, result->currentStringBufferSize);

	ensureStringBufferCanHold(result, 1024 * 1024 - 1);
	CuAssertIntEquals(tc, 1024 * 1024, result->currentStringBufferSize);

	ensureStringBufferCanHold(NULL, 1024);

	d_string_free(result, true);
}
Ejemplo n.º 4
0
void g_string_append(GString* baseString, char* appendedString)
{
    if ((appendedString != NULL) && (strlen(appendedString) > 0))
    {
        size_t appendedStringLength = strlen(appendedString);
        size_t newStringLength = baseString->currentStringLength + appendedStringLength;
        ensureStringBufferCanHold(baseString, newStringLength);

        /* We already know where the current string ends, so pass that as the starting address for strncat */
        strncat(baseString->str + baseString->currentStringLength, appendedString, appendedStringLength);
        baseString->currentStringLength = newStringLength;
    }
}
Ejemplo n.º 5
0
void g_string_prepend(GString* baseString, char* prependedString)
{
    if ((prependedString != NULL) && (strlen(prependedString) > 0))
    {
        size_t prependedStringLength = strlen(prependedString);
        size_t newStringLength = baseString->currentStringLength + prependedStringLength;
        ensureStringBufferCanHold(baseString, newStringLength);

        memmove(baseString->str + prependedStringLength, baseString->str, baseString->currentStringLength);
        strncpy(baseString->str, prependedString, prependedStringLength);
        baseString->currentStringLength = newStringLength;
        baseString->str[baseString->currentStringLength] = '\0';
    }
}
Ejemplo n.º 6
0
/// Append null-terminated string to end of dynamic string
void d_string_append(DString * baseString, const char * appendedString) {
	if (baseString && appendedString) {
		size_t appendedStringLength = strlen(appendedString);

		if (appendedStringLength > 0) {
			size_t newStringLength = baseString->currentStringLength + appendedStringLength;
			ensureStringBufferCanHold(baseString, newStringLength);

			/* We already know where the current string ends, so pass that as the starting address for strncat */
			strncat(baseString->str + baseString->currentStringLength, appendedString, appendedStringLength);
			baseString->currentStringLength = newStringLength;
		}
	}
}
Ejemplo n.º 7
0
/// Prepend null-terminated string to end of dynamic string
void d_string_prepend(DString * baseString, const char * prependedString) {
	if (baseString && prependedString) {
		size_t prependedStringLength = strlen(prependedString);

		if (prependedStringLength > 0) {
			size_t newStringLength = baseString->currentStringLength + prependedStringLength;
			ensureStringBufferCanHold(baseString, newStringLength);

			memmove(baseString->str + prependedStringLength, baseString->str, baseString->currentStringLength);
			strncpy(baseString->str, prependedString, prependedStringLength);
			baseString->currentStringLength = newStringLength;
			baseString->str[baseString->currentStringLength] = '\0';
		}
	}
}
Ejemplo n.º 8
0
/// Insert single character inside dynamic string
void d_string_insert_c(DString * baseString, size_t pos, char insertedCharacter) {
	if (baseString && insertedCharacter) {
		if (pos > baseString->currentStringLength) {
			pos = baseString->currentStringLength;
		}

		size_t newSizeNeeded = baseString->currentStringLength + 1;
		ensureStringBufferCanHold(baseString, newSizeNeeded);

		/* Shift following string to 'right' */
		memmove(baseString->str + pos + 1, baseString->str + pos, baseString->currentStringLength - pos);

		baseString->str[pos] = insertedCharacter;
		baseString->currentStringLength++;
		baseString->str[baseString->currentStringLength] = '\0';
	}
}
Ejemplo n.º 9
0
/// Append array of characters to end of dynamic string
void d_string_append_c_array(DString * baseString, const char * appendedChars, size_t bytes) {
	if (baseString && appendedChars) {
		if (bytes == -1) {
			// This is the same as regular append
			d_string_append(baseString, appendedChars);
		} else {
			if (appendedChars) {
				size_t newSizeNeeded = baseString->currentStringLength + bytes;
				ensureStringBufferCanHold(baseString, newSizeNeeded);

				memcpy((void*)baseString->str + baseString->currentStringLength, appendedChars, bytes);

				baseString->currentStringLength = newSizeNeeded;
				baseString->str[newSizeNeeded] = '\0';
			}
		}
	}
}
Ejemplo n.º 10
0
/// Insert null-terminated string inside dynamic string
void d_string_insert(DString * baseString, size_t pos, const char * insertedString) {
	if (baseString && insertedString) {
		size_t insertedStringLength = strlen(insertedString);

		if (insertedStringLength > 0) {
			if (pos > baseString->currentStringLength) {
				pos = baseString->currentStringLength;
			}

			size_t newStringLength = baseString->currentStringLength + insertedStringLength;
			ensureStringBufferCanHold(baseString, newStringLength);

			/* Shift following string to 'right' */
			memmove(baseString->str + pos + insertedStringLength, baseString->str + pos, baseString->currentStringLength - pos);
			strncpy(baseString->str + pos, insertedString, insertedStringLength);
			baseString->currentStringLength = newStringLength;
			baseString->str[baseString->currentStringLength] = '\0';
		}
	}
}