diff --git a/mozilla/xpcom/build/nsXPComInit.cpp b/mozilla/xpcom/build/nsXPComInit.cpp index da28c0a1439..fab292998f6 100644 --- a/mozilla/xpcom/build/nsXPComInit.cpp +++ b/mozilla/xpcom/build/nsXPComInit.cpp @@ -104,6 +104,8 @@ #include "nsVariant.h" +#include "nsStringService.h" + #ifdef GC_LEAK_DETECTOR #include "nsLeakDetector.h" #endif @@ -186,6 +188,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsVariant); NS_GENERIC_FACTORY_CONSTRUCTOR(nsRecyclingAllocatorImpl); +NS_GENERIC_FACTORY_CONSTRUCTOR(nsStringService); + #ifdef MOZ_TIMELINE NS_GENERIC_FACTORY_CONSTRUCTOR(nsTimelineService); #endif @@ -364,6 +368,9 @@ static const nsModuleComponentInfo components[] = { COMPONENT(INTERFACEINFOMANAGER_SERVICE, nsXPTIInterfaceInfoManagerGetSingleton), COMPONENT(RECYCLINGALLOCATOR, nsRecyclingAllocatorImplConstructor), + +#define NS_STRING_SERVICE_CLASSNAME "String Service" + COMPONENT(STRING_SERVICE, nsStringServiceConstructor), }; #undef COMPONENT diff --git a/mozilla/xpcom/ds/Makefile.in b/mozilla/xpcom/ds/Makefile.in index d0621355aab..7ea12b14673 100644 --- a/mozilla/xpcom/ds/Makefile.in +++ b/mozilla/xpcom/ds/Makefile.in @@ -63,6 +63,7 @@ CPPSRCS = \ nsSizeOfHandler.cpp \ nsStaticNameTable.cpp \ nsStatistics.cpp \ + nsStringService.cpp \ nsSupportsArray.cpp \ nsSupportsArrayEnumerator.cpp \ nsSupportsPrimitives.cpp \ @@ -119,6 +120,7 @@ XPIDLSRCS = \ nsIRecyclingAllocator.idl \ nsIVariant.idl \ nsISerializable.idl \ + nsIStringService.idl \ nsISupportsArray.idl \ nsISupportsIterators.idl \ nsITimelineService.idl \ diff --git a/mozilla/xpcom/ds/nsIStringService.idl b/mozilla/xpcom/ds/nsIStringService.idl new file mode 100644 index 00000000000..3b2c231ca13 --- /dev/null +++ b/mozilla/xpcom/ds/nsIStringService.idl @@ -0,0 +1,93 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +[ptr] native nsAString(nsAString); +[ptr] native nsACString(nsACString); + +[uuid(1e66d70c-d649-441b-ac90-bf6429ead7da)] +interface nsIStringService : nsISupports +{ + /** + * Creates an nsAString from a |PRUnichar| buffer and length. + * + * @param aString : A unicode string assigned to the new nsAString + * @param aLength : The length of the string to be assigned to the new + * nsAString + */ + + nsAString createAString(in wstring aString, in long aLength); + + /** + * Creates an nsAString from a |char| buffer and lenth. + * + * @param aString : A string assigned to the new nsACString + * @param aLength : The length of the string to be assigned to the new + * nsACString + */ + + nsACString createACString(in string aString, in long aLength); + + /** + * Returns a new |PRUnichar| buffer containing the bytes of |aString|. This new + * buffer may contain embedded null characters. The length of this new buffer + * is given by |aString.Length()|. + * + * Allocates and returns a new |char| buffer which you must free with + * |nsMemory::Free|. + * + * @param aString : The |nsAString| object. + * @return a new |PRUnichar| buffer you must free with |nsMemory::Free|. + */ + + wstring getWString(in AString aString); + + /** + * Returns a new |char| buffer containing the bytes of |aString|. This new + * buffer may contain embedded null characters. The length of this new buffer + * is given by |aString.Length()|. + * + * Allocates and returns a new |char| buffer which you must free with + * |nsMemory::Free|. + * + * @param aString : The |nsACString| object. + * @return a new |char| buffer you must free with |nsMemory::Free|. + */ + + string getString(in ACString aString); +}; diff --git a/mozilla/xpcom/ds/nsStringService.cpp b/mozilla/xpcom/ds/nsStringService.cpp new file mode 100644 index 00000000000..176b82614ef --- /dev/null +++ b/mozilla/xpcom/ds/nsStringService.cpp @@ -0,0 +1,104 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsStringService.h" + +#include "nsString.h" +#include "nsReadableUtils.h" + +nsStringService::nsStringService() +{ + NS_INIT_ISUPPORTS(); +} +nsStringService::~nsStringService() +{ +} + +NS_IMPL_ISUPPORTS1(nsStringService, + nsIStringService); + + +NS_IMETHODIMP +nsStringService::CreateAString(const PRUnichar *aString, PRInt32 aLength, nsAString * *_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + + nsString* string = new nsString(aString, aLength); + if (!string) + return NS_ERROR_OUT_OF_MEMORY; + + *_retval = string; + return NS_OK; +} + +NS_IMETHODIMP +nsStringService::CreateACString(const char *aString, PRInt32 aLength, nsACString * *_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + + nsCString* string = new nsCString(aString, aLength); + if (!string) + return NS_ERROR_OUT_OF_MEMORY; + + *_retval = string; + return NS_OK; +} + +NS_IMETHODIMP +nsStringService::GetString(const nsACString & aString, char **_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + + *_retval = ToNewCString(aString); + if (!*_retval) + return NS_ERROR_OUT_OF_MEMORY; + + return NS_OK; +} + +NS_IMETHODIMP +nsStringService::GetWString(const nsAString & aString, PRUnichar **_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + + *_retval = ToNewUnicode(aString); + if (!*_retval) + return NS_ERROR_OUT_OF_MEMORY; + + return NS_OK; +} + diff --git a/mozilla/xpcom/ds/nsStringService.h b/mozilla/xpcom/ds/nsStringService.h new file mode 100644 index 00000000000..12db353f34f --- /dev/null +++ b/mozilla/xpcom/ds/nsStringService.h @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsStringService_h___ +#define nsStringService_h___ + +#include "nsIStringService.h" + +#define NS_STRING_SERVICE_CID \ +{ \ + 0xa0cf8375, \ + 0x0b98, \ + 0x44f5, \ + {0x97, 0x3f, 0xb2, 0xef, 0xa1, 0xda, 0x67, 0x1e} \ +} + +#define NS_STRING_SERVICE_CONTRACTID "@mozilla.org/stringService;1" + +class nsStringService : public nsIStringService { + +public: + NS_DECL_ISUPPORTS + NS_DECL_NSISTRINGSERVICE + + nsStringService(); + virtual ~nsStringService(); +}; + +#endif diff --git a/mozilla/xpcom/glue/nsGenericFactory.cpp b/mozilla/xpcom/glue/nsGenericFactory.cpp index 9e161530107..0b40f630ca3 100644 --- a/mozilla/xpcom/glue/nsGenericFactory.cpp +++ b/mozilla/xpcom/glue/nsGenericFactory.cpp @@ -51,6 +51,7 @@ #include "nsIFile.h" #include "nsDirectoryServiceDefs.h" #include "nsDirectoryService.h" +#include "nsIStringService.h" #endif nsGenericFactory::nsGenericFactory(const nsModuleComponentInfo *info) @@ -296,10 +297,29 @@ nsGenericModule::Initialize(nsIComponentManager *compMgr) rv = dirService->Get(NS_XPCOM_LIBRARY_FILE, NS_GET_IID(nsIFile), getter_AddRefs(xpcomDll)); if (NS_FAILED(rv)) return rv; + + nsCOMPtr stringService; + rv = servMgr->GetServiceByContractID("@mozilla.org/stringService;1", + NS_GET_IID(nsIStringService), + getter_AddRefs(stringService)); + if (NS_FAILED(rv)) + return rv; - nsCAutoString path; - xpcomDll->GetNativePath(path); - rv = XPCOMGlueStartup(path.get()); + nsACString *path; + stringService->CreateACString("", 0, &path); + + rv = xpcomDll->GetNativePath(*path); + if (NS_FAILED(rv)) + return rv; + + char* cPath; + rv = stringService->GetString(*path, &cPath); + if (NS_FAILED(rv)) + return rv; + + rv = XPCOMGlueStartup(cPath); + + nsMemory::Free(cPath); if (NS_FAILED(rv)) return rv;