binyo 0.0.1
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.
- data/LICENSE +20 -0
- data/ext/binyo/binyo-error-internal.h +38 -0
- data/ext/binyo/binyo-error.h +41 -0
- data/ext/binyo/binyo-io-buffer.h +54 -0
- data/ext/binyo/binyo-io.h +131 -0
- data/ext/binyo/binyo-mem.h +44 -0
- data/ext/binyo/binyo-missing.h +36 -0
- data/ext/binyo/binyo.c +96 -0
- data/ext/binyo/binyo.h +75 -0
- data/ext/binyo/byte.c +116 -0
- data/ext/binyo/byte.h +39 -0
- data/ext/binyo/bytelist.c +223 -0
- data/ext/binyo/bytelist.h +45 -0
- data/ext/binyo/error.c +202 -0
- data/ext/binyo/extconf.h +5 -0
- data/ext/binyo/extconf.rb +73 -0
- data/ext/binyo/io.c +324 -0
- data/ext/binyo/io_buffer.c +143 -0
- data/ext/binyo/io_in_bytes.c +196 -0
- data/ext/binyo/io_in_cache.c +144 -0
- data/ext/binyo/io_in_fd.c +166 -0
- data/ext/binyo/io_in_generic.c +182 -0
- data/ext/binyo/io_in_seq.c +187 -0
- data/ext/binyo/io_out_bytes.c +120 -0
- data/ext/binyo/io_out_fd.c +110 -0
- data/ext/binyo/io_out_generic.c +125 -0
- data/lib/binyo.rb +32 -0
- data/lib/binyo.so +0 -0
- data/test/hex.rb +135 -0
- data/test/scratch.rb +33 -0
- metadata +77 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012-2013 Martin Boßlet
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#ifndef _BINYO_ERROR_INTERNAL_H_
|
29
|
+
#define _BINYO_ERROR_INTERNAL_H_
|
30
|
+
|
31
|
+
void binyo_add_io_error(void);
|
32
|
+
void binyo_error_add(const char *format, ...);
|
33
|
+
|
34
|
+
VALUE binyo_error_create(VALUE exception_class, const char *format, ...);
|
35
|
+
void binyo_error_raise(VALUE exception_class, const char *format, ...);
|
36
|
+
|
37
|
+
#endif /* BINYO_ERROR_INTERNAL_H */
|
38
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#ifndef _BINYO_ERROR_H_
|
29
|
+
#define _BINYO_ERROR_H_
|
30
|
+
|
31
|
+
#define BINYO_OK 1
|
32
|
+
#define BINYO_ERR -1
|
33
|
+
|
34
|
+
#define BINYO_IO_EOF -2
|
35
|
+
|
36
|
+
int binyo_has_errors(void);
|
37
|
+
int binyo_error_message(char *buf, int buf_len);
|
38
|
+
void binyo_error_clear(void);
|
39
|
+
|
40
|
+
#endif /* BINYO_ERROR_H */
|
41
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#if !defined(_BINYO_IO_BUFFER_H_)
|
29
|
+
#define _BINYO_IO_BUFFER_H_
|
30
|
+
|
31
|
+
#include <ruby.h>
|
32
|
+
|
33
|
+
#define BINYO_BYTE_BUFFER_GROWTH_FACTOR 2
|
34
|
+
|
35
|
+
typedef struct binyo_byte_buffer_st {
|
36
|
+
size_t size;
|
37
|
+
size_t limit;
|
38
|
+
size_t init_size;
|
39
|
+
int prealloc; /* whether the buffer was already preallocated */
|
40
|
+
uint8_t *data;
|
41
|
+
} binyo_byte_buffer;
|
42
|
+
|
43
|
+
#define binyo_buffer_get_data(b) (b)->data
|
44
|
+
#define binyo_buffer_get_size(b) (b)->size
|
45
|
+
binyo_byte_buffer *binyo_buffer_new(void);
|
46
|
+
binyo_byte_buffer *binyo_buffer_new_size(size_t size);
|
47
|
+
binyo_byte_buffer *binyo_buffer_new_prealloc(uint8_t *b, size_t len);
|
48
|
+
ssize_t binyo_buffer_write(binyo_byte_buffer *buffer, uint8_t *b, size_t len);
|
49
|
+
void binyo_buffer_free_secure(binyo_byte_buffer *buffer);
|
50
|
+
void binyo_buffer_free(binyo_byte_buffer *buffer);
|
51
|
+
|
52
|
+
size_t binyo_buffer_get_bytes_free(binyo_byte_buffer *buffer, uint8_t **out);
|
53
|
+
|
54
|
+
#endif /* _BINYO_IO_BUFFER_H_ */
|
@@ -0,0 +1,131 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#if !defined(_BINYO_IO_H_)
|
29
|
+
#define _BINYO_IO_H_
|
30
|
+
|
31
|
+
#include "binyo-io-buffer.h"
|
32
|
+
|
33
|
+
extern ID sBinyo_ID_READ, sBinyo_ID_SEEK, sBinyo_ID_WRITE, sBinyo_ID_CLOSE;
|
34
|
+
|
35
|
+
extern VALUE sBinyo_ID_SEEK_CUR, sBinyo_ID_SEEK_SET, sBinyo_ID_SEEK_END;
|
36
|
+
|
37
|
+
#define BINYO_IO_BUF_SIZE 8192
|
38
|
+
|
39
|
+
#define BINYO_INSTREAM_TYPE_FD 0
|
40
|
+
#define BINYO_INSTREAM_TYPE_BYTES 1
|
41
|
+
#define BINYO_INSTREAM_TYPE_IO_GENERIC 2
|
42
|
+
#define BINYO_INSTREAM_TYPE_SEQ 3
|
43
|
+
#define BINYO_INSTREAM_TYPE_CACHE 4
|
44
|
+
|
45
|
+
#define BINYO_OUTSTREAM_TYPE_FD 10
|
46
|
+
#define BINYO_OUTSTREAM_TYPE_BYTES 11
|
47
|
+
#define BINYO_OUTSTREAM_TYPE_IO_GENERIC 12
|
48
|
+
|
49
|
+
typedef struct binyo_instream_interface_st binyo_instream_interface;
|
50
|
+
typedef struct binyo_outstream_interface_st binyo_outstream_interface;
|
51
|
+
|
52
|
+
typedef struct binyo_instream_st {
|
53
|
+
binyo_instream_interface *methods;
|
54
|
+
} binyo_instream;
|
55
|
+
|
56
|
+
typedef struct binyo_out_stream_st {
|
57
|
+
binyo_outstream_interface *methods;
|
58
|
+
} binyo_outstream;
|
59
|
+
|
60
|
+
struct binyo_instream_interface_st {
|
61
|
+
int type;
|
62
|
+
|
63
|
+
ssize_t (*read)(binyo_instream*, uint8_t*, size_t);
|
64
|
+
int (*rb_read)(binyo_instream*, VALUE, VALUE, VALUE*);
|
65
|
+
ssize_t (*gets)(binyo_instream*, char *, size_t);
|
66
|
+
int (*seek)(binyo_instream*, off_t, int);
|
67
|
+
void (*mark)(binyo_instream*);
|
68
|
+
void (*free)(binyo_instream*);
|
69
|
+
};
|
70
|
+
|
71
|
+
struct binyo_outstream_interface_st {
|
72
|
+
int type;
|
73
|
+
|
74
|
+
ssize_t (*write)(binyo_outstream*, uint8_t *buf, size_t);
|
75
|
+
int (*rb_write)(binyo_outstream*, VALUE, VALUE*);
|
76
|
+
void (*mark)(binyo_outstream*);
|
77
|
+
void (*free)(binyo_outstream*);
|
78
|
+
};
|
79
|
+
|
80
|
+
#define binyo_safe_cast_stream(out, in, t, ptype, stype) \
|
81
|
+
do { \
|
82
|
+
if (!(in)) \
|
83
|
+
rb_raise(rb_eRuntimeError, "Uninitialized stream."); \
|
84
|
+
if (((stype *) (in))->methods->type == (t)) { \
|
85
|
+
out = (ptype *) in; \
|
86
|
+
} \
|
87
|
+
else { \
|
88
|
+
int errt = ((stype *) (in))->methods->type; \
|
89
|
+
rb_raise(rb_eArgError, "Unknown type: %d", errt); \
|
90
|
+
} \
|
91
|
+
} while (0) \
|
92
|
+
|
93
|
+
#define binyo_safe_cast_outstream(out, in, type, ptrtype) binyo_safe_cast_stream((out), (in), (type), ptrtype, binyo_outstream)
|
94
|
+
#define binyo_safe_cast_instream(out, in, type, ptrtype) binyo_safe_cast_stream((out), (in), (type), ptrtype, binyo_instream)
|
95
|
+
|
96
|
+
ssize_t binyo_instream_read(binyo_instream *in, uint8_t *buf, size_t len);
|
97
|
+
int binyo_instream_rb_read(binyo_instream *in, VALUE vlen, VALUE vbuf, VALUE *out);
|
98
|
+
ssize_t binyo_instream_gets(binyo_instream *in, char *line, size_t len);
|
99
|
+
int binyo_instream_seek(binyo_instream *in, off_t offset, int whence);
|
100
|
+
#define binyo_instream_skip(in, n) binyo_instream_seek((in), (n), SEEK_CUR)
|
101
|
+
void binyo_instream_mark(binyo_instream *in);
|
102
|
+
void binyo_instream_free(binyo_instream *in);
|
103
|
+
|
104
|
+
binyo_instream *binyo_instream_new_fd(int fd);
|
105
|
+
binyo_instream *binyo_instream_new_fd_io(VALUE io);
|
106
|
+
binyo_instream *binyo_instream_new_bytes(uint8_t *bytes, size_t len);
|
107
|
+
binyo_instream *binyo_instream_new_io_generic(VALUE io);
|
108
|
+
binyo_instream *binyo_instream_new_value(VALUE value);
|
109
|
+
binyo_instream *binyo_instream_new_seq(binyo_instream *in1, binyo_instream *in2);
|
110
|
+
binyo_instream *binyo_instream_new_seq_n(int num, binyo_instream *in1, binyo_instream *in2, ...);
|
111
|
+
binyo_instream *binyo_instream_new_cache(binyo_instream *original);
|
112
|
+
void binyo_instream_cache_free_wrapper(binyo_instream *instream);
|
113
|
+
size_t binyo_instream_cache_get_bytes(binyo_instream *in, uint8_t **out);
|
114
|
+
|
115
|
+
ssize_t binyo_outstream_write(binyo_outstream *out, uint8_t *buf, size_t len);
|
116
|
+
int binyo_outstream_rb_write(binyo_outstream *out, VALUE vbuf, VALUE *ret);
|
117
|
+
void binyo_outstream_mark(binyo_outstream *in);
|
118
|
+
void binyo_outstream_free(binyo_outstream *out);
|
119
|
+
|
120
|
+
size_t binyo_outstream_bytes_get_bytes_free(binyo_outstream *outstream, uint8_t **bytes);
|
121
|
+
|
122
|
+
binyo_outstream *binyo_outstream_new_fd(int fd);
|
123
|
+
binyo_outstream *binyo_outstream_new_fd_io(VALUE io);
|
124
|
+
binyo_outstream *binyo_outstream_new_bytes(void);
|
125
|
+
binyo_outstream *binyo_outstream_new_bytes_size(size_t size);
|
126
|
+
binyo_outstream *binyo_outstream_new_bytes_prealloc(uint8_t *b, size_t len);
|
127
|
+
binyo_outstream *binyo_outstream_new_io_generic(VALUE io);
|
128
|
+
binyo_outstream *binyo_outstream_new_value(VALUE value);
|
129
|
+
|
130
|
+
#endif /* _BINYO_IO_H_ */
|
131
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#ifndef _BINYO_MEM_H_
|
29
|
+
#define _BINYO_MEM_H_
|
30
|
+
|
31
|
+
/* memory utilities */
|
32
|
+
#define BINYO_ALLOC(type) ((type *)binyo_alloc(sizeof(type)))
|
33
|
+
#define BINYO_ALLOC_N(type, n) ((type *)binyo_alloc_n((n), sizeof(type)))
|
34
|
+
#define BINYO_ALLOCA_N(type, n) ((type *)alloca(sizeof(type) * (n)))
|
35
|
+
#define BINYO_REALLOC_N(ptr, type, n) ((ptr)=(type *)binyo_realloc_n((void *)(ptr), (n), sizeof(type)))
|
36
|
+
#define BINYO_FREE binyo_free
|
37
|
+
|
38
|
+
void *binyo_alloc(size_t size);
|
39
|
+
void *binyo_alloc_n(size_t n, size_t size);
|
40
|
+
void *binyo_realloc_n(void *ptr, size_t n, size_t size);
|
41
|
+
void binyo_free(void *ptr);
|
42
|
+
|
43
|
+
#endif /* _BINYO_MEM_H_ */
|
44
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#ifndef _BINYO_MISSING_H_
|
29
|
+
#define _BINYO_MISSING_H_
|
30
|
+
|
31
|
+
#ifndef HAVE_RB_IO_CHECK_BYTE_READABLE
|
32
|
+
#define rb_io_check_byte_readable(fptr) rb_io_check_readable(fptr)
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#endif /* BINYO_MISSING_H */
|
36
|
+
|
data/ext/binyo/binyo.c
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
/*
|
2
|
+
* binyo - Fast binary IO for Ruby
|
3
|
+
*
|
4
|
+
* Copyright (c) 2012-2013
|
5
|
+
* Martin Bosslet <martin.bosslet@gmail.com>
|
6
|
+
* All rights reserved.
|
7
|
+
*
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
* a copy of this software and associated documentation files (the
|
10
|
+
* "Software"), to deal in the Software without restriction, including
|
11
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
* the following conditions:
|
15
|
+
*
|
16
|
+
* The above copyright notice and this permission notice shall be
|
17
|
+
* included in all copies or substantial portions of the Software.
|
18
|
+
*
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include "binyo.h"
|
29
|
+
|
30
|
+
VALUE mBinyo;
|
31
|
+
|
32
|
+
VALUE eBinyoError;
|
33
|
+
|
34
|
+
|
35
|
+
void *
|
36
|
+
binyo_alloc(size_t size)
|
37
|
+
{
|
38
|
+
void *mem;
|
39
|
+
|
40
|
+
if (!(mem = malloc(size)))
|
41
|
+
rb_memerror();
|
42
|
+
return mem;
|
43
|
+
}
|
44
|
+
|
45
|
+
void *
|
46
|
+
binyo_alloc_n(size_t n, size_t size)
|
47
|
+
{
|
48
|
+
void *mem;
|
49
|
+
size_t target_size;
|
50
|
+
|
51
|
+
if (n > 0 && n > SIZE_MAX / size)
|
52
|
+
rb_raise(rb_eArgError, "Malloc size too large");
|
53
|
+
target_size = n * size;
|
54
|
+
if (!(mem = malloc(target_size)))
|
55
|
+
rb_memerror();
|
56
|
+
return mem;
|
57
|
+
}
|
58
|
+
|
59
|
+
void *
|
60
|
+
binyo_realloc_n(void *ptr, size_t n, size_t size)
|
61
|
+
{
|
62
|
+
void *mem;
|
63
|
+
size_t target_size;
|
64
|
+
|
65
|
+
if (!ptr)
|
66
|
+
rb_raise(rb_eArgError, "Realloc pointer is NULL");
|
67
|
+
if (n > 0 && n > SIZE_MAX / size)
|
68
|
+
rb_raise(rb_eArgError, "Realloc size too large");
|
69
|
+
target_size = n * size;
|
70
|
+
mem = realloc(ptr, target_size);
|
71
|
+
if (!mem) {
|
72
|
+
free(ptr);
|
73
|
+
rb_memerror();
|
74
|
+
}
|
75
|
+
return mem;
|
76
|
+
}
|
77
|
+
|
78
|
+
void
|
79
|
+
binyo_free(void *ptr)
|
80
|
+
{
|
81
|
+
if (ptr)
|
82
|
+
free(ptr);
|
83
|
+
}
|
84
|
+
|
85
|
+
void
|
86
|
+
Init_binyo(void)
|
87
|
+
{
|
88
|
+
mBinyo = rb_define_module("Binyo");
|
89
|
+
|
90
|
+
eBinyoError = rb_define_class_under(mBinyo, "BinyoError", rb_eStandardError);
|
91
|
+
|
92
|
+
Init_binyo_io();
|
93
|
+
Init_binyo_bytelist();
|
94
|
+
Init_binyo_byte();
|
95
|
+
}
|
96
|
+
|