static bool test_mutation() { nsCStringContainer s; NS_CStringContainerInit(s); const char kText[] = "Every good boy does fine."; char *buf; uint32_t len = NS_CStringGetMutableData(s, sizeof(kText) - 1, &buf); if (!buf || len != sizeof(kText) - 1) return false; memcpy(buf, kText, sizeof(kText)); const char *data; NS_CStringGetData(s, &data); if (strcmp(data, kText) != 0) return false; uint32_t newLen = len + 1; len = NS_CStringGetMutableData(s, newLen, &buf); if (!buf || len != newLen) return false; buf[len - 1] = '.'; NS_CStringGetData(s, &data); if (strncmp(data, kText, len - 1) != 0 || data[len - 1] != '.') return false; NS_CStringContainerFinish(s); return true; }
nsACString::char_type* nsACString::EndWriting() { char_type *data; uint32_t len = NS_CStringGetMutableData(*this, PR_UINT32_MAX, &data); return data + len; }
bool nsACString::SetLength(uint32_t aLen) { char_type *data; NS_CStringGetMutableData(*this, aLen, &data); return data != nullptr; }
nsACString::char_type* nsACString::BeginWriting(uint32_t aLen) { char_type *data; NS_CStringGetMutableData(*this, aLen, &data); return data; }
PRBool nsACString::SetLength(PRUint32 aLen) { char_type *data; NS_CStringGetMutableData(*this, aLen, &data); return data != nsnull; }
uint32_t nsACString::BeginWriting(char_type **begin, char_type **end, uint32_t newSize) { uint32_t len = NS_CStringGetMutableData(*this, newSize, begin); if (end) *end = *begin + len; return len; }
uint32_t nsACString::BeginWriting(char_type** aBegin, char_type** aEnd, uint32_t aNewSize) { uint32_t len = NS_CStringGetMutableData(*this, aNewSize, aBegin); if (aEnd) { *aEnd = *aBegin + len; } return len; }
uint32_t ToUpperCase(const nsACString& aSrc, nsACString& aDest) { const char *begin, *end; uint32_t len = aSrc.BeginReading(&begin, &end); char *dest; NS_CStringGetMutableData(aDest, len, &dest); for (; begin < end; ++begin, ++dest) { *dest = NS_ToUpper(*begin); } return len; }