~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to erts/emulator/beam/erl_nif.h

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * %CopyrightBegin%
3
 
 * 
4
 
 * Copyright Ericsson AB 2009. All Rights Reserved.
5
 
 * 
 
3
 *
 
4
 * Copyright Ericsson AB 2009-2011. All Rights Reserved.
 
5
 *
6
6
 * The contents of this file are subject to the Erlang Public License,
7
7
 * Version 1.1, (the "License"); you may not use this file except in
8
8
 * compliance with the License. You should have received a copy of the
9
9
 * Erlang Public License along with this software. If not, it can be
10
10
 * retrieved online at http://www.erlang.org/.
11
 
 * 
 
11
 *
12
12
 * Software distributed under the License is distributed on an "AS IS"
13
13
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14
14
 * the License for the specific language governing rights and limitations
15
15
 * under the License.
16
 
 * 
 
16
 *
17
17
 * %CopyrightEnd%
18
18
 */
19
19
 
20
20
/* Include file for writers of Native Implemented Functions. 
21
21
*/
22
22
 
23
 
#define ERL_NIF_MAJOR_VERSION 0
 
23
#ifndef __ERL_NIF_H__
 
24
#define __ERL_NIF_H__
 
25
 
 
26
 
 
27
#include "erl_drv_nif.h"
 
28
 
 
29
/* Version history:
 
30
** 0.1: R13B03
 
31
** 1.0: R13B04
 
32
** 2.0: R14A
 
33
** 2.1: R14B02 "vm_variant"
 
34
*/
 
35
#define ERL_NIF_MAJOR_VERSION 2
24
36
#define ERL_NIF_MINOR_VERSION 1
25
37
 
26
38
#include <stdlib.h>
27
39
 
 
40
#ifdef SIZEOF_CHAR
 
41
#  define SIZEOF_CHAR_SAVED__ SIZEOF_CHAR
 
42
#  undef SIZEOF_CHAR
 
43
#endif
 
44
#ifdef SIZEOF_SHORT
 
45
#  define SIZEOF_SHORT_SAVED__ SIZEOF_SHORT
 
46
#  undef SIZEOF_SHORT
 
47
#endif
 
48
#ifdef SIZEOF_INT
 
49
#  define SIZEOF_INT_SAVED__ SIZEOF_INT
 
50
#  undef SIZEOF_INT
 
51
#endif
 
52
#ifdef SIZEOF_LONG
 
53
#  define SIZEOF_LONG_SAVED__ SIZEOF_LONG
 
54
#  undef SIZEOF_LONG
 
55
#endif
 
56
#ifdef SIZEOF_LONG_LONG
 
57
#  define SIZEOF_LONG_LONG_SAVED__ SIZEOF_LONG_LONG
 
58
#  undef SIZEOF_LONG_LONG
 
59
#endif
 
60
#ifdef HALFWORD_HEAP_EMULATOR
 
61
#  define HALFWORD_HEAP_EMULATOR_SAVED__ HALFWORD_HEAP_EMULATOR
 
62
#  undef HALFWORD_HEAP_EMULATOR
 
63
#endif
 
64
#include "erl_int_sizes_config.h"
 
65
 
 
66
#ifdef __cplusplus
 
