15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License Version 1.1 (the "License"); you may not use this file 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * except in compliance with the License. You may obtain a copy of 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License at http://www.mozilla.org/MPL/ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implied. See the License for the specific language governing 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * rights and limitations under the License. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR). 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is Netscape 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Communications Corporation. Portions created by Netscape are 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1998-2000 Netscape Communications Corporation. All 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Rights Reserved. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s): 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * terms of the GNU General Public License Version 2 or later (the 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "GPL"), in which case the provisions of the GPL are applicable 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * instead of those above. If you wish to allow use of your 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version of this file only under the terms of the GPL and not to 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * allow others to use your version of this file under the MPL, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicate your decision by deleting the provisions above and 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * replace them with the notice and other provisions required by 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GPL. If you do not delete the provisions above, a recipient 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may use your version of this file under either the MPL or the 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GPL. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prmacos_h___ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prmacos_h___ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file contains all changes and additions which need to be made to the NSPR runtime 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the Macintosh platform (specifically the Metrowerks environment). This file should 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only be incluced in Macintosh builds. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DLL_SUFFIX "" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_LOCAL_THREADS_ONLY 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_NO_PREEMPT 1 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_HAVE_ATOMIC_OPS 1 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prinit.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prio.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prlong.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prlock.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prcvar.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prsem.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prthread.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prtime.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prproces.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(MAC_NSPR_STANDALONE) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "macstdlibextras.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h> 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <setjmp.h> 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Errors.h> 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <OpenTransport.h> 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <DriverServices.h> 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_HAVE_PEEK_BUFFER 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_PEEK_BUFFER_MAX (16 * 1024) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_FD_NEED_EMULATE_MSG_PEEK(fd) 1 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDProcess { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDThread { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jmp_buf jb; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int osErrCode; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRLock * asyncIOLock; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRCondVar * asyncIOCVar; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool missedIONotify; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool missedAsyncNotify; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool asyncNotifyPending; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDThreadStack { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDLock { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDCVar { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDSemaphore { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDSegment { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 notused; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDCPU { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AbsoluteTime lastThreadSwitch; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AbsoluteTime lastWakeUpProcess; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool trackScheduling; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _MDSocketCallerInfo { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRThread * thread; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void * cookie; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} _MDSocketCallerInfo; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDFileDesc { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 osfd; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRPackedBool orderlyDisconnect; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRPackedBool readReady; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRPackedBool writeReady; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRPackedBool exceptReady; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRLock * miscLock; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Server sockets: listen bit tells the notifier func what to do */ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool doListen; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* stored error for non-blocking connects, as a Unix-style error code */ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OTReason disconnectError; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MDSocketCallerInfo misc; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MDSocketCallerInfo read; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MDSocketCallerInfo write; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Iinitialization Related definitions 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_EARLY_INIT _MD_EarlyInit 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FINAL_INIT _MD_FinalInit 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Interrupts Related definitions 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_INTSOFF() (_pr_intsOff) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTSOFF(_is) \ 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ENTER_CRITICAL_REGION(); \ 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_is) = _PR_MD_GET_INTSOFF(); \ 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _PR_MD_SET_INTSOFF(1); \ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LEAVE_CRITICAL_REGION(); \ 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if TARGET_CARBON 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void _MD_SetIntsOff(PRInt32 ints); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_INTSOFF(_val) _MD_SetIntsOff(_val) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* not TARGET_CARBON */ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_INTSOFF(_val) (_pr_intsOff = _val) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* TARGET_CARBON */ 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_START_INTERRUPTS _MD_StartInterrupts 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_STOP_INTERRUPTS _MD_StopInterrupts 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BLOCK_CLOCK_INTERRUPTS() 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_UNBLOCK_CLOCK_INTERRUPTS() 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DISABLE_CLOCK_INTERRUPTS() 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ENABLE_CLOCK_INTERRUPTS() 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** CPU Related definitions 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PAUSE_CPU _MD_PauseCPU 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLEANUP_BEFORE_EXIT() 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_EXIT(status) exit(status) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CPUS() 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_RUNNING_CPU(cpu) _MD_InitRunningCPU(cpu) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Process Related definitions 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct PRProcess * _MD_CreateProcess( 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *path, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *const *argv, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *const *envp, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PRProcessAttr *attr); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_PROCESS _MD_CreateProcess 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_DetachProcess(PRProcess *process); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DETACH_PROCESS _MD_DetachProcess 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_WaitProcess(PRProcess *process, PRInt32 *exitCode); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAIT_PROCESS _MD_WaitProcess 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_KillProcess(PRProcess *process); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_KILL_PROCESS _MD_KillProcess 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Memory Segments Related definitions 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_SEGS() 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Thread Stacks Debugging Related definitions 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_STACK _MD_InitStack 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLEAR_STACK _MD_ClearStack 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Locks Related definitions 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_LOCKS() 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_NEW_LOCK(lock) (PR_SUCCESS) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_LOCK(lock) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LOCK(lock) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_UNLOCK(lock) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Thread Related definitions 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRThread *) PR_GetPrimaryThread(); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(powerc) || defined(__powerc) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_PC(_t) (*((PRUint32 *)((_t)->md.jb))) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SP(_t) (*((PRUint32 *)((_t)->md.jb) + 2)) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_TOC(_t) (*((PRUint32 *)((_t)->md.jb) + 3)) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_STACKPTR(stackTop) ((unsigned char*)stackTop - 128) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NUM_GCREGS 70 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_PC(_t) (*((PRUint32 *)((_t)->md.jb) + 6)) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SP(_t) (*((PRUint32 *)((_t)->md.jb) + 12)) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_STACKPTR(stackTop) ((unsigned char*)stackTop - 4) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NUM_GCREGS 13 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DEFAULT_STACK_SIZE (58 * 1024) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MINIMUM_STACK_SIZE (58 * 1024) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Initialize the thread machine dependent data structure 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_InitThread(PRThread *thread); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_THREAD _MD_InitThread 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Clean-up the thread machine dependent data structure 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLEAN_THREAD(_thread) \ 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_DestroyCondVar(_thread->md.asyncIOCVar); \ 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_DestroyLock(_thread->md.asyncIOLock); \ 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Initialize the thread context preparing it to execute _main. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** *sp = 0 zeros out the sp for the first stack frame so that 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** stack walking code can find the top of the stack. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(powerc) || defined(__powerc) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CONTEXT(_thread, _sp, _main, _status) \ 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char *sp; \ 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long *tvect; \ 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long **jb = (_thread)->md.jb; \ 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *((PRBool *)_status) = PR_TRUE; \ 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void) setjmp(jb); \ 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp = INIT_STACKPTR(_sp); \ 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *sp = 0; \ 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_MD_GET_SP(_thread)) = (long) sp; \ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tvect = (unsigned long *)_main; \ 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_MD_GET_PC(_thread)) = (int) *tvect; \ 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_MD_GET_TOC(_thread)) = (int) *(tvect+1); \ 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _thread->no_sched = 0; \ 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_CONTEXT(_thread, _sp, _main, _status) \ 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char *sp; \ 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long **jb = (_thread)->md.jb; \ 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *((PRBool *)_status) = PR_TRUE; \ 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void) setjmp(jb); \ 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp = INIT_STACKPTR(_sp); \ 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_MD_GET_SP(_thread)) = (long) sp; \ 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (_MD_GET_PC(_thread)) = (int) _main; \ 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _thread->no_sched = 0; \ 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Switch away from the current thread context by saving its state and 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** calling the thread scheduler. Reload cpu when we come back from the 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** context switch because it might have changed. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ResetTimer(); before _PR_Schedule() */ 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SWITCH_CONTEXT(_thread) \ 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_ASSERT(_thread->no_sched); \ 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!setjmp(_thread->md.jb)) { \ 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MD_SET_LAST_THREAD(_thread); \ 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (_PR_MD_CURRENT_CPU()->md.trackScheduling) \ 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _PR_MD_CURRENT_CPU()->md.lastThreadSwitch = UpTime(); \ 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _PR_Schedule(); \ 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { \ 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_ASSERT(_MD_LAST_THREAD() !=_MD_CURRENT_THREAD()); \ 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MD_LAST_THREAD()->no_sched = 0; \ 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Restore a thread context that was saved by _MD_SWITCH_CONTEXT or 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** initialized by _MD_INIT_CONTEXT. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RESTORE_CONTEXT(_newThread) \ 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_BEGIN_MACRO \ 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long **jb = (_newThread)->md.jb; \ 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _MD_SET_CURRENT_THREAD(_newThread); \ 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _newThread->no_sched = 1; \ 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) longjmp(jb, 1); \ 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PR_END_MACRO 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ERRNO() _MD_CURRENT_THREAD()->md.osErrCode 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_wait(PRThread *thread, PRIntervalTime timeout); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAIT _MD_wait 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Combined thread model related definitions 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_THREAD(a,b,c,d,e,f) (PR_SUCCESS) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WAKEUP_WAITER(a) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SET_PRIORITY(a,b) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File I/O Related definitions 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _PR_MD_WRITE_SYNC(PRFileDesc *fd, void *buf, PRInt32 amount); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_MD_WRITE_SYNC _MD_WRITE_SYNC 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDDir { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) short ioVRefNum; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long ioDirID; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) short ioFDirIndex; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *currentEntryName; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DIRECTORY_SEPARATOR '/' 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_DIRECTORY_SEPARATOR_STR "/" 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PATH_SEPARATOR ':' 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PATH_SEPARATOR_STR ":" 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum IOOperation { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) READ_ASYNC, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WRITE_ASYNC 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} IOOperation; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_IO() 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_OPEN _MD_Open 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_OPEN_FILE _MD_Open 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_FILE FSClose 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_READ(fd,buf,amount) ReadWriteProc(fd,buf,amount,READ_ASYNC) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITE(fd,buf,amount) ReadWriteProc(fd,buf,amount,WRITE_ASYNC) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITE_SYNC(fd,buf,amount) WriteSyncProc(fd,buf,amount) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_FILE_ERROR() _PR_MD_CURRENT_THREAD()->md.osErrCode 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LSEEK _MD_LSeek 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FSYNC _MD_FSync 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* to be implemented */ 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LSEEK64(a,b,c) LL_ZERO 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETOPENFILEINFO64(fd,info) -1 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETFILEINFO64(fd,info) -1 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_IOQ_LOCK() 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_IOQ_UNLOCK() 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File Manipulation definitions 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RENAME _MD_Rename 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ACCESS _MD_Access 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETFILEINFO _MD_GetFileInfo 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETOPENFILEINFO _MD_GetOpenFileInfo 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_STAT _MD_Stat 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_DELETE _MD_Delete 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_LockFile(PRInt32 osfd); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LOCKFILE _MD_LockFile 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_TLockFile(PRInt32 osfd); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_TLOCKFILE _MD_TLockFile 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_UnlockFile(PRInt32 osfd); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_UNLOCKFILE _MD_UnlockFile 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Directory enumeration related definitions 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_OpenDir(struct _MDDir *md,const char *name); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_OPEN_DIR _MD_OpenDir 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char* _MD_ReadDir(struct _MDDir *md,PRIntn flags); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_READ_DIR _MD_ReadDir 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_DIR _MD_CloseDir 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MKDIR _MD_MkDir 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MAKE_DIR _MD_MkDir 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RMDIR _MD_Delete 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Pipe I/O Related definitions (not implemented) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PIPEAVAILABLE(fd) -1 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Socket I/O Related definitions 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if UNIVERSAL_INTERFACES_VERSION >= 0x0330 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* In Universal Interfaces 3.3 and later, these are enums. */ 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_TTL IP_TTL 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_TOS IP_TOS 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_IF IP_MULTICAST_IF 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_TTL IP_MULTICAST_TTL 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IP_MULTICAST_LOOP IP_MULTICAST_LOOP 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TCP_NODELAY TCP_NODELAY 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TCP_MAXSEG TCP_MAXSEG 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKET _MD_socket 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BIND _MD_bind 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LISTEN _MD_listen 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKNAME _MD_getsockname 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_getsockopt(PRFileDesc *fd, PRInt32 level, PRInt32 optname, char* optval, PRInt32* optlen); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKOPT _MD_getsockopt 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_setsockopt(PRFileDesc *fd, PRInt32 level, PRInt32 optname, const char* optval, PRInt32 optlen); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SETSOCKOPT _MD_setsockopt 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKETAVAILABLE _MD_socketavailable 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ACCEPT _MD_accept 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CONNECT _MD_connect 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SEND _MD_send 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECV _MD_recv 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_SOCKET _MD_closesocket 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SENDTO _MD_sendto 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECVFROM _MD_recvfrom 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PR_POLL _MD_poll 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_FILEDESC _MD_initfiledesc 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_FILEDESC _MD_freefiledesc 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MAKE_NONBLOCK _MD_makenonblock 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_FD_INHERITABLE _MD_initfdinheritable 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_QUERY_FD_INHERITABLE _MD_queryfdinheritable 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_SOCKET_ERROR() _PR_MD_CURRENT_THREAD()->md.osErrCode 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_MD_MAP_SELECT_ERROR(x) (x) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Netdb Related definitions 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_gethostname(char *name, int namelen); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETHOSTNAME _MD_gethostname 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_GET_HOST_ADDR_AS_NAME 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XXX _MD_WRITEV, _MD_SHUTDOWN & _MD_GETPEERNAME not done yet!!! 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_WRITEV _MD_writev 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SHUTDOWN _MD_shutdown 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETPEERNAME _MD_getpeername 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef OLD_MACSOCK_LIBRARY 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKET macsock_socket 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_LISTEN macsock_listen 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SEND(fd,buf,amount,flags,timeout) macsock_send(fd->secret->md.osfd,buf,amount,flags) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SENDTO(fd,buf,amount,flags,addr,addrlen,timeout) macsock_sendto(fd->secret->md.osfd,buf,amount,flags,(struct sockaddr *)addr,addrlen) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECV(fd,buf,amount,flags,timeout) macsock_recv(fd->secret->md.osfd,buf,amount,flags) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_RECVFROM(fd,buf,amount,flags,addr,addrlen,timeout) macsock_recvfrom(fd->secret->md.osfd,buf,amount,flags,(struct sockaddr *)addr,addrlen) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_SOCKET macsock_close 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SHUTDOWN(a,b) (0) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ACCEPT(fd,addr,addrlen,timeout) macsock_accept(fd->secret->md.osfd,(struct sockaddr *)addr,addrlen) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CONNECT(fd,name,namelen,timeout) macsock_connect(fd->secret->md.osfd,(struct sockaddr *)name,namelen) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_BIND(fd,name,namelen) macsock_bind(fd->secret->md.osfd,(struct sockaddr *)name,namelen) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKNAME(fd,name,namelen) macsock_getsockname(fd->secret->md.osfd,(struct sockaddr *)name,namelen) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETPEERNAME(fd,name,namelen) macsock_getpeername(fd->secret->md.osfd,(struct sockaddr *)name,namelen) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GETSOCKOPT(fd,level,optname,optval,optlen) macsock_getsockopt(fd->secret->md.osfd,level,optname,optval,optlen) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SETSOCKOPT(fd,level,optname,optval,optlen) macsock_setsockopt(fd->secret->md.osfd,level,optname,optval,optlen) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_SOCKETAVAILABLE(fd,bytes) macsock_socketavailable(fd->secret->md.osfd,bytes) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Memory Segements Related definitions 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_SEGS() 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ALLOC_SEGMENT _MD_AllocSegment 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_FREE_SEGMENT _MD_FreeSegment 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Time Related definitions 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_INTERVAL _MD_GetInterval 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTERVAL_PER_SEC() PR_MSEC_PER_SEC 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INTERVAL_INIT() 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Environemnt Related definitions 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *_MD_GetEnv(const char *name); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_ENV _MD_GetEnv 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int _MD_PutEnv(const char *variableCopy); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_PUT_ENV _MD_PutEnv 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Following is old stuff to be looked at. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GCPTR 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CALLBACK 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int (*FARPROC)(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAX_NON_PRIMARY_TIME_SLICES 6 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern long gTimeSlicesOnNonPrimaryThread; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct PRThread *gPrimaryThread; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Errors not found in the Mac StdCLib 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EACCES 13 // Permission denied 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENOENT -43 // No such file or directory 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _OS_INVALID_FD_VALUE -1 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define STDERR_FILENO 2 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(MAC_NSPR_STANDALONE) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PATH_SEPARATOR ':' 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PATH_SEPARATOR_STR ":" 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DIRECTORY_SEPARATOR '/' 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DIRECTORY_SEPARATOR_STR "/" 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UNIX_THIS_DIRECTORY_STR "./" 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UNIX_PARENT_DIRECTORY_STR "../" 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Alias a few names 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define getenv PR_GetEnv 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define putenv _MD_PutEnv 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char (*MemoryCacheFlusherProc)(size_t size); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*PreAllocationHookProc)(void); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *strdup(const char *source); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InstallPreAllocationHook(PreAllocationHookProc newHook); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InstallMemoryCacheFlusher(MemoryCacheFlusherProc newFlusher); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *PR_GetDLLSearchPath(void); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int strcmp(const char *str1, const char *str2); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int strcasecmp(const char *str1, const char *str2); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void MapFullToPartialMacFile(char *); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern char *MapPartialToFullMacFile(const char *); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void ResetTimer(void); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void PR_PeriodicIdle(void); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void ActivateTimer(void); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void DeactivateTimer(void); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void PR_InitMemory(void); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern struct hostent *gethostbyaddr(const void *addr, int addrlen, int type); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern short GetVolumeRefNumFromName(const char *); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> // Needed to get FILE typedef 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern FILE *_OS_FOPEN(const char *filename, const char *mode); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Macintosh only private parts. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define dprintTrace ";dprintf;doTrace" 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define dprintNoTrace ";dprintf" 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void dprintf(const char *format, ...); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry into the memory system's cache flushing 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRUint8 CallCacheFlushers(size_t blockSize); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(MAC_NSPR_STANDALONE) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void* reallocSmaller(void* block, size_t newSize); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_GetSystemInfo related definitions 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_SI_SYSNAME "MacOS" 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PR_SI_ARCHITECTURE "PowerPC" 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Memory-mapped files 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _MDFileMap { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 unused; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_CreateFileMap(struct PRFileMap *fmap, PRInt64 size); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CREATE_FILE_MAP _MD_CreateFileMap 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _MD_GetMemMapAlignment(void); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_GET_MEM_MAP_ALIGNMENT _MD_GetMemMapAlignment 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void * _MD_MemMap(struct PRFileMap *fmap, PRInt64 offset, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRUint32 len); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MEM_MAP _MD_MemMap 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_MemUnmap(void *addr, PRUint32 size); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_MEM_UNMAP _MD_MemUnmap 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRStatus _MD_CloseFileMap(struct PRFileMap *fmap); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_CLOSE_FILE_MAP _MD_CloseFileMap 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void SetLogFileTypeCreator(const char *logFile); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int _MD_mac_get_nonblocking_connect_error(PRFileDesc* fd); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Critical section support 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAC_CRITICAL_REGIONS TARGET_CARBON 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if MAC_CRITICAL_REGIONS 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InitCriticalRegion(); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void TermCriticalRegion(); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void EnterCritialRegion(); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void LeaveCritialRegion(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_CRITICAL_REGION() InitCriticalRegion() 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TERM_CRITICAL_REGION() TermCriticalRegion() 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENTER_CRITICAL_REGION() EnterCritialRegion() 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEAVE_CRITICAL_REGION() LeaveCritialRegion() 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_CRITICAL_REGION() 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TERM_CRITICAL_REGION() 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENTER_CRITICAL_REGION() 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEAVE_CRITICAL_REGION() 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * CPU Idle support 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void InitIdleSemaphore(); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void TermIdleSemaphore(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void WaitOnIdleSemaphore(); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern void SignalIdleSemaphore(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Atomic operations 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _PR_HAVE_ATOMIC_OPS 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_INIT_ATOMIC() 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_INCREMENT(val) OTAtomicAdd32(1, (SInt32 *)val) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_ADD(ptr, val) OTAtomicAdd32(val, (SInt32 *)ptr) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_DECREMENT(val) OTAtomicAdd32(-1, (SInt32 *)val) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _MD_ATOMIC_SET(val, newval) _MD_AtomicSet(val, newval) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _PR_HAVE_ATOMIC_OPS */ 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prmacos_h___ */ 723