Annotation of sbbs/include/mozilla/js/jsxdrapi.h, revision 1.1.1.2

1.1       root        1: /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
1.1.1.2 ! root        2:  * vim: set ts=8 sw=4 et tw=78:
1.1       root        3:  *
                      4:  * ***** BEGIN LICENSE BLOCK *****
                      5:  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
                      6:  *
                      7:  * The contents of this file are subject to the Mozilla Public License Version
                      8:  * 1.1 (the "License"); you may not use this file except in compliance with
                      9:  * the License. You may obtain a copy of the License at
                     10:  * http://www.mozilla.org/MPL/
                     11:  *
                     12:  * Software distributed under the License is distributed on an "AS IS" basis,
                     13:  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
                     14:  * for the specific language governing rights and limitations under the
                     15:  * License.
                     16:  *
                     17:  * The Original Code is Mozilla Communicator client code, released
                     18:  * March 31, 1998.
                     19:  *
                     20:  * The Initial Developer of the Original Code is
                     21:  * Netscape Communications Corporation.
                     22:  * Portions created by the Initial Developer are Copyright (C) 1998
                     23:  * the Initial Developer. All Rights Reserved.
                     24:  *
                     25:  * Contributor(s):
                     26:  *
                     27:  * Alternatively, the contents of this file may be used under the terms of
                     28:  * either of the GNU General Public License Version 2 or later (the "GPL"),
                     29:  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
                     30:  * in which case the provisions of the GPL or the LGPL are applicable instead
                     31:  * of those above. If you wish to allow use of your version of this file only
                     32:  * under the terms of either the GPL or the LGPL, and not to allow others to
                     33:  * use your version of this file under the terms of the MPL, indicate your
                     34:  * decision by deleting the provisions above and replace them with the notice
                     35:  * and other provisions required by the GPL or the LGPL. If you do not delete
                     36:  * the provisions above, a recipient may use your version of this file under
                     37:  * the terms of any one of the MPL, the GPL or the LGPL.
                     38:  *
                     39:  * ***** END LICENSE BLOCK ***** */
                     40: 
                     41: #ifndef jsxdrapi_h___
                     42: #define jsxdrapi_h___
                     43: 
                     44: /*
                     45:  * JS external data representation interface API.
                     46:  *
                     47:  * The XDR system is comprised of three major parts:
                     48:  *
                     49:  * - the state serialization/deserialization APIs, which allow consumers
                     50:  *   of the API to serialize JS runtime state (script bytecodes, atom maps,
                     51:  *   object graphs, etc.) for later restoration.  These portions
                     52:  *   are implemented in various appropriate files, such as jsscript.c
                     53:  *   for the script portions and jsobj.c for object state.
                     54:  * - the callback APIs through which the runtime requests an opaque
                     55:  *   representation of a native object, and through which the runtime
                     56:  *   constructs a live native object from an opaque representation. These
                     57:  *   portions are the responsibility of the native object implementor.
                     58:  * - utility functions for en/decoding of primitive types, such as
                     59:  *   JSStrings.  This portion is implemented in jsxdrapi.c.
                     60:  *
                     61:  * Spiritually guided by Sun's XDR, where appropriate.
                     62:  */
                     63: 
                     64: #include "jspubtd.h"
                     65: #include "jsprvtd.h"
                     66: 
                     67: JS_BEGIN_EXTERN_C
                     68: 
                     69: /* We use little-endian byteorder for all encoded data */
                     70: 
                     71: #if defined IS_LITTLE_ENDIAN
                     72: #define JSXDR_SWAB32(x) x
                     73: #define JSXDR_SWAB16(x) x
                     74: #elif defined IS_BIG_ENDIAN
                     75: #define JSXDR_SWAB32(x) (((uint32)(x) >> 24) |                                \
                     76:                          (((uint32)(x) >> 8) & 0xff00) |                      \
                     77:                          (((uint32)(x) << 8) & 0xff0000) |                    \
                     78:                          ((uint32)(x) << 24))
                     79: #define JSXDR_SWAB16(x) (((uint16)(x) >> 8) | ((uint16)(x) << 8))
                     80: #else
                     81: #error "unknown byte order"
                     82: #endif
                     83: 
                     84: #define JSXDR_ALIGN     4
                     85: 
                     86: typedef enum JSXDRMode {
                     87:     JSXDR_ENCODE,
                     88:     JSXDR_DECODE,
                     89:     JSXDR_FREE
                     90: } JSXDRMode;
                     91: 
                     92: typedef enum JSXDRWhence {
                     93:     JSXDR_SEEK_SET,
                     94:     JSXDR_SEEK_CUR,
                     95:     JSXDR_SEEK_END
                     96: } JSXDRWhence;
                     97: 
                     98: typedef struct JSXDROps {
                     99:     JSBool      (*get32)(JSXDRState *, uint32 *);
                    100:     JSBool      (*set32)(JSXDRState *, uint32 *);
                    101:     JSBool      (*getbytes)(JSXDRState *, char *, uint32);
                    102:     JSBool      (*setbytes)(JSXDRState *, char *, uint32);
                    103:     void *      (*raw)(JSXDRState *, uint32);
                    104:     JSBool      (*seek)(JSXDRState *, int32, JSXDRWhence);
                    105:     uint32      (*tell)(JSXDRState *);
                    106:     void        (*finalize)(JSXDRState *);
                    107: } JSXDROps;
                    108: 
                    109: struct JSXDRState {
                    110:     JSXDRMode   mode;
                    111:     JSXDROps    *ops;
                    112:     JSContext   *cx;
                    113:     JSClass     **registry;
                    114:     uintN       numclasses;
                    115:     uintN       maxclasses;
                    116:     void        *reghash;
                    117:     void        *userdata;
1.1.1.2 ! root      118:     JSScript    *script;
1.1       root      119: };
                    120: 
                    121: extern JS_PUBLIC_API(void)
                    122: JS_XDRInitBase(JSXDRState *xdr, JSXDRMode mode, JSContext *cx);
                    123: 
                    124: extern JS_PUBLIC_API(JSXDRState *)
                    125: JS_XDRNewMem(JSContext *cx, JSXDRMode mode);
                    126: 
                    127: extern JS_PUBLIC_API(void *)
                    128: JS_XDRMemGetData(JSXDRState *xdr, uint32 *lp);
                    129: 
                    130: extern JS_PUBLIC_API(void)
                    131: JS_XDRMemSetData(JSXDRState *xdr, void *data, uint32 len);
                    132: 
                    133: extern JS_PUBLIC_API(uint32)
                    134: JS_XDRMemDataLeft(JSXDRState *xdr);
                    135: 
                    136: extern JS_PUBLIC_API(void)
                    137: JS_XDRMemResetData(JSXDRState *xdr);
                    138: 
                    139: extern JS_PUBLIC_API(void)
                    140: JS_XDRDestroy(JSXDRState *xdr);
                    141: 
                    142: extern JS_PUBLIC_API(JSBool)
                    143: JS_XDRUint8(JSXDRState *xdr, uint8 *b);
                    144: 
                    145: extern JS_PUBLIC_API(JSBool)
                    146: JS_XDRUint16(JSXDRState *xdr, uint16 *s);
                    147: 
                    148: extern JS_PUBLIC_API(JSBool)
                    149: JS_XDRUint32(JSXDRState *xdr, uint32 *lp);
                    150: 
                    151: extern JS_PUBLIC_API(JSBool)
                    152: JS_XDRBytes(JSXDRState *xdr, char *bytes, uint32 len);
                    153: 
                    154: extern JS_PUBLIC_API(JSBool)
                    155: JS_XDRCString(JSXDRState *xdr, char **sp);
                    156: 
                    157: extern JS_PUBLIC_API(JSBool)
                    158: JS_XDRCStringOrNull(JSXDRState *xdr, char **sp);
                    159: 
                    160: extern JS_PUBLIC_API(JSBool)
                    161: JS_XDRString(JSXDRState *xdr, JSString **strp);
                    162: 
                    163: extern JS_PUBLIC_API(JSBool)
                    164: JS_XDRStringOrNull(JSXDRState *xdr, JSString **strp);
                    165: 
                    166: extern JS_PUBLIC_API(JSBool)
                    167: JS_XDRDouble(JSXDRState *xdr, jsdouble **dp);
                    168: 
                    169: extern JS_PUBLIC_API(JSBool)
                    170: JS_XDRValue(JSXDRState *xdr, jsval *vp);
                    171: 
                    172: extern JS_PUBLIC_API(JSBool)
                    173: JS_XDRScript(JSXDRState *xdr, JSScript **scriptp);
                    174: 
                    175: extern JS_PUBLIC_API(JSBool)
                    176: JS_XDRRegisterClass(JSXDRState *xdr, JSClass *clasp, uint32 *lp);
                    177: 
                    178: extern JS_PUBLIC_API(uint32)
                    179: JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name);
                    180: 
                    181: extern JS_PUBLIC_API(JSClass *)
                    182: JS_XDRFindClassById(JSXDRState *xdr, uint32 id);
                    183: 
                    184: /*
                    185:  * Magic numbers.
                    186:  */
                    187: #define JSXDR_MAGIC_SCRIPT_1        0xdead0001
                    188: #define JSXDR_MAGIC_SCRIPT_2        0xdead0002
                    189: #define JSXDR_MAGIC_SCRIPT_3        0xdead0003
                    190: #define JSXDR_MAGIC_SCRIPT_4        0xdead0004
