mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-25 11:58:55 +00:00
landing patch for bug 239716 "inout wstring methods are difficult to implement with nsEmbedString" patch by marco@gnome.org r=darin sr=dbaron
This commit is contained in:
parent
c4323e6baf
commit
edc1e0d23c
@ -78,6 +78,12 @@ NS_StringGetData(const nsAString &aStr, const PRUnichar **aData,
|
||||
return begin.size_forward();
|
||||
}
|
||||
|
||||
NS_STRINGAPI(PRUnichar *)
|
||||
NS_StringCloneData(const nsAString &aStr)
|
||||
{
|
||||
return ToNewUnicode(aStr);
|
||||
}
|
||||
|
||||
NS_STRINGAPI(nsresult)
|
||||
NS_StringSetData(nsAString &aStr, const PRUnichar *aData, PRUint32 aDataLength)
|
||||
{
|
||||
@ -157,6 +163,12 @@ NS_CStringGetData(const nsACString &aStr, const char **aData,
|
||||
return begin.size_forward();
|
||||
}
|
||||
|
||||
NS_STRINGAPI(char *)
|
||||
NS_CStringCloneData(const nsACString &aStr)
|
||||
{
|
||||
return ToNewCString(aStr);
|
||||
}
|
||||
|
||||
NS_STRINGAPI(nsresult)
|
||||
NS_CStringSetData(nsACString &aStr, const char *aData, PRUint32 aDataLength)
|
||||
{
|
||||
|
@ -76,38 +76,40 @@ NS_UnregisterXPCOMExitRoutine(XPCOMExitRoutine exitRoutine);
|
||||
|
||||
|
||||
// PUBLIC
|
||||
typedef nsresult (* InitFunc)(nsIServiceManager* *result, nsIFile* binDirectory, nsIDirectoryServiceProvider* appFileLocationProvider);
|
||||
typedef nsresult (* ShutdownFunc)(nsIServiceManager* servMgr);
|
||||
typedef nsresult (* GetServiceManagerFunc)(nsIServiceManager* *result);
|
||||
typedef nsresult (* GetComponentManagerFunc)(nsIComponentManager* *result);
|
||||
typedef nsresult (* GetComponentRegistrarFunc)(nsIComponentRegistrar* *result);
|
||||
typedef nsresult (* GetMemoryManagerFunc)(nsIMemory* *result);
|
||||
typedef nsresult (* NewLocalFileFunc)(const nsAString &path, PRBool followLinks, nsILocalFile* *result);
|
||||
typedef nsresult (* NewNativeLocalFileFunc)(const nsACString &path, PRBool followLinks, nsILocalFile* *result);
|
||||
typedef nsresult (* InitFunc)(nsIServiceManager* *result, nsIFile* binDirectory, nsIDirectoryServiceProvider* appFileLocationProvider);
|
||||
typedef nsresult (* ShutdownFunc)(nsIServiceManager* servMgr);
|
||||
typedef nsresult (* GetServiceManagerFunc)(nsIServiceManager* *result);
|
||||
typedef nsresult (* GetComponentManagerFunc)(nsIComponentManager* *result);
|
||||
typedef nsresult (* GetComponentRegistrarFunc)(nsIComponentRegistrar* *result);
|
||||
typedef nsresult (* GetMemoryManagerFunc)(nsIMemory* *result);
|
||||
typedef nsresult (* NewLocalFileFunc)(const nsAString &path, PRBool followLinks, nsILocalFile* *result);
|
||||
typedef nsresult (* NewNativeLocalFileFunc)(const nsACString &path, PRBool followLinks, nsILocalFile* *result);
|
||||
|
||||
typedef nsresult (* GetDebugFunc)(nsIDebug* *result);
|
||||
typedef nsresult (* GetTraceRefcntFunc)(nsITraceRefcnt* *result);
|
||||
typedef nsresult (* GetDebugFunc)(nsIDebug* *result);
|
||||
typedef nsresult (* GetTraceRefcntFunc)(nsITraceRefcnt* *result);
|
||||
|
||||
typedef nsresult (* StringContainerInitFunc)(nsStringContainer&);
|
||||
typedef void (* StringContainerFinishFunc)(nsStringContainer&);
|
||||
typedef PRUint32 (* StringGetDataFunc)(const nsAString&, const PRUnichar**, PRBool*);
|
||||
typedef nsresult (* StringSetDataFunc)(nsAString&, const PRUnichar*, PRUint32);
|
||||
typedef nsresult (* StringSetDataRangeFunc)(nsAString&, PRUint32, PRUint32, const PRUnichar*, PRUint32);
|
||||
typedef nsresult (* StringCopyFunc)(nsAString &, const nsAString &);
|
||||
typedef nsresult (* StringContainerInitFunc)(nsStringContainer&);
|
||||
typedef void (* StringContainerFinishFunc)(nsStringContainer&);
|
||||
typedef PRUint32 (* StringGetDataFunc)(const nsAString&, const PRUnichar**, PRBool*);
|
||||
typedef PRUnichar* (* StringCloneDataFunc)(const nsAString&);
|
||||
typedef nsresult (* StringSetDataFunc)(nsAString&, const PRUnichar*, PRUint32);
|
||||
typedef nsresult (* StringSetDataRangeFunc)(nsAString&, PRUint32, PRUint32, const PRUnichar*, PRUint32);
|
||||
typedef nsresult (* StringCopyFunc)(nsAString &, const nsAString &);
|
||||
|
||||
typedef nsresult (* CStringContainerInitFunc)(nsCStringContainer&);
|
||||
typedef void (* CStringContainerFinishFunc)(nsCStringContainer&);
|
||||
typedef PRUint32 (* CStringGetDataFunc)(const nsACString&, const char**, PRBool*);
|
||||
typedef nsresult (* CStringSetDataFunc)(nsACString&, const char*, PRUint32);
|
||||
typedef nsresult (* CStringSetDataRangeFunc)(nsACString&, PRUint32, PRUint32, const char*, PRUint32);
|
||||
typedef nsresult (* CStringCopyFunc)(nsACString &, const nsACString &);
|
||||
typedef nsresult (* CStringContainerInitFunc)(nsCStringContainer&);
|
||||
typedef void (* CStringContainerFinishFunc)(nsCStringContainer&);
|
||||
typedef PRUint32 (* CStringGetDataFunc)(const nsACString&, const char**, PRBool*);
|
||||
typedef char* (* CStringCloneDataFunc)(const nsACString&);
|
||||
typedef nsresult (* CStringSetDataFunc)(nsACString&, const char*, PRUint32);
|
||||
typedef nsresult (* CStringSetDataRangeFunc)(nsACString&, PRUint32, PRUint32, const char*, PRUint32);
|
||||
typedef nsresult (* CStringCopyFunc)(nsACString &, const nsACString &);
|
||||
|
||||
typedef nsresult (* CStringToUTF16)(const nsACString &, PRUint32, const nsAString &);
|
||||
typedef nsresult (* UTF16ToCString)(const nsAString &, PRUint32, const nsACString &);
|
||||
typedef nsresult (* CStringToUTF16)(const nsACString &, PRUint32, const nsAString &);
|
||||
typedef nsresult (* UTF16ToCString)(const nsAString &, PRUint32, const nsACString &);
|
||||
|
||||
// PRIVATE
|
||||
typedef nsresult (* RegisterXPCOMExitRoutineFunc)(XPCOMExitRoutine exitRoutine, PRUint32 priority);
|
||||
typedef nsresult (* UnregisterXPCOMExitRoutineFunc)(XPCOMExitRoutine exitRoutine);
|
||||
typedef nsresult (* RegisterXPCOMExitRoutineFunc)(XPCOMExitRoutine exitRoutine, PRUint32 priority);
|
||||
typedef nsresult (* UnregisterXPCOMExitRoutineFunc)(XPCOMExitRoutine exitRoutine);
|
||||
|
||||
typedef struct XPCOMFunctions{
|
||||
PRUint32 version;
|
||||
@ -144,7 +146,9 @@ typedef struct XPCOMFunctions{
|
||||
CStringCopyFunc cstringCopy;
|
||||
CStringToUTF16 cstringToUTF16;
|
||||
UTF16ToCString utf16ToCString;
|
||||
|
||||
StringCloneDataFunc stringCloneData;
|
||||
CStringCloneDataFunc cstringCloneData;
|
||||
|
||||
} XPCOMFunctions;
|
||||
|
||||
typedef nsresult (PR_CALLBACK *GetFrozenFunctionsFunc)(XPCOMFunctions *entryPoints, const char* libraryPath);
|
||||
|
@ -860,7 +860,7 @@ NS_GetFrozenFunctions(XPCOMFunctions *functions, const char* libraryPath)
|
||||
}
|
||||
|
||||
// these functions were added post 1.6 (need to check size of |functions|)
|
||||
if (functions->size > offsetof(XPCOMFunctions, utf16ToCString)) {
|
||||
if (functions->size > offsetof(XPCOMFunctions, cstringCloneData)) {
|
||||
GET_FUNC(stringContainerInit, StringContainerInitFunc, "NS_StringContainerInit");
|
||||
GET_FUNC(stringContainerFinish, StringContainerFinishFunc, "NS_StringContainerFinish");
|
||||
GET_FUNC(stringGetData, StringGetDataFunc, "NS_StringGetData");
|
||||
@ -875,6 +875,8 @@ NS_GetFrozenFunctions(XPCOMFunctions *functions, const char* libraryPath)
|
||||
GET_FUNC(cstringCopy, CStringCopyFunc, "NS_CStringCopy");
|
||||
GET_FUNC(cstringToUTF16, CStringToUTF16, "NS_CStringToUTF16");
|
||||
GET_FUNC(utf16ToCString, UTF16ToCString, "NS_UTF16ToCString");
|
||||
GET_FUNC(stringCloneData, StringCloneDataFunc, "NS_StringCloneData");
|
||||
GET_FUNC(cstringCloneData, CStringCloneDataFunc, "NS_CStringCloneData");
|
||||
}
|
||||
|
||||
rv = NS_OK;
|
||||
|
@ -288,6 +288,14 @@ NS_StringGetData(const nsAString &aStr, const PRUnichar **aBuf, PRBool *aTerm)
|
||||
return xpcomFunctions.stringGetData(aStr, aBuf, aTerm);
|
||||
}
|
||||
|
||||
extern "C" NS_COM PRUnichar *
|
||||
NS_StringCloneData(const nsAString &aStr)
|
||||
{
|
||||
if (!xpcomFunctions.stringCloneData)
|
||||
return nsnull;
|
||||
return xpcomFunctions.stringCloneData(aStr);
|
||||
}
|
||||
|
||||
extern "C" NS_COM nsresult
|
||||
NS_StringSetData(nsAString &aStr, const PRUnichar *aBuf, PRUint32 aCount)
|
||||
{
|
||||
@ -340,6 +348,14 @@ NS_CStringGetData(const nsACString &aStr, const char **aBuf, PRBool *aTerm)
|
||||
return xpcomFunctions.cstringGetData(aStr, aBuf, aTerm);
|
||||
}
|
||||
|
||||
extern "C" NS_COM char *
|
||||
NS_CStringCloneData(const nsACString &aStr)
|
||||
{
|
||||
if (!xpcomFunctions.cstringCloneData)
|
||||
return nsnull;
|
||||
return xpcomFunctions.cstringCloneData(aStr);
|
||||
}
|
||||
|
||||
extern "C" NS_COM nsresult
|
||||
NS_CStringSetData(nsACString &aStr, const char *aBuf, PRUint32 aCount)
|
||||
{
|
||||
|
@ -172,6 +172,22 @@ NS_StringGetData
|
||||
(const nsAString &aStr, const PRUnichar **aData,
|
||||
PRBool *aTerminated = nsnull);
|
||||
|
||||
/**
|
||||
* NS_StringGetData
|
||||
*
|
||||
* This function returns a null-terminated copy of the string's
|
||||
* internal buffer.
|
||||
*
|
||||
* @param aStr abstract string reference
|
||||
* @return null-terminated copy of the string's internal buffer
|
||||
* (it must be free'd using using nsMemory::Free)
|
||||
*
|
||||
* @status FROZEN
|
||||
*/
|
||||
NS_STRINGAPI(PRUnichar *)
|
||||
NS_StringCloneData
|
||||
(const nsAString &aStr);
|
||||
|
||||
/**
|
||||
* NS_StringSetData
|
||||
*
|
||||
@ -381,6 +397,22 @@ NS_CStringGetData
|
||||
(const nsACString &aStr, const char **aData,
|
||||
PRBool *aTerminated = nsnull);
|
||||
|
||||
/**
|
||||
* NS_CStringGetData
|
||||
*
|
||||
* This function returns a null-terminated copy of the string's
|
||||
* internal buffer.
|
||||
*
|
||||
* @param aStr abstract string reference
|
||||
* @return null-terminated copy of the string's internal buffer
|
||||
* (it must be free'd using using nsMemory::Free)
|
||||
*
|
||||
* @status FROZEN
|
||||
*/
|
||||
NS_STRINGAPI(char *)
|
||||
NS_CStringCloneData
|
||||
(const nsACString &aStr);
|
||||
|
||||
/**
|
||||
* NS_CStringSetData
|
||||
*
|
||||
|
@ -78,6 +78,12 @@ NS_StringGetData(const nsAString &aStr, const PRUnichar **aData,
|
||||
return begin.size_forward();
|
||||
}
|
||||
|
||||
NS_STRINGAPI(PRUnichar *)
|
||||
NS_StringCloneData(const nsAString &aStr)
|
||||
{
|
||||
return ToNewUnicode(aStr);
|
||||
}
|
||||
|
||||
NS_STRINGAPI(nsresult)
|
||||
NS_StringSetData(nsAString &aStr, const PRUnichar *aData, PRUint32 aDataLength)
|
||||
{
|
||||
@ -157,6 +163,12 @@ NS_CStringGetData(const nsACString &aStr, const char **aData,
|
||||
return begin.size_forward();
|
||||
}
|
||||
|
||||
NS_STRINGAPI(char *)
|
||||
NS_CStringCloneData(const nsACString &aStr)
|
||||
{
|
||||
return ToNewCString(aStr);
|
||||
}
|
||||
|
||||
NS_STRINGAPI(nsresult)
|
||||
NS_CStringSetData(nsACString &aStr, const char *aData, PRUint32 aDataLength)
|
||||
{
|
||||
|
@ -51,6 +51,7 @@ static PRBool test_basic_1()
|
||||
|
||||
const char *ptr;
|
||||
PRUint32 len;
|
||||
char *clone;
|
||||
|
||||
NS_CStringGetData(s, &ptr);
|
||||
if (ptr == nsnull || *ptr != '\0')
|
||||
@ -72,6 +73,14 @@ static PRBool test_basic_1()
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
clone = NS_CStringCloneData(s);
|
||||
if (ptr == nsnull || strcmp(ptr, kAsciiData) != 0)
|
||||
{
|
||||
NS_ERROR("unexpected result");
|
||||
return PR_FALSE;
|
||||
}
|
||||
nsMemory::Free(clone);
|
||||
|
||||
nsCStringContainer temp;
|
||||
NS_CStringContainerInit(temp);
|
||||
NS_CStringCopy(temp, s);
|
||||
@ -101,6 +110,7 @@ static PRBool test_basic_2()
|
||||
|
||||
const PRUnichar *ptr;
|
||||
PRUint32 len;
|
||||
PRUnichar *clone;
|
||||
|
||||
NS_StringGetData(s, &ptr);
|
||||
if (ptr == nsnull || *ptr != '\0')
|
||||
@ -122,6 +132,14 @@ static PRBool test_basic_2()
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
clone = NS_StringCloneData(s);
|
||||
if (ptr == nsnull || nsCRT::strcmp(ptr, kUnicodeData) != 0)
|
||||
{
|
||||
NS_ERROR("unexpected result");
|
||||
return PR_FALSE;
|
||||
}
|
||||
nsMemory::Free(clone);
|
||||
|
||||
nsStringContainer temp;
|
||||
NS_StringContainerInit(temp);
|
||||
NS_StringCopy(temp, s);
|
||||
|
Loading…
x
Reference in New Issue
Block a user