mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-28 20:55:39 +00:00
1a6f1a62fa
nsXPIDLStrings are marked as VOIDED upon initialization. Most of these local nsXPIDLString variables are immediately set via getter_Copies(), which will either assign a string value (using Adopt()) or do SetIsVoid(). These can be trivially converted to nsString, which will get the same treatment. The patch suitably converts the remaining nsXPIDLString local variable as well. --HG-- extra : rebase_source : 5fff9f2c6844559198f601853f8db08564add7d5
96 lines
2.3 KiB
C++
96 lines
2.3 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "nsAppRunner.h"
|
|
|
|
#include "prio.h"
|
|
#include "prprf.h"
|
|
#include "prenv.h"
|
|
|
|
#include "nsCRT.h"
|
|
#include "nsNativeCharsetUtils.h"
|
|
#include "nsString.h"
|
|
#include "nsXREDirProvider.h"
|
|
#include "nsXULAppAPI.h"
|
|
|
|
#include "nsIConsoleService.h"
|
|
#include "nsIConsoleMessage.h"
|
|
|
|
void
|
|
WriteConsoleLog()
|
|
{
|
|
nsresult rv;
|
|
|
|
nsCOMPtr<nsIFile> lfile;
|
|
|
|
char* logFileEnv = PR_GetEnv("XRE_CONSOLE_LOG");
|
|
if (logFileEnv && *logFileEnv) {
|
|
rv = XRE_GetFileFromPath(logFileEnv, getter_AddRefs(lfile));
|
|
if (NS_FAILED(rv))
|
|
return;
|
|
}
|
|
else {
|
|
if (!gLogConsoleErrors)
|
|
return;
|
|
|
|
rv = gDirServiceProvider->GetUserAppDataDirectory(getter_AddRefs(lfile));
|
|
if (NS_FAILED(rv))
|
|
return;
|
|
|
|
lfile->AppendNative(NS_LITERAL_CSTRING("console.log"));
|
|
}
|
|
|
|
PRFileDesc *file;
|
|
rv = lfile->OpenNSPRFileDesc(PR_WRONLY | PR_APPEND | PR_CREATE_FILE,
|
|
0660, &file);
|
|
if (NS_FAILED(rv))
|
|
return;
|
|
|
|
nsCOMPtr<nsIConsoleService> csrv
|
|
(do_GetService(NS_CONSOLESERVICE_CONTRACTID));
|
|
if (!csrv) {
|
|
PR_Close(file);
|
|
return;
|
|
}
|
|
|
|
nsIConsoleMessage** messages;
|
|
uint32_t mcount;
|
|
|
|
rv = csrv->GetMessageArray(&mcount, &messages);
|
|
if (NS_FAILED(rv)) {
|
|
PR_Close(file);
|
|
return;
|
|
}
|
|
|
|
if (mcount) {
|
|
PRExplodedTime etime;
|
|
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &etime);
|
|
char datetime[512];
|
|
PR_FormatTimeUSEnglish(datetime, sizeof(datetime),
|
|
"%Y-%m-%d %H:%M:%S", &etime);
|
|
|
|
PR_fprintf(file, NS_LINEBREAK
|
|
"*** Console log: %s ***" NS_LINEBREAK,
|
|
datetime);
|
|
}
|
|
|
|
// From this point on, we have to release all the messages, and free
|
|
// the memory allocated for the messages array. XPCOM arrays suck.
|
|
|
|
nsString msg;
|
|
nsAutoCString nativemsg;
|
|
|
|
for (uint32_t i = 0; i < mcount; ++i) {
|
|
rv = messages[i]->GetMessageMoz(getter_Copies(msg));
|
|
if (NS_SUCCEEDED(rv)) {
|
|
NS_CopyUnicodeToNative(msg, nativemsg);
|
|
PR_fprintf(file, "%s" NS_LINEBREAK, nativemsg.get());
|
|
}
|
|
NS_IF_RELEASE(messages[i]);
|
|
}
|
|
|
|
PR_Close(file);
|
|
free(messages);
|
|
}
|