15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ***** BEGIN LICENSE BLOCK *****
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Version: MPL 1.1/GPL 2.0/LGPL 2.1
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public License Version
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1.1 (the "License"); you may not use this file except in compliance with
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License. You may obtain a copy of the License at
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://www.mozilla.org/MPL/
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS IS" basis,
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for the specific language governing rights and limitations under the
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR).
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Netscape Communications Corporation.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Portions created by the Initial Developer are Copyright (C) 1998-2000
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the Initial Developer. All Rights Reserved.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s):
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the terms of
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * either the GNU General Public License Version 2 or later (the "GPL"), or
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in which case the provisions of the GPL or the LGPL are applicable instead
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of those above. If you wish to allow use of your version of this file only
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * under the terms of either the GPL or the LGPL, and not to allow others to
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * use your version of this file under the terms of the MPL, indicate your
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * decision by deleting the provisions above and replace them with the notice
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and other provisions required by the GPL or the LGPL. If you do not delete
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the provisions above, a recipient may use your version of this file under
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the terms of any one of the MPL, the GPL or the LGPL.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ***** END LICENSE BLOCK ***** */
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File:                prtypes.h
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Description: Definitions of NSPR's basic types
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Prototypes and macros used to make up for deficiencies that we have found
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** in ANSI environments.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Since we do not wrap <stdlib.h> and all the other standard headers, authors
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of portable code will not know in general that they need these definitions.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Instead of requiring these authors to find the dependent uses in their code
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and take the following steps only in those C files, we take steps once here
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for all C files.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**/
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prtypes_h___
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prtypes_h___
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef MDCPUCFG
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include MDCPUCFG
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/third_party/nspr/prcpucfg.h"
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h>
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_EXTERN
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_IMPLEMENT
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      These are only for externally visible routines and globals.  For
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      internal routines, just use "extern" for type checking and that
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      will not export internal cross-file or forward-declared symbols.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Define a macro for declaring procedures return types. We use this to
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      deal with windoze specific type hackery for DLL definitions. Use
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      PR_EXTERN when the prototype for the method is declared. Use
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      PR_IMPLEMENT for the implementation of the method.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Example:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   in dowhim.h
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     PR_EXTERN( void ) DoWhatIMean( void );
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   in dowhim.c
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; }
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 1
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Local change: the portions of NSPR used by the base module are
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** implementation details.  NSPR symbols do not need to be exported beyond
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the base module.  For all platforms, avoid decorating functions with
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** specific visibility and access keywords.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN32)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) __declspec(dllimport) __type
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_BEOS)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(dllexport) __type
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_OS2) && defined(__declspec)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern  __declspec(dllimport) __type
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllimport) __type
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(SYMBIAN)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __WINS__
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(dllexport) __type
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(dllimport) __type
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllimport) __type
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* Unix */
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* GCC 3.3 and later support the visibility attribute. */
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (__GNUC__ >= 4) || \
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_VISIBILITY_DEFAULT
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_NSPR_BUILD_)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_EXPORT(__type)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_IMPORT(__type)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BEGIN_MACRO
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_END_MACRO
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Macro body brackets so that macros with compound statement definitions
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      behave syntactically more like functions when called.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_MACRO  do {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_MACRO    } while (0)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BEGIN_EXTERN_C
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_END_EXTERN_C
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Macro shorthands for conditional C++ extern block delimiters.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C       extern "C" {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C         }
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_BIT
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_BITMASK
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Bit masking macros.  XXX n must be <= 31 to be portable
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BIT(n)       ((PRUint32)1 << (n))
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BITMASK(n)   (PR_BIT(n) - 1)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***********************************************************************
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS:      PR_ROUNDUP
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_MIN
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_MAX
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PR_ABS
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      Commonly used macros for operations on compatible types.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MAX(x,y)     ((x)>(y)?(x):(y))
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ABS(x)       ((x)<0?-(x):(x))
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_BEGIN_EXTERN_C
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint8
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt8
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int8 types are known to be 8 bits each. There is no type that
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      is equivalent to a plain "char".
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_BYTE == 1
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char PRUint8;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Some cfront-based C++ compilers do not like 'signed char' and
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** issue the warning message:
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**     warning: "signed" not implemented (ignored)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** For these compilers, we have to define PRInt8 as plain 'char'.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Make sure that plain 'char' is indeed signed under these compilers.
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (defined(HPUX) && defined(__cplusplus) \
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        && !defined(__GNUC__) && __cplusplus < 199707L) \
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    || (defined(SCO) && defined(__cplusplus) \
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        && !defined(__GNUC__) && __cplusplus == 1L)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef char PRInt8;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed char PRInt8;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt8/PRUint8
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT8_MAX
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT8_MIN
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT8_MAX
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt8 or PRUint8.
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MAX 127
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MIN (-128)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT8_MAX 255U
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint16
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt16
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int16 types are known to be 16 bits each.
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_SHORT == 2
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned short PRUint16;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef short PRInt16;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt16/PRUint16
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT16_MAX
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT16_MIN
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT16_MAX
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt16 or PRUint16.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MAX 32767
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MIN (-32768)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT16_MAX 65535U
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint32
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt32
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int32 types are known to be 32 bits each.
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT == 4
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUint32;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRInt32;
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x)  x
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## U
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif PR_BYTES_PER_LONG == 4
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint32;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt32;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x)  x ## L
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## UL
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt32/PRUint32
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS:      PR_INT32_MAX
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_INT32_MIN
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *              PR_UINT32_MAX
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION:
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  The maximum and minimum values of a PRInt32 or PRUint32.
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MAX PR_INT32(2147483647)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MIN (-PR_INT32_MAX - 1)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32_MAX PR_UINT32(4294967295)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUint64
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRInt64
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The int64 types are known to be 64 bits each. Care must be used when
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      declaring variables of type PRUint64 or PRInt64. Different hardware
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      architectures and even different compilers have varying support for
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      64 bit values. The only guaranteed portability requires the use of
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      the LL_ macros (see prlong.h).
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LONG_LONG
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Keep this in sync with prlong.h. */
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * On 64-bit Mac OS X, uint64 needs to be defined as unsigned long long to
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * match uint64_t, otherwise our uint64 typedef conflicts with the uint64
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * typedef in cssmconfig.h, which CoreServices.h includes indirectly.
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_LONG == 8 && !defined(__APPLE__)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt64;
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint64;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN32) && !defined(__GNUC__)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef __int64  PRInt64;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 PRUint64;
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long long PRInt64;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long long PRUint64;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* PR_BYTES_PER_LONG == 8 */
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else  /* !HAVE_LONG_LONG */
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct {
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef IS_LITTLE_ENDIAN
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRUint32 lo, hi;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRUint32 hi, lo;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PRInt64;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PRUint64;
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !HAVE_LONG_LONG */
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUintn
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**              PRIntn
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  The PRIntn types are most appropriate for automatic variables. They are
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      guaranteed to be at least 16 bits, though various architectures may
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      define them to be wider (e.g., 32 or even 64 bits). These types are
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      never valid for fields of a structure.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT >= 2
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRIntn;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUintn;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error 'sizeof(int)' not sufficient for platform use
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRFloat64
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  NSPR's floating point type is always 64 bits.
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef double          PRFloat64;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRSize
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for representing the size of objects.
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef size_t PRSize;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PROffset32, PROffset64
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for representing byte offsets from some location.
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt32 PROffset32;
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PROffset64;
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRPtrDiff
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for pointer difference. Variables of this type are suitable
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for storing a pointer or pointer subtraction.
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ptrdiff_t PRPtrdiff;
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRUptrdiff
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  A type for pointer difference. Variables of this type are suitable
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for storing a pointer or pointer sutraction.
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN64
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint64 PRUptrdiff;
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUptrdiff;
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRBool
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      for clarity of target type in assignments and actual arguments. Use
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      just as you would C int-valued conditions.
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRIntn PRBool;
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_TRUE 1
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_FALSE 0
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES:       PRPackedBool
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION:
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  Use PRPackedBool within structs where bitfields are not desirable
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      but minimum and consistant overhead matters.
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint8 PRPackedBool;
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Status code used by some routines that have a single point of failure or
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** special status return.
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __PRUNICHAR__
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __PRUNICHAR__
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef WIN32
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef wchar_t PRUnichar;
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint16 PRUnichar;
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** WARNING: The undocumented data types PRWord and PRUword are
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** only used in the garbage collection and arena code.  Do not
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** use PRWord and PRUword in new code.
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A PRWord is an integer that is the same size as a void*.
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** It implements the notion of a "word" in the Java Virtual
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Machine.  (See Sec. 3.4 "Words", The Java Virtual Machine
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Specification, Addison-Wesley, September 1996.
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** http://java.sun.com/docs/books/vmspec/index.html.)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN64
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PRWord;
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint64 PRUword;
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRWord;
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUword;
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(NO_NSPR_10_SUPPORT)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ???????????????? FIX ME       ??????????????????????????? *****/
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Some old definitions until pr=>ds transition is done ***/
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Also, we are still using NSPR 1.0. GC ******************/
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Fundamental NSPR macros, used nearly everywhere.
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PUBLIC_API		PR_IMPLEMENT
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro body brackets so that macros with compound statement definitions
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** behave syntactically more like functions when called.
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_MACRO        do {
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_MACRO          } while (0)
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro shorthands for conditional C++ extern block delimiters.
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_BEGIN_EXTERN_C
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_BEGIN_EXTERN_C
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_END_EXTERN_C
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_END_EXTERN_C
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C     extern "C" {
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C       }
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ????????????? End Fix me ?????????????????????????????? *****/
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NO_NSPR_10_SUPPORT */
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Compile-time assert. "condition" must be a constant expression.
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The macro can be used only in places where an "extern" declaration is
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** allowed.
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_ASSERT(condition) \
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extern void pr_static_assert(int arg[(condition) ? 1 : -1])
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_END_EXTERN_C
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(NO_NSPR_10_SUPPORT)
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prtypes_h___ */
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
559