You are currently viewing a snapshot of www.mozilla.org taken on April 21, 2008. Most of this content is highly out of date (some pages haven't been updated since the project began in 1998) and exists for historical purposes only. If there are any pages on this archive site that you think should be added back to www.mozilla.org, please file a bug.



NSPR Types (Chapter 2)

This chapter describes the most common NSPR types. Other chapters describe more specialized types when describing the functions that use them.

For information on naming conventions for NSPR types, functions, and macros, see NSPR Naming Conventions.

Calling Convention Types

These types are used to support cross-platform declarations of prototypes and implementations:

  • PR_EXTERN is used for definitions of external functions or variables.
  • PR_IMPLEMENT is used for declarations of external functions or variables.
  • PR_CALLBACK is used for definitions and declarations of functions that are called via function pointers. A typical example is a function implemented in an application but called from a shared library.

Here are some simple examples of the use of these types:

In dowhim.h:

PR_EXTERN( void ) DoWhatIMean( void );
static void PR_CALLBACK RootFunction(void *arg);

In dowhim.c:

PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; };
PRThread *thread = PR_CreateThread(..., RootFunction, ...);

PR_EXTERN

Used to define the prototypes for functions or variables that are to be exported from a shared library.

Syntax

#include <prtypes.h>
PR_EXTERN(type) prototype

Description

PR_EXTERN is used to define externally visible routines and globals. For syntax details for each platform, see prtypes.h. The macro includes the proper specifications to declare the target extern and set up other required linkages.

Warning

Some platforms do not allow the use of the underscore character (_) as the first character of an exported symbol.

PR_IMPLEMENT

Used to define implementations of symbols that are to be exported from a shared library.

Syntax

#include <prtypes.h>
PR_IMPLEMENTtype) implementation

Description

PR_IMPLEMENT is used to define implementations of externally visible routines and globals. For syntax details for each platform, see prtypes.h.

Warning

Some platforms do not allow the use of the underscore character (_) as the first character of an exported symbol.

PR_CALLBACK

Used to define pointers to functions that will be implemented by the client but called from a (different) shared library.

Syntax

#include <prtypes.h>
type PR_CALLBACK implementation

Description

Functions that are implemented in an application (or shared library) that are intended to be called from another shared library (such as NSPR) must be declared with the PR_CALLBACK attribute. Normally such functions are passed by reference (pointer to function). The PR_CALLBACK attribute is included as part of the function's definition between its return value type and the function's name.

Algebraic Types

NSPR provides the following type definitions with unambiguous bit widths for algebraic operations:

For convenience, NSPR also provides type definitions with platform-dependent bit widths:

8-, 16-, and 32-bit Integer Types

Signed Integers

PRInt8

Guaranteed to be a signed 8-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRInt8;
PRInt16

Guaranteed to be a signed 16-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRInt16;
PRInt32

Guaranteed to be a signed 32-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRInt32;
Description

May be defined as an int or a long, depending on the platform. For syntax details for each platform, see prtypes.h.

Unsigned Integers

PRUint8

Guaranteed to be an unsigned 8-bit integer on all platforms. There is no type equivalent to a plain char.

Syntax
#include <prtypes.h>
typedef definition PRUint8;
PRUint16

Guaranteed to be an unsigned 16-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRUint16;
PRUint32

Guaranteed to be an unsigned 32-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRUint32;
Description

May be defined as an unsigned int or an unsigned long, depending on the platform. For syntax details for each platform, see prtypes.h.

64-bit Integer Types

Different platforms treat 64-bit numeric fields in different ways. Some systems require emulation of 64-bit fields by using two 32-bit numeric fields bound in a structure. Since the types (long long versus struct LONGLONG) are not type compatible, NSPR defines macros to manipulate 64-bit numeric fields. These macros are defined in prlong.h. Conscientious use of these macros ensures portability of code to all the platforms supported by NSPR and still provides optimal behavior on those systems that treat long long values directly.

PRInt64

Guaranteed to be a signed 64-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRInt64;
Description

May be defined in several different ways, depending on the platform. For syntax details for each platform, see prtypes.h.

PRUint64

Guaranteed to be an unsigned 64-bit integer on all platforms.

Syntax
#include <prtypes.h>
typedef definition PRUint64;
Description

May be defined in several different ways, depending on the platform. For syntax details for each platform, see prtypes.h.

Floating-Point Number Type

The NSPR floating-point type is always 64 bits.

Syntax

#include <prtypes.h>
typedef double PRFloat64;

Native OS Integer Types

These types are most appropriate for automatic variables. They are guaranteed to be at least 16 bits, though various architectures may define them to be wider (for example, 32 or even 64 bits). These types are never valid for fields of a structure.

Syntax

#include <prtypes.h>
typedef int PRIntn;
typedef unsigned int PRUintn;

Miscellaneous Types

Size Type

PRSize

A type for representing the size of an object (not the size of a pointer). This is the same as the corresponding type in lib.c.

Syntax
#include <prtypes.h>
typedef size_t PRSize;

Pointer Difference Types

Types for pointer difference. Variables of these types are suitable for storing a pointer or pointer subtraction. These are the same as the corresponding types in libc.

PRPtrdiff

Signed pointer difference type.

Syntax
#include <prtypes.h>
typedef ptrdiff_t PRPtrdiff;

PRUptrdiff

Unsigned pointer difference type.

Syntax
#include <prtypes.h>
typedef unsigned long PRUptrdiff;

Boolean Types

Type and constants for Boolean values.

PRBool

Boolean value.

Syntax
#include <prtypes.h>
typedef enum { PR_FALSE = 0, PR_TRUE = 1 } PRBool;
Description

Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE for clarity of target type in assignments and actual arguments. Use if (bool), while (!bool), (bool) ? x : y, and so on to test Boolean values, just as you would C int-valued conditions.

PRPackedBool

Packed Boolean value.

Syntax
#include <prtypes.h>
typedef PRUint8 PRPackedBool;
Description

Use PRPackedBool within structures where bit fields are not desirable but minimum and consistent overhead matters.

Status Type for Return Values

PRStatus

Type for status code returned by some functions.

Syntax
#include <prtypes.h>
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;