rubyfb 0.5.2-x86-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/CHANGELOG +6 -0
  2. data/LICENSE +411 -0
  3. data/Manifest +73 -0
  4. data/README +460 -0
  5. data/Rakefile +20 -0
  6. data/examples/example01.rb +65 -0
  7. data/ext/AddUser.c +464 -0
  8. data/ext/AddUser.h +37 -0
  9. data/ext/Backup.c +783 -0
  10. data/ext/Backup.h +37 -0
  11. data/ext/Blob.c +421 -0
  12. data/ext/Blob.h +65 -0
  13. data/ext/Common.c +54 -0
  14. data/ext/Common.h +37 -0
  15. data/ext/Connection.c +863 -0
  16. data/ext/Connection.h +50 -0
  17. data/ext/DataArea.c +274 -0
  18. data/ext/DataArea.h +38 -0
  19. data/ext/Database.c +449 -0
  20. data/ext/Database.h +48 -0
  21. data/ext/FireRuby.c +240 -0
  22. data/ext/FireRuby.h +50 -0
  23. data/ext/FireRubyException.c +268 -0
  24. data/ext/FireRubyException.h +51 -0
  25. data/ext/Generator.c +689 -0
  26. data/ext/Generator.h +53 -0
  27. data/ext/RemoveUser.c +212 -0
  28. data/ext/RemoveUser.h +37 -0
  29. data/ext/Restore.c +855 -0
  30. data/ext/Restore.h +37 -0
  31. data/ext/ResultSet.c +809 -0
  32. data/ext/ResultSet.h +60 -0
  33. data/ext/Row.c +965 -0
  34. data/ext/Row.h +55 -0
  35. data/ext/ServiceManager.c +316 -0
  36. data/ext/ServiceManager.h +48 -0
  37. data/ext/Services.c +124 -0
  38. data/ext/Services.h +42 -0
  39. data/ext/Statement.c +785 -0
  40. data/ext/Statement.h +62 -0
  41. data/ext/Transaction.c +684 -0
  42. data/ext/Transaction.h +50 -0
  43. data/ext/TypeMap.c +1182 -0
  44. data/ext/TypeMap.h +51 -0
  45. data/ext/extconf.rb +28 -0
  46. data/ext/mkmf.bat +1 -0
  47. data/lib/SQLType.rb +224 -0
  48. data/lib/active_record/connection_adapters/rubyfb_adapter.rb +805 -0
  49. data/lib/mkdoc +1 -0
  50. data/lib/rubyfb.rb +2 -0
  51. data/lib/rubyfb_lib.so +0 -0
  52. data/lib/src.rb +1800 -0
  53. data/rubyfb.gemspec +31 -0
  54. data/test/AddRemoveUserTest.rb +56 -0
  55. data/test/BackupRestoreTest.rb +99 -0
  56. data/test/BlobTest.rb +57 -0
  57. data/test/CharacterSetTest.rb +63 -0
  58. data/test/ConnectionTest.rb +111 -0
  59. data/test/DDLTest.rb +54 -0
  60. data/test/DatabaseTest.rb +83 -0
  61. data/test/GeneratorTest.rb +50 -0
  62. data/test/KeyTest.rb +140 -0
  63. data/test/ResultSetTest.rb +162 -0
  64. data/test/RoleTest.rb +73 -0
  65. data/test/RowCountTest.rb +65 -0
  66. data/test/RowTest.rb +203 -0
  67. data/test/SQLTest.rb +182 -0
  68. data/test/SQLTypeTest.rb +101 -0
  69. data/test/ServiceManagerTest.rb +29 -0
  70. data/test/StatementTest.rb +135 -0
  71. data/test/TestSetup.rb +11 -0
  72. data/test/TransactionTest.rb +112 -0
  73. data/test/TypeTest.rb +92 -0
  74. data/test/UnitTest.rb +65 -0
  75. metadata +149 -0
