nsDependentCSubstring::nsDependentCSubstring(const abstract_string_type& aStr, uint32_t aStartPos) { const char* data; uint32_t len = NS_CStringGetData(aStr, &data); if (aStartPos > len) aStartPos = len; NS_CStringContainerInit2(*this, data + aStartPos, len - aStartPos, NS_CSTRING_CONTAINER_INIT_DEPEND | NS_CSTRING_CONTAINER_INIT_SUBSTRING); }
static bool test_depend() { static const char kData[] = "hello world"; nsCStringContainer s; NS_ENSURE_SUCCESS( NS_CStringContainerInit2(s, kData, sizeof(kData)-1, NS_CSTRING_CONTAINER_INIT_DEPEND), false); const char *sd; NS_CStringGetData(s, &sd); bool rv = (sd == kData); NS_CStringContainerFinish(s); return rv; }
nsDependentCSubstring::nsDependentCSubstring(const abstract_string_type& aStr, PRUint32 aStartPos, PRUint32 aLength) { const char* data; PRUint32 len = NS_CStringGetData(aStr, &data); if (aStartPos > len) aStartPos = len; if (aStartPos + aLength > len) aLength = len - aStartPos; NS_CStringContainerInit2(*this, data + aStartPos, aLength, NS_CSTRING_CONTAINER_INIT_DEPEND | NS_CSTRING_CONTAINER_INIT_SUBSTRING); }
static bool test_depend_sub() { static const char kData[] = "hello world"; nsCStringContainer s; NS_ENSURE_SUCCESS( NS_CStringContainerInit2(s, kData, sizeof(kData)-1, NS_CSTRING_CONTAINER_INIT_DEPEND | NS_CSTRING_CONTAINER_INIT_SUBSTRING), false); bool terminated; const char *sd; uint32_t len = NS_CStringGetData(s, &sd, &terminated); bool rv = (sd == kData && len == sizeof(kData)-1 && !terminated); NS_CStringContainerFinish(s); return rv; }
static bool test_adopt() { static const char kData[] = "hello world"; char *data = (char *) nsMemory::Clone(kData, sizeof(kData)); if (!data) return false; nsCStringContainer s; NS_ENSURE_SUCCESS( NS_CStringContainerInit2(s, data, PR_UINT32_MAX, NS_CSTRING_CONTAINER_INIT_ADOPT), false); // leaks data on failure *shrug* const char *sd; NS_CStringGetData(s, &sd); bool rv = (sd == data); NS_CStringContainerFinish(s); return rv; }
static bool test_adopt_sub() { static const char kData[] = "hello world"; char *data = (char *) nsMemory::Clone(kData, sizeof(kData)-1); if (!data) return false; nsCStringContainer s; NS_ENSURE_SUCCESS( NS_CStringContainerInit2(s, data, sizeof(kData)-1, NS_CSTRING_CONTAINER_INIT_ADOPT | NS_CSTRING_CONTAINER_INIT_SUBSTRING), false); // leaks data on failure *shrug* bool terminated; const char *sd; uint32_t len = NS_CStringGetData(s, &sd, &terminated); bool rv = (sd == data && len == sizeof(kData)-1 && !terminated); NS_CStringContainerFinish(s); return rv; }