зеркало из https://github.com/mozilla/gecko-dev.git
2177 строки
52 KiB
C++
2177 строки
52 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#include "nsNetStubs.h"
|
|
|
|
#include "nspr.h"
|
|
#include "xp_hash.h"
|
|
#include "xp_file.h"
|
|
#include "libi18n.h"
|
|
#include "libevent.h"
|
|
#include "mkgeturl.h"
|
|
#include "net.h"
|
|
#include "nsIRefreshUrl.h"
|
|
#include "nsString.h"
|
|
#include "nsNetStream.h"
|
|
#include "intl_csi.h"
|
|
|
|
#ifdef NS_NET_FILE
|
|
|
|
extern char *USER_DIR;
|
|
extern char *CACHE_DIR;
|
|
extern char *DEF_DIR;
|
|
|
|
// For xp to ns file translation
|
|
#include "nsINetFile.h"
|
|
#include "nsVoidArray.h"
|
|
#include "direct.h"
|
|
|
|
// The nsINetfile
|
|
static nsINetFile *fileMgr = nsnull;
|
|
|
|
typedef struct _xp_to_nsFile {
|
|
nsFile *nsFp;
|
|
XP_File xpFp;
|
|
} xpNSFile;
|
|
|
|
// Array of translation structs from xp to ns file.
|
|
static nsVoidArray switchBack;
|
|
|
|
// end xp to ns file translation
|
|
|
|
#endif // NS_NET_FILE
|
|
|
|
extern "C" {
|
|
#include "secnav.h"
|
|
#include "preenc.h"
|
|
}
|
|
|
|
/* From libimg */
|
|
#define OPAQUE_CONTEXT void
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/intl_csi.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
extern "C" {
|
|
|
|
#if defined(XP_UNIX) || defined(XP_MAC)
|
|
DB *
|
|
dbopen(const char */*fname*/, int /*flags*/,int /*mode*/, DBTYPE /*type*/,
|
|
const void */*openinfo*/)
|
|
{
|
|
#if defined(XP_MAC)
|
|
PR_ASSERT(FALSE);
|
|
#endif
|
|
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
/* Meta charset is weakest. Only set doc_csid if no http or override */
|
|
void
|
|
INTL_SetCSIDocCSID (INTL_CharSetInfo /*c*/, int16 /*doc_csid*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
int16
|
|
INTL_GetCSIDocCSID(INTL_CharSetInfo /*c*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void
|
|
INTL_SetCSIWinCSID(INTL_CharSetInfo /*c*/, int16 /*win_csid*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
int16
|
|
INTL_GetCSIWinCSID(INTL_CharSetInfo /*c*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
INTL_CharSetInfo
|
|
LO_GetDocumentCharacterSetInfo(MWContext */*context*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/acptlang.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* INTL_GetAcceptCharset() */
|
|
/* return the AcceptCharset from XP Preference */
|
|
/* this should be a C style NULL terminated string */
|
|
char* INTL_GetAcceptCharset()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/* INTL_GetAcceptLanguage() */
|
|
/* return the AcceptLanguage from XP Preference */
|
|
/* this should be a C style NULL terminated string */
|
|
char* INTL_GetAcceptLanguage()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/net_junk.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
PUBLIC Stream *
|
|
INTL_ConvCharCode (int /*format_out*/,
|
|
void */*data_obj*/,
|
|
URL_Struct */*URL_s*/,
|
|
MWContext */*mwcontext*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/cvchcode.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* INTL_GetCharCodeConverter:
|
|
* RETURN: 1 if converter found, else 0
|
|
* Also, sets:
|
|
* obj->cvtfunc: function handle for chararcter
|
|
* code set streams converter
|
|
* obj->cvtflag: (Optional) flag to converter
|
|
* function
|
|
* obj->from_csid: Code set converting from
|
|
* obj->to_csid: Code set converting to
|
|
* If the arg to_csid==0, then use the the conversion for the
|
|
* first conversion entry that matches the from_csid.
|
|
*/
|
|
int
|
|
INTL_GetCharCodeConverter(register int16 /*from_csid*/,
|
|
register int16 /*to_csid*/,
|
|
CCCDataObject /*obj*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
CCCDataObject
|
|
INTL_CreateCharCodeConverter()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
unsigned char *
|
|
INTL_CallCharCodeConverter(CCCDataObject /*obj*/, const unsigned char */*buf*/,
|
|
int32 /*bufsz*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
void
|
|
INTL_DestroyCharCodeConverter(CCCDataObject /*obj*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/csnamefn.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
int16
|
|
INTL_CharSetNameToID(char */*charset*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/ucs2.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
uint32 INTL_TextToUnicode(
|
|
INTL_Encoding_ID /*encoding*/,
|
|
unsigned char* /*src*/,
|
|
uint32 /*srclen*/,
|
|
INTL_Unicode* /*ustr*/,
|
|
uint32 /*ubuflen*/
|
|
)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
uint32 INTL_TextToUnicodeLen(
|
|
INTL_Encoding_ID /*encoding*/,
|
|
unsigned char* /*src*/,
|
|
uint32 /*srclen*/
|
|
)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/fe_ccc.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
INTL_DocToWinCharSetID,
|
|
Based on DefaultDocCSID, it determines which Win CSID to use for Display
|
|
*/
|
|
/*
|
|
|
|
To Do: (ftang)
|
|
|
|
We should seperate the DocToWinCharSetID logic from the cscvt_t table
|
|
for Cyrillic users.
|
|
|
|
*/
|
|
int16 INTL_DocToWinCharSetID(int16 /*csid*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return CS_FE_ASCII;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libi18n/doc_ccc.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
PUBLIC void INTL_CCCReportMetaCharsetTag(MWContext */*context*/, char */*charset_tag*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/authdll.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
char * WFE_BuildCompuserveAuthString(URL_Struct */*URL_s*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
int
|
|
WFE_DoCompuserveAuthenticate(MWContext */*context*/,
|
|
URL_Struct */*URL_s*/,
|
|
char */*authenticate_header_value*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NET_AUTH_FAILED_DONT_DISPLAY;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/regproto.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
// Purpose: See if we're supposed to handle a specific protocol differently.
|
|
// Arguments: pContext The context.
|
|
// iFormatOut The format out (possibly saving).
|
|
// pURL The URL to load.
|
|
// pExitFunc The URL exit routine. If we handle the protocol, we use the function.
|
|
//Returns: BOOL TRUE We want to handle the protocol here.
|
|
// FALSE Netlib continues to handle the protocol.
|
|
//Comments: To work with certain DDE topics which can cause URLs of a specific protocol type to be handled by another
|
|
// application.
|
|
//Revision History:
|
|
// 01-17-95 created GAB
|
|
//
|
|
|
|
XP_Bool FE_UseExternalProtocolModule(MWContext */*pContext*/, FO_Present_Types /*iFormatOut*/,
|
|
URL_Struct */*pURL*/,
|
|
Net_GetUrlExitFunc */*pExitFunc*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/femess.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
//
|
|
// Prompt the user for a local file name
|
|
//
|
|
int FE_PromptForFileName(MWContext */*context*/,
|
|
const char */*prompt_string*/,
|
|
const char */*default_path*/,
|
|
XP_Bool /*file_must_exist_p*/,
|
|
XP_Bool /*directories_allowed_p*/,
|
|
ReadFileNameCallbackFunction /*fn*/,
|
|
void */*closure*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return -1;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/fegui.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
// Return some spanked out full path on the mac.
|
|
// For windows, we just return what was passed in.
|
|
// We must provide it in a seperate buffer, otherwise they might change
|
|
// the original and change also what they believe to be saved.
|
|
char *WH_FilePlatformName(const char */*pName*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
// Purpose: Set a delayed load timer for a window for a particular URL.
|
|
// Arguments: pContext The context that we're in. We are only interested on wether or not there appears to be a Frame/hence document.
|
|
// ulSeconds The number of seconds that will pass before we attempt the reload.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-17-95 created GAB
|
|
// 07-22-95 modified to use new context.
|
|
// 05-03-96 modified to use new API outside of idle loop.
|
|
//
|
|
|
|
NS_DEFINE_IID(kRefreshURLIID, NS_IREFRESHURL_IID);
|
|
|
|
void FE_SetRefreshURLTimer(MWContext *pContext, URL_Struct *URL_s)
|
|
{
|
|
nsresult rv;
|
|
nsIRefreshUrl* IRefreshURL=nsnull;
|
|
nsString refreshURL(URL_s->refresh_url);
|
|
nsConnectionInfo* pConn;
|
|
|
|
NS_PRECONDITION((URL_s != nsnull), "Null pointer...");
|
|
NS_PRECONDITION((pContext != nsnull), "Null pointer...");
|
|
NS_PRECONDITION((pContext->modular_data != nsnull), "Null pointer...");
|
|
NS_PRECONDITION((pContext->modular_data->fe_data != nsnull), "Null pointer...");
|
|
|
|
// Get the nsConnectionInfo out of the context.
|
|
// modular_data points to a URL_Struct.
|
|
pConn = (nsConnectionInfo*) pContext->modular_data->fe_data;
|
|
|
|
NS_PRECONDITION((pConn != nsnull), "Null pointer...");
|
|
|
|
if (nsnull != pConn) {
|
|
/* Get the pointer to the nsIRefreshURL from the nsISupports
|
|
* of the nsIContentViewerContainer the nsConnnectionInfo holds.
|
|
*/
|
|
if (nsnull != pConn->pURL) {
|
|
nsISupports* container;
|
|
|
|
rv = pConn->pURL->GetContainer(&container);
|
|
if (container && (rv == NS_OK)) {
|
|
rv = container->QueryInterface(kRefreshURLIID, (void**)&IRefreshURL);
|
|
if(NS_SUCCEEDED(rv)) {
|
|
nsIURI* newURL;
|
|
|
|
rv = NS_NewURL(&newURL, refreshURL);
|
|
if (NS_SUCCEEDED(rv)) {
|
|
rv = IRefreshURL->RefreshURL(newURL, URL_s->refresh*1000, FALSE);
|
|
NS_RELEASE(newURL);
|
|
}
|
|
NS_RELEASE(IRefreshURL);
|
|
}
|
|
NS_RELEASE(container);
|
|
}
|
|
}
|
|
}
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
PUBLIC void
|
|
FE_ConnectToRemoteHost(MWContext * /*context*/, int /*url_type*/,
|
|
char * /*hostname*/, char * /*port*/, char * /*username*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/feutil.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
// The purpose of FEU_AhAhAhAhStayingAlive is to house the one and only
|
|
// saturday night fever function; named after Chouck's idol.
|
|
// This function will attempt to do all that is necessary in order
|
|
// to keep the application's messages flowing and idle loops
|
|
// going when we need to finish an asynchronous operation
|
|
// synchronously.
|
|
// The current cases that cause this are RPC calls into the
|
|
// application where we need to return a value or produce output
|
|
// from only one entry point before returning to the caller.
|
|
//
|
|
// If and when you modify this function, get your changes reviewed.
|
|
// It is too vital that this work, always.
|
|
//
|
|
// The function only attempts to look at one message at a time, or
|
|
// propigate one idle call at a time, keeping it's own idle count.
|
|
// This is not a loop. YOU must provide the loop which calls this function.
|
|
//
|
|
// Due to the nature and order of which we process windows messages, this
|
|
// can seriously mess with the flow of control through the client.
|
|
// If there is any chance at all that you can ensure that you are at the
|
|
// bottom of the message queue before doing this, then please take those
|
|
// measures.
|
|
void FEU_StayingAlive()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/cfe.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
void FE_RunNetcaster(MWContext */*context*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/xp/xp_cntxt.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* if the passed context is in the global context list
|
|
* TRUE is returned. Otherwise false
|
|
*/
|
|
Bool XP_IsContextInList(MWContext */*context*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return FALSE;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/xp/xplocale.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
size_t XP_StrfTime(MWContext* /*context*/, char */*result*/, size_t /*maxsize*/, int /*format*/,
|
|
const struct tm */*timeptr*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/layout/edtutil.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
void EDT_SavePublishUsername(MWContext */*pContext*/, char */*pAddress*/, char */*pUsername*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/layout/layutil.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* Return the width of the window for this context in chars in the default
|
|
* fixed width font. Return -1 on error.
|
|
*/
|
|
int16
|
|
LO_WindowWidthInFixedChars(MWContext */*context*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 80;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/layout/layinfo.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* Prepare a bunch of information about the content of this
|
|
* document and prints the information as HTML down
|
|
* the passed in stream.
|
|
*
|
|
* Returns:
|
|
* -1 If the context passed does not correspond to any currently
|
|
* laid out document.
|
|
* 0 If the context passed corresponds to a document that is
|
|
* in the process of being laid out.
|
|
* 1 If the context passed corresponds to a document that is
|
|
* completly laid out and info can be found.
|
|
*/
|
|
PUBLIC intn
|
|
LO_DocumentInfo(MWContext */*context*/, NET_StreamClass */*stream*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return -1;
|
|
}
|
|
|
|
#if 1
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/modules/libimg/src/if.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* determine what kind of image data we are dealing with
|
|
*/
|
|
#ifndef XP_MAC
|
|
int
|
|
IL_Type(const char */*buf*/, int32 /*len*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0; /* IL_NOTFOUND */
|
|
}
|
|
#endif /* XP_MAC */
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/modules/libimg/src/ilclient.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* Create an HTML stream and generate HTML describing
|
|
* the image cache. Use "about:memory-cache" URL to acess.
|
|
*/
|
|
static int
|
|
IL_DisplayMemCacheInfoAsHTML(FO_Present_Types /*format_out*/, URL_Struct */*urls*/,
|
|
OPAQUE_CONTEXT */*cx*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
#ifndef XP_MAC
|
|
char *
|
|
IL_HTMLImageInfo(char */*url_address*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
#endif /* XP_MAC */
|
|
|
|
|
|
/* Set limit on approximate size, in bytes, of all pixmap storage used
|
|
by the imagelib. */
|
|
#ifndef XP_MAC
|
|
void
|
|
IL_SetCacheSize(uint32 /*new_size*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
#endif /* XP_MAC */
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/modules/libimg/src/external.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
static NET_StreamClass *
|
|
IL_ViewStream(FO_Present_Types /*format_out*/, void */*newshack*/, URL_Struct */*urls*/,
|
|
OPAQUE_CONTEXT */*cx*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
#endif
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmisc/glhist.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
PUBLIC void
|
|
NET_RegisterEnableUrlMatchCallback(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/* start global history tracking
|
|
*/
|
|
PUBLIC void
|
|
GH_InitGlobalHistory(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/* save the global history to a file while leaving the object in memory
|
|
*/
|
|
PUBLIC void
|
|
GH_SaveGlobalHistory(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
/* create an HTML stream and push a bunch of HTML about
|
|
* the global history
|
|
*/
|
|
MODULE_PRIVATE int
|
|
NET_DisplayGlobalHistoryInfoAsHTML(MWContext */*context*/,
|
|
URL_Struct */*URL_s*/,
|
|
int /*format_out*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return MK_UNABLE_TO_CONVERT;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmisc/shist.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
PUBLIC int
|
|
SHIST_GetIndex(History * /*hist*/, History_entry * /*entry*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return -1;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/plugin/npglue.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
XP_Bool
|
|
NPL_HandleURL(MWContext */*cx*/,
|
|
FO_Present_Types /*iFormatOut*/, URL_Struct */*pURL*/, Net_GetUrlExitFunc */*pExitFunc*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmocha/lm_taint.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
const char *
|
|
LM_SkipWysiwygURLPrefix(const char */*url_string*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/htmldlgs/htmldlgs.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
void
|
|
XP_HandleHTMLPanel(URL_Struct */*url*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
void
|
|
XP_HandleHTMLDialog(URL_Struct */*url*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* Needed by mkcache.c (at least)
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
char ** fe_encoding_extensions = NULL;
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmisc/glhist.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
PUBLIC void
|
|
GH_UpdateGlobalHistory(URL_Struct * /*URL_s*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/* clear the global history list
|
|
*/
|
|
PUBLIC void
|
|
GH_ClearGlobalHistory(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmisc/shist.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
PUBLIC History_entry *
|
|
SHIST_GetCurrent(History * /*hist*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
#ifdef NS_NET_FILE
|
|
// XXXXXXXXXXXXXXXXXXXXXXXXX NS_NET_FILE BEGIN XXXXXXXXXXXXXXXXXXXXXXXXX
|
|
|
|
// Begin nsNetFile versions of xp_file routines. These stubs utilize the new
|
|
// nsINetFile interface to do file i/o type things.
|
|
|
|
|
|
// Utility routine to remove a transator object from the array and free it.
|
|
nsresult deleteTrans(nsFile *nsFp) {
|
|
xpNSFile *trans = nsnull;
|
|
|
|
if (!nsFp)
|
|
return NS_OK;
|
|
|
|
for (PRInt32 i = switchBack.Count(); i > 0; i--) {
|
|
trans = (xpNSFile*)switchBack.ElementAt(i-1);
|
|
if (trans && trans->nsFp == nsFp) {
|
|
switchBack.RemoveElement(trans);
|
|
if (trans->xpFp) {
|
|
PR_Free(trans->xpFp);
|
|
trans->xpFp = nsnull;
|
|
}
|
|
PR_Free(trans);
|
|
return NS_OK;
|
|
}
|
|
}
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
// Utility routine to convert an xpFile pointer to a ns file pointer.
|
|
nsFile * XpToNsFp(XP_File xpFp) {
|
|
nsFile *nsFp = nsnull;
|
|
xpNSFile *trans = nsnull;
|
|
|
|
if (!xpFp)
|
|
return nsnull;
|
|
for (PRInt32 i = switchBack.Count(); i > 0; i--) {
|
|
trans = (xpNSFile*)switchBack.ElementAt(i-1);
|
|
if (trans && trans->xpFp == xpFp) {
|
|
nsFp = trans->nsFp;
|
|
break;
|
|
}
|
|
}
|
|
return nsFp;
|
|
}
|
|
|
|
/*
|
|
//
|
|
// Open a file with the given name
|
|
// If a special file type is provided we might need to get the name
|
|
// out of the preferences list
|
|
//
|
|
*/
|
|
|
|
/* List of old xpFile enums we need to support
|
|
* Don't need cache stuff as new cache module will do it's own disk i/o
|
|
xpCacheFAT
|
|
xpCache
|
|
xpSARCache
|
|
xpExtCacheIndex
|
|
|
|
xpProxyConfig
|
|
xpURL
|
|
xpJSConfig
|
|
xpTemporary
|
|
xpJSCookieFilters
|
|
xpFileToPost
|
|
xpMimeTypes
|
|
xpHTTPCookie
|
|
xpHTTPCookiePermission
|
|
xpHTTPSingleSignon*/
|
|
|
|
// Caller is repsonsible for freeing string.
|
|
|
|
PRIVATE
|
|
char *xpFileTypeToName(XP_FileType type) {
|
|
char *name = nsnull;
|
|
switch (type) {
|
|
case (xpCache):
|
|
return PL_strdup(CACHE_DIR_TOK);
|
|
break;
|
|
case (xpCacheFAT):
|
|
return PL_strdup(CACHE_DIR_TOK CACHE_DB_F_TOK);
|
|
break;
|
|
case (xpProxyConfig):
|
|
break;
|
|
case (xpURL):
|
|
break;
|
|
case (xpJSConfig):
|
|
break;
|
|
case (xpTemporary):
|
|
break;
|
|
case (xpJSCookieFilters):
|
|
break;
|
|
case (xpFileToPost):
|
|
break;
|
|
case (xpMimeTypes):
|
|
break;
|
|
case (xpHTTPCookie):
|
|
return PL_strdup("%USER%%COOKIE_F%");
|
|
case (xpHTTPCookiePermission):
|
|
return PL_strdup("%USER%%COOKIE_PERMISSION_F%");
|
|
#ifdef SingleSignon
|
|
case (xpHTTPSingleSignon):
|
|
return PL_strdup("%USER%%SIGNON_F%");
|
|
#endif
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return nsnull;
|
|
}
|
|
|
|
/*
|
|
// The caller is responsible for XP_FREE()ing the return string
|
|
*/
|
|
PUBLIC char *
|
|
WH_FileName (const char *NetName, XP_FileType type)
|
|
{
|
|
char *path = nsnull, *aName = nsnull;
|
|
nsresult rv;
|
|
|
|
if (!NetName || !*NetName) {
|
|
aName = xpFileTypeToName(type);
|
|
if (!aName) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
rv = fileMgr->GetFilePath( (aName ? aName : NetName), &path);
|
|
PR_FREEIF(aName);
|
|
if (rv != NS_OK)
|
|
return NULL;
|
|
|
|
return path;
|
|
}
|
|
|
|
char *
|
|
WH_TempName(XP_FileType type, const char * prefix)
|
|
{
|
|
char *path = nsnull, *aName = nsnull;
|
|
nsresult rv;
|
|
|
|
aName = xpFileTypeToName(type);
|
|
if (!aName) {
|
|
return NULL;
|
|
}
|
|
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
rv = fileMgr->GetCacheFileName(aName, &path);
|
|
PR_FREEIF(aName);
|
|
if (rv != NS_OK)
|
|
return NULL;
|
|
|
|
return path;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_Fileno(XP_File fp) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
|
|
NS_PRECONDITION( (nsFp != nsnull), "Null pointer.");
|
|
|
|
return (int) nsFp->fd;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_FileSeek(XP_File fp, long offset, int origin) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
PRSeekWhence sw;
|
|
|
|
NS_PRECONDITION( (nsFp != nsnull), "Null pointer.");
|
|
|
|
/* Need to confirm the origin to PRSeekWhence mapping */
|
|
|
|
switch (origin) {
|
|
case (0):
|
|
sw = PR_SEEK_SET;
|
|
break;
|
|
case (1):
|
|
sw = PR_SEEK_CUR;
|
|
break;
|
|
case (2):
|
|
sw = PR_SEEK_END;
|
|
break;
|
|
default:
|
|
sw = PR_SEEK_SET;
|
|
}
|
|
|
|
return PR_Seek(nsFp->fd, offset, sw);
|
|
}
|
|
|
|
// Initialization routine for nsNetFile. This registers all the directories
|
|
// and files in the nsNetFile instance. Use the form:
|
|
// token = %token%
|
|
// value = opaque string
|
|
//
|
|
// Directories and files are platform specific.
|
|
PUBLIC PRBool
|
|
NET_InitFilesAndDirs(void) {
|
|
PRFileInfo dir;
|
|
PRStatus status;
|
|
char tmpBuf[_MAX_PATH];
|
|
#ifdef XP_PC
|
|
char *mDirDel = "\\";
|
|
#elif XP_MAC
|
|
char *mDirDel = ":";
|
|
#else
|
|
char *mDirDel = "/";
|
|
#endif
|
|
|
|
// Setup directories, step 1.
|
|
USER_DIR = _getcwd(USER_DIR, _MAX_PATH);
|
|
CACHE_DIR = _getcwd(CACHE_DIR, _MAX_PATH);
|
|
DEF_DIR = _getcwd(DEF_DIR, _MAX_PATH);
|
|
|
|
// setup the cache dir.
|
|
PL_strcpy(tmpBuf, CACHE_DIR);
|
|
sprintf(CACHE_DIR,"%s%s%s%s", tmpBuf, mDirDel, "cache", mDirDel);
|
|
status = PR_GetFileInfo(CACHE_DIR, &dir);
|
|
if (status == PR_FAILURE) {
|
|
// Create the dir.
|
|
status = PR_MkDir(CACHE_DIR, 0600);
|
|
if (status != PR_SUCCESS) {
|
|
; // bummer!
|
|
}
|
|
}
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// Setup directories.
|
|
fileMgr->SetDirectory(USER_DIR_TOK, USER_DIR);
|
|
fileMgr->SetDirectory(CACHE_DIR_TOK, CACHE_DIR);
|
|
fileMgr->SetDirectory(DEF_DIR_TOK, DEF_DIR);
|
|
|
|
// Setup files.
|
|
fileMgr->SetFileAssoc(COOKIE_FILE_TOK, COOKIE_FILE, USER_DIR_TOK);
|
|
fileMgr->SetFileAssoc(COOKIE_PERMISSION_FILE_TOK, COOKIE_PERMISSION_FILE, USER_DIR_TOK);
|
|
#ifdef SingleSignon
|
|
fileMgr->SetFileAssoc(SIGNON_FILE_TOK, SIGNON_FILE, USER_DIR_TOK);
|
|
#endif
|
|
fileMgr->SetFileAssoc(CACHE_DB_F_TOK, CACHE_DB_FILE, CACHE_DIR_TOK);
|
|
return TRUE;
|
|
}
|
|
|
|
PUBLIC XP_File
|
|
NET_I_XP_FileOpen(const char * name, XP_FileType type, const XP_FilePerm perm)
|
|
{
|
|
XP_File xpFp;
|
|
xpNSFile *trans = (xpNSFile*)PR_Malloc(sizeof(xpNSFile));
|
|
nsFile *nsFp = nsnull;
|
|
nsresult rv;
|
|
nsFileMode mode;
|
|
char *aName = nsnull;
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
// Just get some random address.
|
|
xpFp = (XP_File) PR_Malloc(1);
|
|
|
|
trans->xpFp= xpFp;
|
|
|
|
if ((!PL_strcasecmp(perm,XP_FILE_READ)) ||
|
|
(!PL_strcasecmp(perm,XP_FILE_READ_BIN))) {
|
|
mode = nsRead;
|
|
} else if (!PL_strcasecmp(perm,XP_FILE_WRITE)) {
|
|
mode = nsOverWrite;
|
|
} else if (!PL_strcasecmp(perm,XP_FILE_WRITE_BIN)) {
|
|
mode = nsOverWrite;
|
|
} else {
|
|
mode = nsReadWrite;
|
|
}
|
|
|
|
/* call OpenFile with nsNetFile syntax if necesary. */
|
|
if ( (!name || !*name)
|
|
|| type == xpCache ) {
|
|
char *tmpName = xpFileTypeToName(type);
|
|
nsString newName = tmpName;
|
|
PR_FREEIF(tmpName)
|
|
if (newName.Length() < 1) {
|
|
PR_Free(trans);
|
|
PR_Free(xpFp);
|
|
return NULL;
|
|
}
|
|
newName.Append(name);
|
|
aName = newName.ToNewCString();
|
|
}
|
|
|
|
rv = fileMgr->OpenFile( (aName ? aName : name), mode, &nsFp);
|
|
if (aName)
|
|
delete[] aName;
|
|
if (NS_OK != rv) {
|
|
return NULL;
|
|
}
|
|
|
|
trans->nsFp = nsFp;
|
|
|
|
switchBack.AppendElement(trans);
|
|
|
|
return xpFp;
|
|
}
|
|
|
|
PUBLIC char *
|
|
NET_I_XP_FileReadLine(char *outBuf, int outBufLen, XP_File fp) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
PRInt32 readBytes;
|
|
nsresult rv;
|
|
|
|
NS_PRECONDITION( (nsFp != nsnull), "Null pointer");
|
|
|
|
if (!nsFp)
|
|
return NULL;
|
|
|
|
if (!fileMgr)
|
|
return NULL;
|
|
|
|
rv = fileMgr->FileReadLine( nsFp, &outBuf, &outBufLen, &readBytes);
|
|
if (NS_OK != rv) {
|
|
return NULL;
|
|
}
|
|
|
|
return outBuf;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_FileRead(char *outBuf, int outBufLen, XP_File fp) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
PRInt32 readBytes;
|
|
nsresult rv;
|
|
|
|
NS_PRECONDITION( (nsFp != nsnull), "Null pointer");
|
|
|
|
if (!nsFp)
|
|
return -1;
|
|
|
|
if (!fileMgr)
|
|
return -1;
|
|
|
|
rv = fileMgr->FileRead( nsFp, &outBuf, &outBufLen, &readBytes);
|
|
if (NS_OK != rv) {
|
|
return -1;
|
|
}
|
|
|
|
return (int) readBytes;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_FileWrite(const char *buf, int bufLen, XP_File fp) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
PRInt32 wroteBytes;
|
|
PRInt32 len;
|
|
nsresult rv;
|
|
|
|
if (bufLen < 0)
|
|
len = PL_strlen(buf);
|
|
else
|
|
len = bufLen;
|
|
|
|
if (!nsFp)
|
|
return -1;
|
|
|
|
if (!fileMgr)
|
|
return NULL;
|
|
|
|
rv = fileMgr->FileWrite(nsFp, buf, &len, &wroteBytes);;
|
|
if (rv != NS_OK)
|
|
return NULL;
|
|
|
|
return (int) wroteBytes;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_FileClose(XP_File fp) {
|
|
nsFile *nsFp = XpToNsFp(fp); // nsnull ok.
|
|
nsresult rv;
|
|
|
|
NS_PRECONDITION( (nsFp != nsnull), "Null pointer");
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
rv = fileMgr->CloseFile(nsFp);
|
|
if (rv != NS_OK)
|
|
return 0;
|
|
|
|
deleteTrans(nsFp);
|
|
fp = nsnull;
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
//
|
|
// Return 0 on success, -1 on failure.
|
|
//
|
|
*/
|
|
PUBLIC int
|
|
NET_I_XP_FileRemove(const char * name, XP_FileType type)
|
|
{
|
|
char *path = nsnull, *aName = nsnull;
|
|
nsresult rv;
|
|
|
|
if ( (!name || !*name)
|
|
|| type == xpCache ) {
|
|
char *tmpName = xpFileTypeToName(type);
|
|
nsString newName = tmpName;
|
|
PR_FREEIF(tmpName);
|
|
if (newName.Length() < 1) {
|
|
return NULL;
|
|
}
|
|
newName.Append(name);
|
|
aName = newName.ToNewCString();
|
|
}
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
rv = fileMgr->FileRemove((aName ? aName : name));
|
|
if (aName)
|
|
delete[] aName;
|
|
if (rv != NS_OK)
|
|
return -1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_I_XP_Stat(const char * name, XP_StatStruct * info, XP_FileType type)
|
|
{
|
|
int result = -1;
|
|
PRFileInfo fileInfo;
|
|
PRStatus status;
|
|
char *newName, *tmpName;
|
|
nsString ourName;
|
|
char *path;
|
|
nsresult rv;
|
|
|
|
switch (type) {
|
|
case xpCache:
|
|
tmpName = xpFileTypeToName(type);
|
|
if (!tmpName)
|
|
return NULL;
|
|
ourName = tmpName;
|
|
PR_FREEIF(tmpName);
|
|
ourName.Append(name);
|
|
newName = ourName.ToNewCString();
|
|
|
|
if (!fileMgr) {
|
|
if (NS_NewINetFile(&fileMgr, nsnull) != NS_OK) {
|
|
delete[] newName;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
rv = fileMgr->GetFilePath(newName, &path);
|
|
if (rv != NS_OK) {
|
|
delete[] newName;
|
|
return -1;
|
|
}
|
|
status = PR_GetFileInfo(path, &fileInfo);
|
|
PR_Free(path);
|
|
delete[] newName;
|
|
if (status == PR_SUCCESS) {
|
|
// transfer the pr stat info over to the xp stat object.
|
|
// right now just moving over the size.
|
|
info->st_size = fileInfo.size;
|
|
return 0;
|
|
}
|
|
break;
|
|
case xpURL:
|
|
case xpFileToPost: {
|
|
newName = WH_FileName(name, type);
|
|
|
|
if (!newName) return -1;
|
|
result = _stat( newName, info );
|
|
PR_Free(newName);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
PUBLIC XP_Dir
|
|
NET_I_XP_OpenDir(const char * name, XP_FileType type)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
PUBLIC void
|
|
NET_I_XP_CloseDir(XP_Dir dir)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
/*
|
|
//
|
|
// Close the directory
|
|
//
|
|
*/
|
|
|
|
PUBLIC XP_DirEntryStruct *
|
|
NET_I_XP_ReadDir(XP_Dir dir)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
// XXXXXXXXXXXXXXXXXXXXXXXXX NS_NET_FILE END XXXXXXXXXXXXXXXXXXXXXXXXX
|
|
#endif /* NS_NET_FILE */
|
|
|
|
#ifdef XP_MAC
|
|
char *
|
|
WH_TempName(XP_FileType type, const char * prefix)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
// Begin vanilla versions of xp_file routines. These are simply stubs.
|
|
#ifdef XP_PC
|
|
|
|
#ifndef NS_NET_FILE
|
|
|
|
char *
|
|
WH_TempName(XP_FileType type, const char * prefix)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
// The caller is responsible for XP_FREE()ing the return string
|
|
*/
|
|
PUBLIC char *
|
|
WH_FileName (const char *NetName, XP_FileType type)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
if (type == xpHTTPCookie) {
|
|
#ifdef XP_PC
|
|
return PL_strdup("cookies.txt");
|
|
#else
|
|
return PL_strdup("cookies");
|
|
#endif
|
|
} else if (type == xpHTTPCookiePermission) {
|
|
#ifdef XP_PC
|
|
return PL_strdup("cookperm.txt");
|
|
#else
|
|
return PL_strdup("cookperm");
|
|
#endif
|
|
} else if (type == xpHTTPSingleSignon) {
|
|
#ifdef XP_PC
|
|
return PL_strdup("signons.txt");
|
|
#else
|
|
return PL_strdup("signons");
|
|
#endif
|
|
} else if (type == xpCacheFAT) {
|
|
;// sprintf(newName, "%s\\fat.db", (const char *)theApp.m_pCacheDir);
|
|
|
|
} else if ((type == xpURL) || (type == xpFileToPost)) {
|
|
/*
|
|
* This is the body of XP_NetToDosFileName(...) which is implemented
|
|
* for Windows only in fegui.cpp
|
|
*/
|
|
XP_Bool bChopSlash = FALSE;
|
|
char *p, *newName;
|
|
|
|
if(!NetName)
|
|
return NULL;
|
|
|
|
// If the name is only '/' or begins '//' keep the
|
|
// whole name else strip the leading '/'
|
|
|
|
if(NetName[0] == '/')
|
|
bChopSlash = TRUE;
|
|
|
|
// save just / as a path
|
|
if(NetName[0] == '/' && NetName[1] == '\0')
|
|
bChopSlash = FALSE;
|
|
|
|
// spanky Win9X path name
|
|
if(NetName[0] == '/' && NetName[1] == '/')
|
|
bChopSlash = FALSE;
|
|
|
|
if(bChopSlash)
|
|
newName = PL_strdup(&(NetName[1]));
|
|
else
|
|
newName = PL_strdup(NetName);
|
|
|
|
if(!newName)
|
|
return NULL;
|
|
|
|
if( newName[1] == '|' )
|
|
newName[1] = ':';
|
|
|
|
for(p = newName; *p; p++){
|
|
if( *p == '/' )
|
|
*p = '\\';
|
|
}
|
|
return(newName);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
#endif // !NS_NET_FILE
|
|
|
|
PUBLIC XP_File
|
|
XP_FileOpen(const char * name, XP_FileType type, const XP_FilePerm perm)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
switch (type) {
|
|
case xpURL:
|
|
case xpFileToPost:
|
|
case xpHTTPCookie:
|
|
case xpHTTPCookiePermission:
|
|
#ifdef SingleSignon
|
|
case xpHTTPSingleSignon:
|
|
#endif
|
|
{
|
|
XP_File fp;
|
|
char* newName = WH_FileName(name, type);
|
|
|
|
if (!newName) return NULL;
|
|
|
|
fp = fopen(newName, (char *) perm);
|
|
XP_FREE(newName);
|
|
return fp;
|
|
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
PUBLIC XP_Dir
|
|
XP_OpenDir(const char * name, XP_FileType type)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
PUBLIC void
|
|
XP_CloseDir(XP_Dir dir)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
PUBLIC XP_DirEntryStruct *
|
|
XP_ReadDir(XP_Dir dir)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
PUBLIC int
|
|
XP_FileRemove(const char * name, XP_FileType type)
|
|
{
|
|
if (PR_Delete(name) == PR_SUCCESS)
|
|
return 0;
|
|
return -1;
|
|
}
|
|
|
|
/*
|
|
//
|
|
// Mimic unix stat call
|
|
// Return -1 on error
|
|
//
|
|
*/
|
|
PUBLIC int
|
|
XP_Stat(const char * name, XP_StatStruct * info, XP_FileType type)
|
|
{
|
|
int result = -1;
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
switch (type) {
|
|
case xpURL:
|
|
case xpFileToPost: {
|
|
char *newName = WH_FileName(name, type);
|
|
|
|
if (!newName) return -1;
|
|
result = _stat( newName, info );
|
|
XP_FREE(newName);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
#endif /* XP_PC */
|
|
|
|
PUBLIC void *
|
|
FE_AboutData (const char */*which*/,
|
|
char **data_ret, int32 *length_ret, char **content_type_ret)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
*data_ret = NULL;
|
|
*length_ret = 0;
|
|
*content_type_ret = NULL;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
PUBLIC void
|
|
FE_FreeAboutData (void * /*data*/, const char* /*which2*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/fenet.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
int FE_AsyncDNSLookup(MWContext */*context*/, char * /*host_port*/,
|
|
PRHostEnt ** /*hoststruct_ptr_ptr*/, PRFileDesc */*socket*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return -1;
|
|
}
|
|
|
|
/*
|
|
// INTL_ResourceCharSet(void)
|
|
//
|
|
*/
|
|
char *INTL_ResourceCharSet(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/cfe.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
int32 FE_GetContextID(MWContext */*pContext*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return 0;
|
|
}
|
|
|
|
|
|
XP_Bool FE_IsNetcasterInstalled(void)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return FALSE;
|
|
}
|
|
|
|
/*
|
|
// A Url has changed context.
|
|
// We need to mark it in the new context if it has ncapi_data (which we use
|
|
// to track such things under windows).
|
|
*/
|
|
void FE_UrlChangedContext(URL_Struct */*pUrl*/, MWContext */*pOldContext*/, MWContext */*pNewContext*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/urlecho.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
void FE_URLEcho(URL_Struct */*pURL*/, int /*iStatus*/, MWContext */*pContext*/) {
|
|
/*
|
|
// Purpose: Echo the URL to all appropriately registered applications that are monitoring such URL traffic.
|
|
// Arguments: pURL The URL which is being loaded.
|
|
// iStatus The status of the load.
|
|
// pContext The context in which the load occurred.
|
|
// Returns: void
|
|
// Comments: Well, sometimes there isn't a window in which the load occurred, what to do then?
|
|
// Just don't report.
|
|
// Revision History:
|
|
// 01-18-95 created GAB
|
|
//
|
|
*/
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/edview2.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
// Note: This is used by Navigator's HTP UPLOAD as well as Composer's file saving
|
|
// DON'T ASSUME ANY EDITOR FUNCTIONALITY!
|
|
// Dialog to give feedback and allow canceling, overwrite protection
|
|
// when downloading remote files
|
|
//
|
|
*/
|
|
void FE_SaveDialogCreate( MWContext */*pMWContext*/, int /*iFileCount*/, ED_SaveDialogType /*saveType*/ )
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
void FE_SaveDialogSetFilename( MWContext */*pMWContext*/, char */*pFilename*/ )
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
void FE_SaveDialogDestroy( MWContext */*pMWContext*/, int /*status*/, char */*pFileURL*/ )
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/compmapi.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
void FE_AlternateCompose(
|
|
char * /*from*/, char * /*reply_to*/, char * /*to*/, char * /*cc*/, char * /*bcc*/,
|
|
char * /*fcc*/, char * /*newsgroups*/, char * /*followup_to*/,
|
|
char * /*organization*/, char * /*subject*/, char * /*references*/,
|
|
char * /*other_random_headers*/, char * /*priority*/,
|
|
char * /*attachment*/, char * /*newspost_url*/, char * /*body*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/nethelp.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
MWContext *FE_GetNetHelpContext()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
// Called from mkhelp.c to get the standard location of the NetHelp folder as a URL
|
|
*/
|
|
char * FE_GetNetHelpDir()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/femess.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
int FE_GetURL(MWContext */*pContext*/, URL_Struct */*pUrl*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/fmabstra.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
void FE_RaiseWindow(MWContext */*pContext*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/fegrid.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
// Create a new window.
|
|
// If pChrome is NULL, do a FE_MakeBlankWindow....
|
|
// pChrome specifies the attributes of a window.
|
|
// If you use this call, Toolbar information will not be saved in the preferences.
|
|
*/
|
|
MWContext *FE_MakeNewWindow(MWContext */*pOldContext*/, URL_Struct */*pUrl*/,
|
|
char */*pContextName*/, Chrome */*pChrome*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/cmd/winfe/timer.cpp
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/* this function should register a function that will
|
|
* be called after the specified interval of time has
|
|
* elapsed. This function should return an id
|
|
* that can be passed to FE_ClearTimeout to cancel
|
|
* the Timeout request.
|
|
*
|
|
* A) Timeouts never fail to trigger, and
|
|
* B) Timeouts don't trigger *before* their nominal timestamp expires, and
|
|
* C) Timeouts trigger in the same ordering as their timestamps
|
|
*
|
|
* After the function has been called it is unregistered
|
|
* and will not be called again unless re-registered.
|
|
*
|
|
* func: The function to be invoked upon expiration of
|
|
* the Timeout interval
|
|
* closure: Data to be passed as the only argument to "func"
|
|
* msecs: The number of milli-seconds in the interval
|
|
*/
|
|
PUBLIC void *
|
|
FE_SetTimeout(TimeoutCallbackFunction /*func*/, void * /*closure*/, uint32 /*msecs*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmocha/et_moz.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
JSBool
|
|
ET_PostMessageBox(MWContext* /*context*/, char* szMessage, JSBool /*bConfirm*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
fprintf(stdout, "%c%s (y/n)? ", '\007', szMessage); /* \007 is BELL */
|
|
char c;
|
|
for (;;) {
|
|
c = getchar();
|
|
if (tolower(c) == 'y') {
|
|
return JS_TRUE;
|
|
}
|
|
if (tolower(c) == 'n') {
|
|
return JS_FALSE;
|
|
}
|
|
}
|
|
return JS_FALSE;
|
|
}
|
|
|
|
JSBool
|
|
ET_PostCheckConfirmBox(MWContext* /*context*/,
|
|
char* szMainMessage, char* szCheckMessage,
|
|
char* /*szOKMessage*/, char* /*szCancelMessage*/,
|
|
XP_Bool *bChecked)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
fprintf(stdout, "%c%s (y/n)? ", '\007', szMainMessage); /* \007 is BELL */
|
|
char c;
|
|
XP_Bool result;
|
|
for (;;) {
|
|
c = getchar();
|
|
if (tolower(c) == 'y') {
|
|
result = JS_TRUE;
|
|
break;
|
|
}
|
|
if (tolower(c) == 'n') {
|
|
result = JS_FALSE;
|
|
break;
|
|
}
|
|
}
|
|
fprintf(stdout, "%c%s y/n? ", '\007', szCheckMessage); /* \007 is BELL */
|
|
for (;;) {
|
|
c = getchar();
|
|
if (tolower(c) == 'y') {
|
|
*bChecked = TRUE;
|
|
break;
|
|
}
|
|
if (tolower(c) == 'n') {
|
|
*bChecked = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
/*
|
|
* Tell the backend about a new load event.
|
|
*/
|
|
void
|
|
ET_SendLoadEvent(MWContext * /*pContext*/, int32 /*type*/, ETVoidPtrFunc /*fnClosure*/,
|
|
NET_StreamClass */*stream*/, int32 /*layer_id*/, Bool /*resize_reload*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmocha/lm_doc.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
NET_StreamClass *
|
|
LM_WysiwygCacheConverter(MWContext */*context*/, URL_Struct */*url_struct*/,
|
|
const char * /*wysiwyg_url*/, const char * /*base_href*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/libmocha/lm_win.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
* Entry point for front-ends to notify JS code of help events.
|
|
*/
|
|
void
|
|
LM_SendOnHelp(MWContext */*context*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/xp/xplocale.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
const char* INTL_ctime(MWContext* /*context*/, time_t */*date*/)
|
|
{
|
|
static char result[40];
|
|
|
|
MOZ_FUNCTION_STUB;
|
|
*result = '\0';
|
|
return result;
|
|
}
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/xp/xp_cntxt.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* Finds a context that should be loaded with the URL, given
|
|
* a name and current (refering) context.
|
|
*
|
|
* If the context returned is not NULL, name is already assigned to context
|
|
* structure. You should load the URL into this context.
|
|
*
|
|
* If you get back a NULL, you should create a new window
|
|
*
|
|
* Both context and current context can be null.
|
|
* Once the grids are in, there should be some kind of a logic that searches
|
|
* siblings first.
|
|
*/
|
|
|
|
MWContext * XP_FindNamedContextInList(MWContext * /*context*/, char */*name*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
MWContext*
|
|
XP_FindSomeContext()
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/plugin/npglue.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* This exit routine is used for all streams requested by the
|
|
* plug-in: byterange request streams, NPN_GetURL streams, and
|
|
* NPN_PostURL streams. NOTE: If the exit routine gets called
|
|
* in the course of a context switch, we must NOT delete the
|
|
* URL_Struct. Example: FTP post with result from server
|
|
* displayed in new window -- the exit routine will be called
|
|
* when the upload completes, but before the new context to
|
|
* display the result is created, since the display of the
|
|
* results in the new context gets its own completion routine.
|
|
*/
|
|
void
|
|
NPL_URLExit(URL_Struct */*urls*/, int /*status*/, MWContext */*cx*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/layout/layedit.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
|
|
void LO_SetBaseURL( MWContext */*context*/, char */*pURL*/ )
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
/*
|
|
*---------------------------------------------------------------------------
|
|
* From ns/lib/layout/laysel.c
|
|
*---------------------------------------------------------------------------
|
|
*/
|
|
/*
|
|
get first(last) if current element is NULL.
|
|
*/
|
|
Bool
|
|
LO_getNextTabableElement( MWContext */*context*/, LO_TabFocusData */*pCurrentFocus*/, int /*forward*/ )
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
return FALSE;
|
|
}
|
|
|
|
PUBLIC int
|
|
NET_ParseNetHelpURL(URL_Struct */*URL_s*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
/* return MK_OUT_OF_MEMORY; */
|
|
return -207;
|
|
}
|
|
|
|
#ifdef XP_UNIX
|
|
PUBLIC NET_StreamClass* NET_ExtViewerConverter ( FO_Present_Types /*format_out*/,
|
|
void */*data_obj*/,
|
|
URL_Struct */*URL_s*/,
|
|
MWContext */*window_id*/)
|
|
{
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* From xp_str.c
|
|
*/
|
|
|
|
/* Allocate a new copy of a block of binary data, and returns it
|
|
*/
|
|
PUBLIC char *
|
|
NET_BACopy (char **destination, const char *source, size_t length)
|
|
{
|
|
if(*destination)
|
|
{
|
|
XP_FREE(*destination);
|
|
*destination = 0;
|
|
}
|
|
|
|
if (! source)
|
|
{
|
|
*destination = NULL;
|
|
}
|
|
else
|
|
{
|
|
*destination = (char *) PR_Malloc (length);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
memcpy(*destination, source, length);
|
|
}
|
|
return *destination;
|
|
}
|
|
|
|
/* binary block Allocate and Concatenate
|
|
*
|
|
* destination_length is the length of the existing block
|
|
* source_length is the length of the block being added to the
|
|
* destination block
|
|
*/
|
|
PUBLIC char *
|
|
NET_BACat (char **destination,
|
|
size_t destination_length,
|
|
const char *source,
|
|
size_t source_length)
|
|
{
|
|
if (source)
|
|
{
|
|
if (*destination)
|
|
{
|
|
*destination = (char *) PR_Realloc (*destination, destination_length + source_length);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
|
|
memmove (*destination + destination_length, source, source_length);
|
|
|
|
}
|
|
else
|
|
{
|
|
*destination = (char *) PR_Malloc (source_length);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
|
|
memcpy(*destination, source, source_length);
|
|
}
|
|
}
|
|
|
|
return *destination;
|
|
}
|
|
|
|
/* Very similar to strdup except it free's too
|
|
*/
|
|
PUBLIC char *
|
|
NET_SACopy (char **destination, const char *source)
|
|
{
|
|
if(*destination)
|
|
{
|
|
XP_FREE(*destination);
|
|
*destination = 0;
|
|
}
|
|
if (! source)
|
|
{
|
|
*destination = NULL;
|
|
}
|
|
else
|
|
{
|
|
*destination = (char *) PR_Malloc (PL_strlen(source) + 1);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
|
|
PL_strcpy (*destination, source);
|
|
}
|
|
return *destination;
|
|
}
|
|
|
|
/* Again like strdup but it concatinates and free's and uses Realloc
|
|
*/
|
|
PUBLIC char *
|
|
NET_SACat (char **destination, const char *source)
|
|
{
|
|
if (source && *source)
|
|
{
|
|
if (*destination)
|
|
{
|
|
int length = PL_strlen (*destination);
|
|
*destination = (char *) PR_Realloc (*destination, length + PL_strlen(source) + 1);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
|
|
PL_strcpy (*destination + length, source);
|
|
}
|
|
else
|
|
{
|
|
*destination = (char *) PR_Malloc (PL_strlen(source) + 1);
|
|
if (*destination == NULL)
|
|
return(NULL);
|
|
|
|
PL_strcpy (*destination, source);
|
|
}
|
|
}
|
|
return *destination;
|
|
}
|
|
|
|
/* remove front and back white space
|
|
* modifies the original string
|
|
*/
|
|
PUBLIC char *
|
|
XP_StripLine (char *string)
|
|
{
|
|
char * ptr;
|
|
|
|
/* remove leading blanks */
|
|
while(*string=='\t' || *string==' ' || *string=='\r' || *string=='\n')
|
|
string++;
|
|
|
|
for(ptr=string; *ptr; ptr++)
|
|
; /* NULL BODY; Find end of string */
|
|
|
|
/* remove trailing blanks */
|
|
for(ptr--; ptr >= string; ptr--)
|
|
{
|
|
if(*ptr=='\t' || *ptr==' ' || *ptr=='\r' || *ptr=='\n')
|
|
*ptr = '\0';
|
|
else
|
|
break;
|
|
}
|
|
|
|
return string;
|
|
}
|
|
|
|
/************************************************************************/
|
|
|
|
char *XP_AppendStr(char *in, const char *append)
|
|
{
|
|
int alen, inlen;
|
|
|
|
alen = PL_strlen(append);
|
|
if (in) {
|
|
inlen = PL_strlen(in);
|
|
in = (char*) PR_Realloc(in,inlen+alen+1);
|
|
if (in) {
|
|
memcpy(in+inlen, append, alen+1);
|
|
}
|
|
} else {
|
|
in = (char*) PR_Malloc(alen+1);
|
|
if (in) {
|
|
memcpy(in, append, alen+1);
|
|
}
|
|
}
|
|
return in;
|
|
}
|
|
|
|
void RDF_AddCookieResource(char* /*name*/, char* /*path*/, char* /*host*/, char* /*expires*/)
|
|
{
|
|
MOZ_FUNCTION_STUB;
|
|
}
|
|
|
|
|
|
} /* end of extern "C" */
|