data/ext/Backup.h ADDED
@@ -0,0 +1,37 @@
1
+ /*------------------------------------------------------------------------------
2
+ * Backup.h
3
+ *----------------------------------------------------------------------------*/
4
+ /**
5
+ * Copyright � Peter Wood, 2005
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 the
9
+ * License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.mozilla.org/MPL/
12
+ *
13
+ * Software distributed under the License is distributed on an "AS IS" basis,
14
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
15
+ * the specificlanguage governing rights and limitations under the License.
16
+ *
17
+ * The Original Code is the FireRuby extension for the Ruby language.
18
+ *
19
+ * The Initial Developer of the Original Code is Peter Wood. All Rights
20
+ * Reserved.
21
+ *
22
+ * @author Peter Wood
23
+ * @version 1.0
24
+ */
25
+ #ifndef FIRERUBY_BACKUP_H
26
+ #define FIRERUBY_BACKUP_H
27
+
28
+ /* Includes. */
29
+ #ifndef RUBY_H_INCLUDED
30
+ #include "ruby.h"
31
+ #define RUBY_H_INCLUDED
32
+ #endif
33
+
34
+ /* Function prototypes. */
35
+ void Init_Backup(VALUE);
36
+
37
+ #endif /* FIRERUBY_BACKUP_H */
data/ext/Blob.c ADDED
@@ -0,0 +1,421 @@
1
+ /*------------------------------------------------------------------------------
2
+ * Blob.c
3
+ *----------------------------------------------------------------------------*/
4
+ /**
5
+ * Copyright � Peter Wood, 2005
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 the
9
+ * License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.mozilla.org/MPL/
12
+ *
13
+ * Software distributed under the License is distributed on an "AS IS" basis,
14
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
15
+ * the specificlanguage governing rights and limitations under the License.
16
+ *
17
+ * The Original Code is the FireRuby extension for the Ruby language.
18
+ *
19
+ * The Initial Developer of the Original Code is Peter Wood. All Rights
20
+ * Reserved.
21
+ *
22
+ * @author Peter Wood
23
+ * @version 1.0
24
+ */
25
+
26
+ /* Includes. */
27
+ #include "Blob.h"
28
+ #include <limits.h>
29
+ #include "Common.h"
30
+
31
+ /* Function prototypes. */
32
+ static VALUE allocateBlob(VALUE);
33
+ static VALUE getBlobData(VALUE);
34
+ static VALUE closeBlob(VALUE);
35
+ static VALUE eachBlobSegment(VALUE);
36
+ char *loadBlobData(BlobHandle *);
37
+ char *loadBlobSegment(BlobHandle *, unsigned short *);
38
+
39
+ /* Globals. */
40
+ VALUE cBlob;
41
+
42
+
43
+ /**
44
+ * This function integrates with the Ruby language to allow for the allocation
45
+ * of new Blob objects.
46
+ *
47
+ * @param klass A reference to the Blob Class object.
48
+ *
49
+ */
50
+ static VALUE allocateBlob(VALUE klass)
51
+ {
52
+ VALUE instance;
53
+ BlobHandle *blob = ALLOC(BlobHandle);
54
+
55
+ if(blob != NULL)
56
+ {
57
+ memset(&blob->description, 0, sizeof(ISC_BLOB_DESC));
58
+ blob->segments = blob->size = 0;
59
+ blob->handle = 0;
60
+ instance = Data_Wrap_Struct(klass, NULL, blobFree, blob);
61
+ }
62
+ else
63
+ {
64
+ rb_raise(rb_eNoMemError, "Memory allocation failure allocating a blob.");
65
+ }
66
+
67
+ return(instance);
68
+ }
69
+
70
+
71
+ /**
72
+ * This function provides the initialize method for the Blob class.
73
+ *
74
+ * @param self A reference to the Blob object to be initialized.
75
+ *
76
+ * @return A reference to the newly initialized Blob object.
77
+ *
78
+ */
79
+ VALUE initializeBlob(VALUE self)
80
+ {
81
+ rb_iv_set(self, "@data", Qnil);
82
+ return(self);
83
+ }
84
+
85
+
86
+ /**
87
+ * This function fetches the data associated with a Blob object. This method
88
+ * provides the to_s method for the Blob class.
89
+ *
90
+ * @param self A reference to the Blob object to fetch the data for.
91
+ *
92
+ * @return A reference to a String containing the Blob object data.
93
+ *
94
+ */
95
+ static VALUE getBlobData(VALUE self)
96
+ {
97
+ VALUE data = rb_iv_get(self, "@data");
98
+
99
+ if(data == Qnil)
100
+ {
101
+ BlobHandle *blob = NULL;
102
+
103
+ Data_Get_Struct(self, BlobHandle, blob);
104
+ if(blob->size > 0)
105
+ {
106
+ char *buffer = loadBlobData(blob);
107
+
108
+ if(buffer != NULL)
109
+ {
110
+ data = rb_str_new(buffer, blob->size);
111
+ }
112
+ free(buffer);
113
+ }
114
+ rb_iv_set(self, "@data", data);
115
+ }
116
+
117
+ return(data);
118
+ }
119
+
120
+
121
+ /**
122
+ * This function provides the close method for the Blob class, allowing the
123
+ * resources for a blob to be explicitly released. It is not valid to use a
124
+ * Blob object after it is closed.
125
+ *
126
+ * @param self A reference to the Blob object to be closed.
127
+ *
128
+ * @return A reference to the closed Blob object.
129
+ *
130
+ */
131
+ static VALUE closeBlob(VALUE self)
132
+ {
133
+ VALUE data = rb_iv_get(self, "@data");
134
+ BlobHandle *blob = NULL;
135
+
136
+ if(data != Qnil)
137
+ {
138
+ rb_iv_set(self, "@data", Qnil);
139
+ }
140
+
141
+ Data_Get_Struct(self, BlobHandle, blob);
142
+ if(blob->handle != 0)
143
+ {
144
+ ISC_STATUS status[20];
145
+
146
+ if(isc_close_blob(status, &blob->handle) != 0)
147
+ {
148
+ rb_fireruby_raise(status, "Error closing blob.");
149
+ }
150
+ blob->handle = 0;
151
+ }
152
+
153
+ return(self);
154
+ }
155
+
156
+
157
+ /**
158
+ * This function provides the each method for the Blob class. This function
159
+ * feeds a segment of a blob to a block.
160
+ *
161
+ * @param self A reference to the Blob object to make the call for.
162
+ *
163
+ * @return A reference to the last return value from the block called.
164
+ *
165
+ */
166
+ static VALUE eachBlobSegment(VALUE self)
167
+ {
168
+ VALUE result = Qnil;
169
+
170
+ if(rb_block_given_p())
171
+ {
172
+ BlobHandle *blob = NULL;
173
+ char *segment = NULL;
174
+ unsigned short size = 0;
175
+
176
+ Data_Get_Struct(self, BlobHandle, blob);
177
+ segment = loadBlobSegment(blob, &size);
178
+ while(segment != NULL)
179
+ {
180
+ result = rb_yield(rb_str_new(segment, size));
181
+ free(segment);
182
+ segment = loadBlobSegment(blob, &size);
183
+ }
184
+ }
185
+
186
+ return(result);
187
+ }
188
+
189
+
190
+ /**
191
+ * This function allocates a BlobHandle structure and opens the structure for
192
+ * use.
193
+ *
194
+ * @param blobId The unique identifier for the blob to be opened.
195
+ * @param table The name of the table containing the blob being opened.
196
+ * @param column The name of the column in the table that contains the
197
+ * blob.
198
+ * @param connection A pointer to the connection to be used in accessing the
199
+ * blob.
200
+ * @param transaction A pointer to the transaction to be used in accessing
201
+ * the blob.
202
+ *
203
+ * @return A pointer to an allocated and opened BlobHandle structure.
204
+ *
205
+ */
206
+ BlobHandle *openBlob(ISC_QUAD blobId,
207
+ char *table,
208
+ char *column,
209
+ isc_db_handle *connection,
210
+ isc_tr_handle *transaction)
211
+ {
212
+ BlobHandle *blob = ALLOC(BlobHandle);
213
+
214
+ if(blob != NULL)
215
+ {
216
+ ISC_STATUS status[20];
217
+
218
+ /* Extract the blob details and open it. */
219
+ blob->handle = 0;
220
+ isc_blob_default_desc(&blob->description,
221
+ (unsigned char *)table,
222
+ (unsigned char *)column);
223
+ if(isc_open_blob2(status, connection, transaction, &blob->handle, &blobId,
224
+ 0, NULL) == 0)
225
+ {
226
+ char items[] = {isc_info_blob_num_segments,
227
+ isc_info_blob_total_length},
228
+ data[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
229
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
230
+
231
+ if(isc_blob_info(status, &blob->handle, 2, items, 20, data) == 0)
232
+ {
233
+ int offset = 0,
234
+ done = 0;
235
+
236
+ while(done < 2)
237
+ {
238
+ int length = isc_vax_integer(&data[offset + 1], 2);
239
+
240
+ if(data[offset] == isc_info_blob_num_segments)
241
+ {
242
+ blob->segments = isc_vax_integer(&data[offset + 3], length);
243
+ done++;
244
+ }
245
+ else if(data[offset] == isc_info_blob_total_length)
246
+ {
247
+ blob->size = isc_vax_integer(&data[offset + 3], length);
248
+ done++;
249
+ }
250
+ else
251
+ {
252
+ free(blob);
253
+ rb_fireruby_raise(NULL, "Error reading blob details.");
254
+ }
255
+ offset += length + 3;
256
+ }
257
+ }
258
+ else
259
+ {
260
+ free(blob);
261
+ rb_fireruby_raise(status, "Error fetching blob details.");
262
+ }
263
+ }
264
+ else
265
+ {
266
+ free(blob);
267
+ rb_fireruby_raise(status, "Error opening blob.");
268
+ }
269
+ }
270
+
271
+ return(blob);
272
+ }
273
+
274
+
275
+ /**
276
+ * This function fetches the data associated with a blob.
277
+ *
278
+ * @param blob A pointer to the BlobHandle structure that will be used in
279
+ * loading the data.
280
+ *
281
+ * @return A pointer to an array of character data containing the data of the
282
+ * blob.
283
+ *
284
+ */
285
+ char *loadBlobData(BlobHandle *blob)
286
+ {
287
+ char *data = NULL;
288
+
289
+ if(blob != NULL && blob->handle != 0)
290
+ {
291
+ if((data = ALLOC_N(char, blob->size)) != NULL)
292
+ {
293
+ ISC_STATUS status[20],
294
+ result = 0;
295
+ int offset = 0;
296
+
297
+ while(result == 0 || result == isc_segment)
298
+ {
299
+ unsigned short quantity = 0,
300
+ available = 0;
301
+ int remains = blob->size - offset;
302
+
303
+ available = remains > USHRT_MAX ? USHRT_MAX : remains;
304
+ result = isc_get_segment(status, &blob->handle, &quantity,
305
+ available, &data[offset]);
306
+ if(result != 0 && result != isc_segment && result != isc_segstr_eof)
307
+ {
308
+ free(data);
309
+ rb_fireruby_raise(status, "Error loading blob data.");
310
+ }
311
+ offset = offset + quantity;
312
+ }
313
+ }
314
+ else
315
+ {
316
+ rb_raise(rb_eNoMemError,
317
+ "Memory allocation failure loading blob data.");
318
+ }
319
+ }
320
+ else
321
+ {
322
+ rb_fireruby_raise(NULL, "Invalid blob specified for loading.");
323
+ }
324
+
325
+ return(data);
326
+ }
327
+
328
+
329
+ /**
330
+ * This function fetches the data for a single segment associated with a Blob.
331
+ *
332
+ * @param blob A pointer to the BlobHandle structure that will be used in
333
+ * fetching a blob segment.
334
+ * @param length A pointer to an short integer that will be set to the amount
335
+ * of data read in bytes.
336
+ *
337
+ * @return A pointer to a block of memory containing the next blob segement
338
+ * data. The return value will be NULL when there are no more blob
339
+ * segements to be read.
340
+ *
341
+ */
342
+ char *loadBlobSegment(BlobHandle *blob, unsigned short *length)
343
+ {
344
+ char *data = NULL;
345
+
346
+ *length = 0;
347
+ if(blob != NULL && blob->handle != 0)
348
+ {
349
+ unsigned short size = blob->description.blob_desc_segment_size;
350
+
351
+ if((data = ALLOC_N(char, size)) != NULL)
352
+ {
353
+ ISC_STATUS status[20],
354
+ result;
355
+
356
+ result = isc_get_segment(status, &blob->handle, length, size, data);
357
+ if(result != 0 && result != isc_segstr_eof)
358
+ {
359
+ free(data);
360
+ rb_fireruby_raise(status, "Error reading blob segment.");
361
+ }
362
+ }
363
+ else
364
+ {
365
+ rb_raise(rb_eNoMemError,
366
+ "Memory allocation failre loading blob segment.");
367
+ }
368
+ }
369
+ else
370
+ {
371
+ rb_fireruby_raise(NULL, "Invalid blob specified for loading.");
372
+ }
373
+
374
+ return(data);
375
+ }
376
+
377
+
378
+ /**
379
+ * This function integrates with the Ruby garbage collection system to insure
380
+ * that all resources associated with a Blob object are released whenever such
381
+ * an object is collected.
382
+ *
383
+ * @param blob A pointer to the BlobHandle structure associated with the Blob
384
+ * object being collected.
385
+ *
386
+ */
387
+ void blobFree(void *blob)
388
+ {
389
+ if(blob != NULL)
390
+ {
391
+ BlobHandle *handle = (BlobHandle *)blob;
392
+
393
+ if(handle->handle != 0)
394
+ {
395
+ ISC_STATUS status[20];
396
+
397
+ isc_close_blob(status, &handle->handle);
398
+ }
399
+ free(handle);
400
+ }
401
+ }
402
+
403
+
404
+ /**
405
+ * This function is used to create and initialize the Blob class within the
406
+ * Ruby environment.
407
+ *
408
+ * @param module A reference to the module that the Blob class will be created
409
+ * under.
410
+ *
411
+ */
412
+ void Init_Blob(VALUE module)
413
+ {
414
+ cBlob = rb_define_class_under(module, "Blob", rb_cObject);
415
+ rb_define_alloc_func(cBlob, allocateBlob);
416
+ rb_define_method(cBlob, "initialize", initializeBlob, 0);
417
+ rb_define_method(cBlob, "initialize_copy", forbidObjectCopy, 1);
418
+ rb_define_method(cBlob, "to_s", getBlobData, 0);
419
+ rb_define_method(cBlob, "close", closeBlob, 0);
420
+ rb_define_method(cBlob, "each", eachBlobSegment, 0);
421
+ }
data/ext/Blob.h ADDED
@@ -0,0 +1,65 @@
1
+ /*------------------------------------------------------------------------------
2
+ * Blob.h
3
+ *----------------------------------------------------------------------------*/
4
+ /**
5
+ * Copyright � Peter Wood, 2005
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 the
9
+ * License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.mozilla.org/MPL/
12
+ *
13
+ * Software distributed under the License is distributed on an "AS IS" basis,
14
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
15
+ * the specificlanguage governing rights and limitations under the License.
16
+ *
17
+ * The Original Code is the FireRuby extension for the Ruby language.
18
+ *
19
+ * The Initial Developer of the Original Code is Peter Wood. All Rights
20
+ * Reserved.
21
+ *
22
+ * @author Peter Wood
23
+ * @version 1.0
24
+ */
25
+ #ifndef FIRERUBY_BLOB_H
26
+ #define FIRERUBY_BLOB_H
27
+
28
+ /* Includes. */
29
+ #ifndef FIRERUBY_FIRE_RUBY_EXCEPTION_H
30
+ #include "FireRubyException.h"
31
+ #endif
32
+
33
+ #ifndef IBASE_H_INCLUDED
34
+ #include "ibase.h"
35
+ #define IBASE_H_INCLUDED
36
+ #endif
37
+
38
+ #ifndef RUBY_H_INCLUDED
39
+ #include "ruby.h"
40
+ #define RUBY_H_INCLUDED
41
+ #endif
42
+
43
+ /* Type definitions. */
44
+ typedef struct
45
+ {
46
+ ISC_BLOB_DESC description;
47
+ ISC_LONG segments,
48
+ size;
49
+ isc_blob_handle handle;
50
+ } BlobHandle;
51
+
52
+ /* Data elements. */
53
+ extern VALUE cBlob;
54
+
55
+ /* Function prototypes. */
56
+ BlobHandle *openBlob(ISC_QUAD,
57
+ char *,
58
+ char *,
59
+ isc_db_handle *,
60
+ isc_tr_handle *);
61
+ void Init_Blob(VALUE);
62
+ void blobFree(void *);
63
+ VALUE initializeBlob(VALUE);
64
+
65
+ #endif /* FIRERUBY_BLOB_H */
data/ext/Common.c ADDED
@@ -0,0 +1,54 @@
1
+ /*------------------------------------------------------------------------------
2
+ * Common.c
3
+ *----------------------------------------------------------------------------*/
4
+ /**
5
+ * Copyright � Peter Wood, 2005
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 the
9
+ * License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.mozilla.org/MPL/
12
+ *
13
+ * Software distributed under the License is distributed on an "AS IS" basis,
14
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
15
+ * the specificlanguage governing rights and limitations under the License.
16
+ *
17
+ * The Original Code is the FireRuby extension for the Ruby language.
18
+ *
19
+ * The Initial Developer of the Original Code is Peter Wood. All Rights
20
+ * Reserved.
21
+ *
22
+ * @author Peter Wood
23
+ * @version 1.0
24
+ */
25
+
26
+ /* Includes. */
27
+ #include "Common.h"
28
+ #include "FireRubyException.h"
29
+
30
+
31
+ /**
32
+ * This function is used to preclude the use of any of the Ruby copy methods
33
+ * (clone or dup) with an object.
34
+ *
35
+ * @param copy A reference to the object copy.
36
+ * @param original A reference to the original object that is being copied.
37
+ *
38
+ * @return Never returns as an exception is always generated.
39
+ *
40
+ */
41
+ VALUE forbidObjectCopy(VALUE copy, VALUE original)
42
+ {
43
+ VALUE message = rb_str_new2("Copying of CLASS_NAME objects is forbidden."),
44
+ value = rb_funcall(original, rb_intern("class"), 0),
45
+ array[2];
46
+
47
+ array[0] = rb_str_new2("CLASS_NAME");
48
+ array[1] = rb_funcall(value, rb_intern("name"), 0);
49
+ message = rb_funcall(message, rb_intern("gsub"), 2, array);
50
+
51
+ rb_fireruby_raise(NULL, STR2CSTR(message));
52
+
53
+ return(Qnil);
54
+ }
data/ext/Common.h ADDED
@@ -0,0 +1,37 @@
1
+ /*------------------------------------------------------------------------------
2
+ * Common.h
3
+ *----------------------------------------------------------------------------*/
4
+ /**
5
+ * Copyright � Peter Wood, 2005
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 the
9
+ * License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.mozilla.org/MPL/
12
+ *
13
+ * Software distributed under the License is distributed on an "AS IS" basis,
14
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
15
+ * the specificlanguage governing rights and limitations under the License.
16
+ *
17
+ * The Original Code is the FireRuby extension for the Ruby language.
18
+ *
19
+ * The Initial Developer of the Original Code is Peter Wood. All Rights
20
+ * Reserved.
21
+ *
22
+ * @author Peter Wood
23
+ * @version 1.0
24
+ */
25
+ #ifndef FIRERUBY_COMMON_H
26
+ #define FIRERUBY_COMMON_H
27
+
28
+ /* Includes. */
29
+ #ifndef RUBY_H_INCLUDED
30
+ #include "ruby.h"
31
+ #define RUBY_H_INCLUDED
32
+ #endif
33
+
34
+ /* Function prototypes. */
35
+ VALUE forbidObjectCopy(VALUE, VALUE);
36
+
37
+ #endif /* FIRERUBY_COMMON_H */