67
extern "C" {
 
68
#endif
 
69
 
 
70
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
 
71
typedef unsigned __int64 ErlNifUInt64;
 
72
typedef __int64 ErlNifSInt64;
 
73
#elif SIZEOF_LONG == 8
 
74
typedef unsigned long ErlNifUInt64;
 
75
typedef long ErlNifSInt64;
 
76
#elif SIZEOF_LONG_LONG == 8
 
77
typedef unsigned long long ErlNifUInt64;
 
78
typedef long long ErlNifSInt64;
 
79
#else
 
80
#error No 64-bit integer type
 
81
#endif
 
82
 
 
83
#ifdef HALFWORD_HEAP_EMULATOR
 
84
#  define ERL_NIF_VM_VARIANT "beam.halfword" 
 
85
typedef unsigned int ERL_NIF_TERM;
 
86
#else
 
87
#  define ERL_NIF_VM_VARIANT "beam.vanilla" 
28
88
typedef unsigned long ERL_NIF_TERM;
 
89
#endif
 
90
 
 
91
struct enif_environment_t;
 
92
typedef struct enif_environment_t ErlNifEnv;
29
93
 
30
94
typedef struct
31
95
{
32
96
    const char* name;
33
97
    unsigned arity;
34
 
    void* fptr; //ERL_NIF_TERM (*fptr)(void*, ...);
 
98
    ERL_NIF_TERM (*fptr)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
35
99
}ErlNifFunc;
36
100
 
37
 
struct enif_environment_t;
38
 
typedef struct enif_environment_t ErlNifEnv;
39
 
 
40
101
typedef struct enif_entry_t
41
102
{
42
103
    int major;
47
108
    int  (*load)   (ErlNifEnv*, void** priv_data, ERL_NIF_TERM load_info);
48
109
    int  (*reload) (ErlNifEnv*, void** priv_data, ERL_NIF_TERM load_info);
49
110
    int  (*upgrade)(ErlNifEnv*, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info);
50
 
    void (*unload) (ErlNifEnv*, void* priv_data);    
 
111
    void (*unload) (ErlNifEnv*, void* priv_data);
 
112
    const char* vm_variant;
51
113
}ErlNifEntry;
52
114
 
53
115
 
54
116
 
55
117
typedef struct
56
118
{
57
 
    unsigned size;
 
119
    size_t size;
58
120
    unsigned char* data;
59
121
 
60
122
    /* Internals (avert your eyes) */
61
123
    ERL_NIF_TERM bin_term;
62
 
    unsigned char* tmp_alloc;
63
124
    void* ref_bin;
64
 
    
65
125
}ErlNifBinary;
66
126
 
 
127
typedef struct enif_resource_type_t ErlNifResourceType;
 
128
typedef void ErlNifResourceDtor(ErlNifEnv*, void*);
 
129
typedef enum
 
130
{
 
131
    ERL_NIF_RT_CREATE = 1,
 
132
    ERL_NIF_RT_TAKEOVER = 2
 
133
}ErlNifResourceFlags;
 
134
 
 
135
typedef enum
 
136
{
 
137
    ERL_NIF_LATIN1 = 1
 
138
}ErlNifCharEncoding;
 
139
 
 
140
typedef struct
 
141
{
 
142
    ERL_NIF_TERM pid;  /* internal, may change */
 
143
}ErlNifPid;
 
144
 
 
145
typedef ErlDrvSysInfo ErlNifSysInfo;
 
146
 
 
147
typedef struct ErlDrvTid_ *ErlNifTid;
 
148
typedef struct ErlDrvMutex_ ErlNifMutex;
 
149
typedef struct ErlDrvCond_ ErlNifCond;
 
150
typedef struct ErlDrvRWLock_ ErlNifRWLock;
 
151
typedef int ErlNifTSDKey;
 
152
 
 
153
typedef ErlDrvThreadOpts ErlNifThreadOpts;
 
154
 
67
155
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
68
156
#  define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) RET_TYPE (*NAME) ARGS
69
157
typedef struct {
86
174
#endif
87
175
 
88
176
 
89
 
 
90
 
 
91
177
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
92
178
#  define ERL_NIF_INIT_GLOB TWinDynNifCallbacks WinDynNifCallbacks;
93
179
#  define ERL_NIF_INIT_DECL(MODNAME) __declspec(dllexport) ErlNifEntry* nif_init(TWinDynNifCallbacks* callbacks)
103
189
#endif
104
190
 
105
191
 
 
192
#ifdef __cplusplus
 
193
}
 
194
#  define ERL_NIF_INIT_PROLOGUE extern "C" {
 
195
#  define ERL_NIF_INIT_EPILOGUE }
 
196
#else
 
197
#  define ERL_NIF_INIT_PROLOGUE
 
198
#  define ERL_NIF_INIT_EPILOGUE
 
199
#endif
 
200
 
 
201
 
106
202
#define ERL_NIF_INIT(NAME, FUNCS, LOAD, RELOAD, UPGRADE, UNLOAD) \
 
203
ERL_NIF_INIT_PROLOGUE                   \
107
204
ERL_NIF_INIT_GLOB                       \
 
205
ERL_NIF_INIT_DECL(NAME);                \
108
206
ERL_NIF_INIT_DECL(NAME)                 \
109
207
{                                       \
110
208
    static ErlNifEntry entry =          \
114
212
        #NAME,                          \
115
213
        sizeof(FUNCS) / sizeof(*FUNCS), \
116
214
        FUNCS,                          \
117
 
        LOAD, RELOAD, UPGRADE, UNLOAD   \
 
215
        LOAD, RELOAD, UPGRADE, UNLOAD,  \
 
216
        ERL_NIF_VM_VARIANT              \
118
217
    };                                  \
119
218
    ERL_NIF_INIT_BODY;                  \
120
219
    return &entry;                      \
121
 
}
 
220
}                                       \
 
221
ERL_NIF_INIT_EPILOGUE
 
222
 
 
223
 
 
224
#endif /* __ERL_NIF_H__ */
122
225