1.1.1.2 ! root      191: #define JSXDR_MAGIC_SCRIPT_5        0xdead0005
        !           192: #define JSXDR_MAGIC_SCRIPT_CURRENT  JSXDR_MAGIC_SCRIPT_5
        !           193: 
        !           194: /*
        !           195:  * Bytecode version number.  Decrement the second term whenever JS bytecode
        !           196:  * changes incompatibly.
        !           197:  *
        !           198:  * This version number should be XDR'ed once near the front of any file or
        !           199:  * larger storage unit containing XDR'ed bytecode and other data, and checked
        !           200:  * before deserialization of bytecode.  If the saved version does not match
        !           201:  * the current version, abort deserialization and invalidate the file.
        !           202:  */
        !           203: #define JSXDR_BYTECODE_VERSION      (0xb973c0de - 16)
        !           204: 
        !           205: /*
        !           206:  * Library-private functions.
        !           207:  */
        !           208: extern JSBool
        !           209: js_XDRAtom(JSXDRState *xdr, JSAtom **atomp);
        !           210: 
        !           211: extern JSBool
        !           212: js_XDRStringAtom(JSXDRState *xdr, JSAtom **atomp);
        !           213: 
        !           214: /*
        !           215:  * FIXME: This is non-unicode version of js_XDRStringAtom that performs lossy
        !           216:  * conversion. Do not use it in the new code! See bug 325202.
        !           217:  */
        !           218: extern JSBool
        !           219: js_XDRCStringAtom(JSXDRState *xdr, JSAtom **atomp);
1.1       root      220: 
                    221: JS_END_EXTERN_C
                    222: 
                    223: #endif /* ! jsxdrapi_h___ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.