File:
[parser3project] /
win32 /
sql /
oracle /
include /
oci /
sx3.h
Revision
1.1.1.1 (vendor branch):
download - view:
text,
annotated -
select for diffs -
revision graph
Fri Sep 21 15:47:35 2001 UTC (24 years, 9 months ago) by
parser
Branches:
avendor,
MAIN
CVS tags:
template_gc,
release_3_2_1,
release_3_2_0,
release_3_1_6,
release_3_1_5,
release_3_1_4,
release_3_1_3,
release_3_1_2,
release_3_1_1,
release_3_1_0,
release_3_0_8,
release_3_0_0007,
release_3_0_0005,
release_3_0_0004,
release_3_0_0003,
release_3_0_0002,
release_1_0_0001,
paf_left,
before_release_3_2_1,
before_killing_gdome,
arelease,
HEAD
no message
/*
* $Header: /home/cvsroot/parser3project/win32/sql/oracle/include/oci/sx3.h,v 1.1.1.1 2001/09/21 15:47:35 parser Exp $
*/
/* Copyright (c) Oracle Corporation 1997, 1998, 1999. All Rights Reserved. */
/*
NAME
sx3.h - System dependent eXternal definitions for disk data structures.
(Solaris version).
DESCRIPTION
System dependent definitions and declarations used in all Oracle disk
data structures.
RELATED DOCUMENTS
INSPECTION STATUS
Inspection date:
Inspection status:
Estimated increasing cost defects per page:
Rule sets:
ACCEPTANCE REVIEW STATUS
Review date:
Review status:
Reviewers:
PUBLIC FUNCTIONS
None
PRIVATE FUNCTIONS
None
EXAMPLES
N/A
NOTES
This file contains system dependent definitions and declarations of
data types used in on-disk structures. On-disk structures should be
defined in separate header files and can only use data types defined
in this file. On-disk structures should not use any native types or
any other type not defined in this file (but defined in sx.h).
Separating the definitions of on-disk data types allows us to keep
them compatible across different versions. The key purpose of this
file is to restrict the data types which can go on disk and to make sure
that their sizes remain the same across different versions.
The -MAXVAL and -MINVAL constants represent the numerical range of
the relevant data type on the current port, i.e. the value of such
symbol may change from one port to another. The MIN-MAXVAL and
MAX-MINVAL constants represent the numerical range of the relevant
data type across all ports, i.e. the value of these should never be
changed by porters. Note that MAXSB1MINVAL is -127, instead of
-128, to support one's ** complement arithmetic architectures.
DEVELOPERS: This file has been created to separate all the valid
data types that can go on on-disk structures. All the types in
this file are guaranteed to be of the same size across different
versions, specifically while migrating from 32 bit to 64 bit.
This is very important to maintain the consistency of data on
the disk. All on-disk structures should be defined in separate
header files (*3.h) and *3.h can only include other *3.h header
files. New data types d*word, dptr_t, dboolean and dsize_t have been
defined to be used in place of *word, ptr_t, boolean and size_t. All
the existing references to *word, size_t, boolean and ptr_t in on-disk
structures have to be replaced with d*word, dsize_t, dboolean and
dptr_t as word, size_t, boolean and ptr_t could be of different sizes
in different versions. d*word, dsize_t, dboolean and dptr_t are currently
defined to have the same size as the existing type and are guaranteed to
remain the same size in all future versions, like in 64 bit versions.
The d*word, dsize_t, dboolean and dptr_t data types should never be used in
any new data structures. Also dptr_t is defined as a non pointer type
to preserve the size. So it should never be used to store a pointer.
It is provided as a place holder to preserve the size of the structure.
RELATED NOTE: Normal alignment macros like slalsu should never be used
for on-disk data types. You should use a new set of alignment macros
defined in sl.h. Instead of slalsu, slalsd, slalpu and slalpd you should
use sldalsu, sldalsd, sldalpu and sldalpd respectively.
PRODUCT LINE DEVELOPERS: This file is solaris specific and
product lines have to modify this file to reflect their platform. In
this file the datatypes eb1, ub1, sb1, eb2, ub2, sb2, eb4, ub4, sb4
must be defined so that they are always of same size for a
particular platform across different versions. For eg: In solaris
ub1, ub2, ub4 occupy 1, 2 and 4 bytes respectively. While porting to
different versions for solaris (say to 64 bit), porters have to make
sure that they always occupy 1,2 and 4 bytes. If the native data
type associated with these types are changed to preserve the sizes,
then literals MIN & MAXVALS have to be changed accordingly. While
porting to 64 bit, only the definitions of *b1,*b2 and *b4 can be
changed to preserve their sizes. All other datatypes must not be
changed.
dword, dsize_t, dboolean and dptr_t are defined to provide backward
compatibility with word, size_t, boolean and ptr_t. Their definitions
must be set such that their size is the same as existing word, size_t,
boolean and ptr_t and should never be changed in the future. For example
in solaris ptr_t (defined as void *) has the same size as unsigned long
which is 4 bytes. So dptr_t is defined as ub4 and as ub4's size will
be constant in the future so will be dsize_t's size. The definition
of d* should never be changed once they have been defined for a
particular product line.
MODIFIED (MM/DD/YY)
tsaulys 02/10/99 - move obsolete types and macros
dcolello 08/25/98 - WIN32COMMON: port
kkarun 08/14/98 - Rollback 667803
tsaulys 07/31/98 - do not use text for C++ (when LUSEMFC defined)
skabraha 05/08/98 - no more 1's complement support
skabraha 04/17/98 - changing xb4 to int
skabraha 01/27/98 - adding M_IDEN and SLMXFNMLEN
skabraha 10/28/97 - Defining some datatypes to garbage
skabraha 10/16/97 - Creation
*/
#ifndef SX3_ORACLE
#define SX3_ORACLE
#ifndef ORALIMITS
# include <limits.h>
# define ORALIMITS
#endif /* !ORALIMITS */
/*
** Note: this is the WIN32COMMON version of sx3.h. Always make sure that
** WIN32COMMON is defined. It is not defined yet if this file is included
** first for whatever reason.
*/
#ifndef WIN32COMMON
#define WIN32COMMON
#endif
#ifdef WIN32COMMON
/* make sure stdlib.h is included to avoid warning with max()/min() macros */
#ifndef ORASTDLIB
# include <stdlib.h>
# define ORASTDLIB
#endif
#endif /* WIN32COMMON */
/* All references to size_t has to be replaced with dsize_t. size_t should not
* be used in any disk structures. To enforce this size_t is defined to
* an invalid type here. It is redefined to a valid type in sx.h from the
* included file stddef.h.
*/
#ifdef size_t
# undef size_t
#endif /* size_t */
#define size_t size_t_may_not_be_used_here
/* As olint accepts most of the datatypes on its own here we are #defining
* the unwanted data types to garbage to catch its usage. These will be
* #undefed in the beginning of sx.h.
*/
#ifndef SX3_GARBAGE_DEFS
# define SX3_GARBAGE_DEFS
# define uword uword_may_not_be_used_here
# define sword sword_may_not_be_used_here
# define ubig_ora ubig_ora_may_not_be_used_here
# define sbig_ora sbig_ora_may_not_be_used_here
# define ub8 ub8_may_not_be_used_here
# define sb8 sb8_may_not_be_used_here
# ifndef WIN32COMMON
# define boolean boolean_may_not_be_used_here
# else /* WIN32COMMON */
# undef boolean
# endif /* WIN32COMMON */
# define ptr_t ptr_t_may_not_be_used_here
#endif /* SX3_GARBAGE_DEFS */
/**-------------------------------------------------------------------------**/
/** DATA TYPE DEFINITIONS **/
/**-------------------------------------------------------------------------**/
/* We #define while linting as lint complains while casting between
* two datatypes which have been typedefed to compatible types.
*/
/* xb1 definitions. xb1 will be exactly one byte - at least 8 bits,
* possibly more. sizeof(ub1) is guaranteed to be 1
*/
#ifndef lint
typedef unsigned char ub1; /* use where unsigned important */
typedef signed char sb1; /* use where signed important */
#else
#define ub1 unsigned char
#define sb1 signed char
#endif /* LINT */
#define UB1MAXVAL ((ub1)UCHAR_MAX)
#define UB1MINVAL ((ub1) 0)
#define SB1MAXVAL ((sb1)SCHAR_MAX)
#define SB1MINVAL ((sb1)SCHAR_MIN)
#define MINUB1MAXVAL ((ub1) 255)
#define MAXUB1MINVAL ((ub1) 0)
#define MINSB1MAXVAL ((sb1) 127)
#define MAXSB1MINVAL ((sb1) -127)
/* xb2 definitions. xb2 will be atleast 2 bytes, possible more */
#ifndef lint
typedef unsigned short ub2; /* use where unsigned important */
typedef signed short sb2; /* use where signed important */
#else
#define ub2 unsigned short
#define sb2 signed short
#endif /* LINT */
#define UB2MAXVAL ((ub2)USHRT_MAX)
#define UB2MINVAL ((ub2) 0)
#define SB2MAXVAL ((sb2) SHRT_MAX)
#define SB2MINVAL ((sb2) SHRT_MIN)
#define MINUB2MAXVAL ((ub2) 65535)
#define MAXUB2MINVAL ((ub2) 0)
#define MINSB2MAXVAL ((sb2) 32767)
#define MAXSB2MINVAL ((sb2)-32767)
/* xb4 definitions. xb4 will be atleast 4 bytes, possibly more */
#ifndef lint
typedef unsigned int ub4; /* use where unsigned important */
typedef signed int sb4; /* use where signed important */
#else
#define ub4 unsigned int
#define sb4 signed int
#endif /* LINT */
#define UB4MAXVAL ((ub4)UINT_MAX)
#define UB4MINVAL ((ub4) 0)
#define SB4MAXVAL ((sb4) INT_MAX)
#define SB4MINVAL ((sb4) INT_MIN)
#define MINUB4MAXVAL ((ub4) 4294967295)
#define MAXUB4MINVAL ((ub4) 0)
#define MINSB4MAXVAL ((sb4) 2147483647)
#define MAXSB4MINVAL ((sb4)-2147483647)
/* number of bits in a byte */
#define UB1BITS CHAR_BIT
#define UB1MASK ((1 << ((uword)CHAR_BIT)) - 1)
/* This definition has been moved from s.h as it is used by on-disk
* data structures. The macros for bitvec are in s.h.
*/
typedef ub1 bitvec;
/* BITVEC - to size bitvec arrays */
#define BITVEC(n) (((n)+(UB1BITS-1))>>3)
/* human readable (printable) characters. oratext should always be one byte */
/*
* Update for C++ design: change text to oratext
* typedef unsigned char text;
*/
#ifdef lint
# define oratext unsigned char
#else
typedef unsigned char oratext;
#endif
/* macros defining min & max */
#ifdef WIN32COMMON
#ifndef max
#define max(x, y) (((x) < (y)) ? (y) : (x))
#endif
#else
#define max(x, y) (((x) < (y)) ? (y) : (x))
#endif
#define min(x, y) (((x) < (y)) ? (x) : (y))
/**-------------------------------------------------------------------------**/
/** ALTERNATE DATA TYPES FOR THOSE OBSOLETED FOR ON_DISK DATA STRUCTURES **/
/**-------------------------------------------------------------------------**/
/* Developers should replace all existing references to *word, ptr_t, boolean
* and size_t in disk data structures with d*word, dptr_t, dboolean and
* dsize_t respectively. These types are guaranteed to be of the same size
* across different versions on a platform.
*
* d*word, dsize_t, dboolean and dptr_t should never be used in new data structures.
* They should only be used to preserve the sizes of existing data
* structures.
*
* WARNING: dptr_t has been defined to be a non-pointer datatype so that we
* can guarantee that the size remains same!!!
*/
/* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
* same size as the current size of *word in your platform. Once the size
* of d*word has been defined, it should always be of the same size in
* all future versions (irrespective of the size of *word in later versions)
*
* For example in Solaris uword is defined as having 4 bytes. Hence d*word is
* defined as *b4. This definition will NOT be changed in the future, thus
* preserving the size.
*/
/* deword is defined as eb4. As ebx is defined later in the obselete section
* the definition of deword was moved there.
*/
#ifndef lint
typedef ub4 duword;
typedef sb4 dsword;
/* word is an obselete datatype. But it still needs to be changed to dword */
typedef dsword dword;
#else
#define duword ub4
#define dsword sb4
#define dword dsword
#endif /*LINT */
#define DUWORDMAXVAL UB4MAXVAL
#define DUWORDMINVAL UB4MINVAL
#define DSWORDMAXVAL SB4MAXVAL
#define DSWORDMINVAL SB4MINVAL
#define MINDUWORDMAXVAL MINUB4MAXVAL
#define MAXDUWORDMINVAL MAXUB4MINVAL
#define MINDSWORDMAXVAL MINSB4MAXVAL
#define MAXDSWORDMINVAL MAXSB4MINVAL
#define DWORDMAXVAL DSWORDMAXVAL
#define DWORDMINVAL DSWORDMINVAL
/* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
* same size as the current size of size_t in your platform. Once the size
* of dsize_t has been defined, it should always be of the same size in all
* future versions (irrespective of the size of size_t in later versions)
*
* For example in Solaris size_t is defined as unsigned int which is
* the same as ub4. Hence it is defined as ub4.
*/
#ifndef lint
typedef ub4 dsize_t;
# else
# define dsize_t ub4
#endif /*LINT */
# define DSIZE_TMAXVAL UB4MAXVAL
# define MINDSIZE_TMAXVAL (dsize_t)65535
/* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
* same size as the current size of boolean in your platform. Once the size
* of dboolean has been defined, it should always be of the same size in all
* future versions (irrespective of the size of boolean in later versions)
*
* For example in Solaris boolean is defined as int which is 4 bytes. Hence
* dboolean is defined as sb4.
*/
#ifndef lint
typedef sb4 dboolean;
# else
# define dboolean sb4
#endif /*LINT */
/*
* PRODUCT LINE DEVELOPERS: Change this typedef to a type which has the
* same size as the size of ptr_t in the existing version. Once the size of
* dptr_t has been defined it should always be of the same size in all future
* versions, irrrespective of the size of ptr_t in later versions.
*
* For example in Solaris the pointer is a 4 byte quantity and hence dptr_t
* is defined as ub4.
*
* WARNING! dptr_t has been defined to be a non-pointer datatype so that
* we can guarantee that the size remains same! So it should never be used
* to store a pointer. It should only be used as a place holder to preserve
* the size of the structure.
*/
#ifndef lint
typedef ub4 dptr_t;
#else
#define dptr_t ub4
#endif /* lint */
/* SLMXFNMLEN: Maximum file name length */
#ifdef AIXRIOS
# define SLMXFNMLEN 256
#else
# define SLMXFNMLEN 512
#endif /* AIXRIOS */
/**-------------------------------------------------------------------------**/
/** OBSOLETE DATA TYPES **/
/**-------------------------------------------------------------------------**/
/* OBSOLETE: The following data types have been obsoleted. They should
* not be used in any new code. Types word, b1, b2, & b4 were
* considered to be synonyms of eword, eb1, eb2 & eb4, but which
* actually had to be implemented as sword, sb1, sb2, & sb4 for
* backward compatibility of old code.
*/
/* ebx definitions */
#ifndef lint
typedef char eb1;
typedef short eb2;
typedef int eb4;
typedef eb4 deword;
#else
# define eb1 char
# define eb2 short
# define eb4 int
# define deword eb4
#endif
#define EB1MAXVAL ((eb1)SCHAR_MAX)
#define EB1MINVAL ((eb1) 0)
#define MINEB1MAXVAL ((eb1) 127)
#define MAXEB1MINVAL ((eb1) 0)
#define EB2MAXVAL ((eb2) SHRT_MAX)
#define EB2MINVAL ((eb2) 0)
#define MINEB2MAXVAL ((eb2) 32767)
#define MAXEB2MINVAL ((eb2) 0)
#define EB4MAXVAL ((eb4) INT_MAX)
#define EB4MINVAL ((eb4) 0)
#define MINEB4MAXVAL ((eb4) 2147483647)
#define MAXEB4MINVAL ((eb4) 0)
#define DEWORDMAXVAL EB4MAXVAL
#define DEWORDMINVAL EB4MINVAL
#define MINDEWORDMAXVAL MINEB4MAXVAL
#define MAXDEWORDMINVAL MAXEB4MINVAL
/* bx definitions */
#ifndef lint
typedef sb1 b1;
#else
#define b1 sb1
#endif /* lint */
#define B1MAXVAL SB1MAXVAL
#define B1MINVAL SB1MINVAL
#ifndef lint
typedef sb2 b2;
#else
#define b2 sb2
#endif /* lint */
#define B2MAXVAL SB2MAXVAL
#define B2MINVAL SB2MINVAL
#ifndef lint
typedef sb4 b4;
#else
#define b4 sb4
#endif /* lint */
# define B4MAXVAL SB4MAXVAL
# define B4MINVAL SB4MINVAL
#ifndef uiXT
/* Since the use of BITS16 and BITS32 conflict with X Windows definitions, */
/* they need to disappear when Xt-based toolkits are being compiled. */
/* OBSOLETE: BITS8/16/32 are synonyms of ub1/2/4, which are preferred */
typedef ub1 BITS8; /* Can hold 8 bits */
typedef ub2 BITS16; /* Can hold 16 bits */
typedef ub4 BITS32; /* Can hold 32 bits */
#endif /* uiXT */
/* OBSOLETE: For C++ users who are using Microsoft Foundation Classes, the
* obsolete Oracle type text conflicts with a reserved keyword. If LUSEMFC is
* defined, the Oracle definition of text is not used.
*/
#if !defined(LUSEMFC)
# ifdef lint
# define text unsigned char
# define OraText unsigned char
# else
typedef oratext text;
typedef oratext OraText;
# endif /* lint */
#endif /* !LUSEMFC */
/* OBSOLETE:
** M_IDEN - maximum identifier size
**
** This constant is generic, and should NEVER be changed.
*/
#define M_IDEN 30
#endif /* SX3_ORACLE */
E-mail: