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