extlzma 0.4-x86-mingw32
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.
- checksums.yaml +7 -0
- data/HISTORY.ja.md +29 -0
- data/LICENSE +26 -0
- data/README.md +44 -0
- data/Rakefile +212 -0
- data/examples/01-easy_using.rb +58 -0
- data/examples/02-streaming.rb +71 -0
- data/ext/consts.c +68 -0
- data/ext/error.c +77 -0
- data/ext/extconf.rb +27 -0
- data/ext/extlzma.c +97 -0
- data/ext/extlzma.h +177 -0
- data/ext/filter.c +517 -0
- data/ext/index.c +81 -0
- data/ext/stream.c +432 -0
- data/ext/utils.c +105 -0
- data/gemstub.rb +17 -0
- data/lib/2.0/extlzma.so +0 -0
- data/lib/2.1/extlzma.so +0 -0
- data/lib/2.2/extlzma.so +0 -0
- data/lib/2.3/extlzma.so +0 -0
- data/lib/extlzma.rb +529 -0
- data/lib/extlzma/version.rb +3 -0
- data/test/sampledata.rb +15 -0
- data/test/test_extlzma.rb +58 -0
- metadata +101 -0
data/ext/consts.c
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
#include "extlzma.h"
|
3
|
+
|
4
|
+
// SECTION: LZMA::Constants
|
5
|
+
|
6
|
+
static VALUE mConstants;
|
7
|
+
|
8
|
+
void
|
9
|
+
extlzma_init_Constants(void)
|
10
|
+
{
|
11
|
+
mConstants = rb_define_module_under(extlzma_mLZMA, "Constants");
|
12
|
+
rb_include_module(extlzma_mLZMA, mConstants);
|
13
|
+
|
14
|
+
// TODO: マクロを展開した状態で記述する。
|
15
|
+
// TODO: 目的は rdoc や yard で文書化できるようにするため。
|
16
|
+
|
17
|
+
#define DEFINE_CONSTANT(NAME, VALUE) \
|
18
|
+
{ \
|
19
|
+
rb_define_const(mConstants, #NAME, VALUE); \
|
20
|
+
rb_define_const(mConstants, "LZMA_" #NAME, VALUE); \
|
21
|
+
} \
|
22
|
+
|
23
|
+
DEFINE_CONSTANT(NICE_DEFAULT, SIZET2NUM(64));
|
24
|
+
DEFINE_CONSTANT(DEPTH_DEFAULT, SIZET2NUM(0));
|
25
|
+
|
26
|
+
DEFINE_CONSTANT(PRESET_DEFAULT, UINT2NUM(LZMA_PRESET_DEFAULT));
|
27
|
+
DEFINE_CONSTANT(PRESET_LEVEL_MASK, UINT2NUM(LZMA_PRESET_LEVEL_MASK));
|
28
|
+
DEFINE_CONSTANT(PRESET_EXTREME, UINT2NUM(LZMA_PRESET_EXTREME));
|
29
|
+
DEFINE_CONSTANT(DICT_SIZE_MIN, UINT2NUM(LZMA_DICT_SIZE_MIN));
|
30
|
+
DEFINE_CONSTANT(DICT_SIZE_DEFAULT, UINT2NUM(LZMA_DICT_SIZE_DEFAULT));
|
31
|
+
DEFINE_CONSTANT(LCLP_MIN, UINT2NUM(LZMA_LCLP_MIN));
|
32
|
+
DEFINE_CONSTANT(LCLP_MAX, UINT2NUM(LZMA_LCLP_MAX));
|
33
|
+
DEFINE_CONSTANT(LC_DEFAULT, UINT2NUM(LZMA_LC_DEFAULT));
|
34
|
+
DEFINE_CONSTANT(LP_DEFAULT, UINT2NUM(LZMA_LP_DEFAULT));
|
35
|
+
DEFINE_CONSTANT(PB_MIN, UINT2NUM(LZMA_PB_MIN));
|
36
|
+
DEFINE_CONSTANT(PB_MAX, UINT2NUM(LZMA_PB_MAX));
|
37
|
+
DEFINE_CONSTANT(PB_DEFAULT, UINT2NUM(LZMA_PB_DEFAULT));
|
38
|
+
DEFINE_CONSTANT(MODE_FAST, UINT2NUM(LZMA_MODE_FAST));
|
39
|
+
DEFINE_CONSTANT(MODE_NORMAL, UINT2NUM(LZMA_MODE_NORMAL));
|
40
|
+
DEFINE_CONSTANT(MF_HC3, UINT2NUM(LZMA_MF_HC3));
|
41
|
+
DEFINE_CONSTANT(MF_HC4, UINT2NUM(LZMA_MF_HC4));
|
42
|
+
DEFINE_CONSTANT(MF_BT2, UINT2NUM(LZMA_MF_BT2));
|
43
|
+
DEFINE_CONSTANT(MF_BT3, UINT2NUM(LZMA_MF_BT3));
|
44
|
+
DEFINE_CONSTANT(MF_BT4, UINT2NUM(LZMA_MF_BT4));
|
45
|
+
|
46
|
+
DEFINE_CONSTANT(CHECK_NONE, UINT2NUM(LZMA_CHECK_NONE));
|
47
|
+
DEFINE_CONSTANT(CHECK_CRC32, UINT2NUM(LZMA_CHECK_CRC32));
|
48
|
+
DEFINE_CONSTANT(CHECK_CRC64, UINT2NUM(LZMA_CHECK_CRC64));
|
49
|
+
DEFINE_CONSTANT(CHECK_SHA256, UINT2NUM(LZMA_CHECK_SHA256));
|
50
|
+
|
51
|
+
DEFINE_CONSTANT(RUN, UINT2NUM(LZMA_RUN));
|
52
|
+
DEFINE_CONSTANT(FULL_FLUSH, UINT2NUM(LZMA_FULL_FLUSH));
|
53
|
+
DEFINE_CONSTANT(SYNC_FLUSH, UINT2NUM(LZMA_SYNC_FLUSH));
|
54
|
+
DEFINE_CONSTANT(FINISH, UINT2NUM(LZMA_FINISH));
|
55
|
+
|
56
|
+
DEFINE_CONSTANT(OK, UINT2NUM(LZMA_OK));
|
57
|
+
DEFINE_CONSTANT(STREAM_END, UINT2NUM(LZMA_STREAM_END));
|
58
|
+
DEFINE_CONSTANT(NO_CHECK, UINT2NUM(LZMA_NO_CHECK));
|
59
|
+
DEFINE_CONSTANT(UNSUPPORTED_CHECK, UINT2NUM(LZMA_UNSUPPORTED_CHECK));
|
60
|
+
DEFINE_CONSTANT(GET_CHECK, UINT2NUM(LZMA_GET_CHECK));
|
61
|
+
DEFINE_CONSTANT(MEM_ERROR, UINT2NUM(LZMA_MEM_ERROR));
|
62
|
+
DEFINE_CONSTANT(MEMLIMIT_ERROR, UINT2NUM(LZMA_MEMLIMIT_ERROR));
|
63
|
+
DEFINE_CONSTANT(FORMAT_ERROR, UINT2NUM(LZMA_FORMAT_ERROR));
|
64
|
+
DEFINE_CONSTANT(OPTIONS_ERROR, UINT2NUM(LZMA_OPTIONS_ERROR));
|
65
|
+
DEFINE_CONSTANT(DATA_ERROR, UINT2NUM(LZMA_DATA_ERROR));
|
66
|
+
DEFINE_CONSTANT(BUF_ERROR, UINT2NUM(LZMA_BUF_ERROR));
|
67
|
+
DEFINE_CONSTANT(PROG_ERROR, UINT2NUM(LZMA_PROG_ERROR));
|
68
|
+
}
|
data/ext/error.c
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
#include "extlzma.h"
|
3
|
+
|
4
|
+
// TODO: 例外を整理して数を減らす。
|
5
|
+
|
6
|
+
VALUE extlzma_mExceptions;
|
7
|
+
VALUE extlzma_eBasicException;
|
8
|
+
VALUE extlzma_eStreamEnd;
|
9
|
+
VALUE extlzma_eNoCheck;
|
10
|
+
VALUE extlzma_eUnsupportedCheck;
|
11
|
+
VALUE extlzma_eGetCheck;
|
12
|
+
VALUE extlzma_eMemError;
|
13
|
+
VALUE extlzma_eMemlimitError;
|
14
|
+
VALUE extlzma_eFormatError;
|
15
|
+
VALUE extlzma_eOptionsError;
|
16
|
+
VALUE extlzma_eDataError;
|
17
|
+
VALUE extlzma_eBufError;
|
18
|
+
VALUE extlzma_eProgError;
|
19
|
+
VALUE extlzma_eFilterTooLong;
|
20
|
+
VALUE extlzma_eBadPreset;
|
21
|
+
|
22
|
+
static inline VALUE
|
23
|
+
lookup_exception(lzma_ret status)
|
24
|
+
{
|
25
|
+
switch (status) {
|
26
|
+
case LZMA_OK: return Qnil;
|
27
|
+
case LZMA_STREAM_END: return extlzma_eStreamEnd;
|
28
|
+
case LZMA_NO_CHECK: return extlzma_eNoCheck;
|
29
|
+
case LZMA_UNSUPPORTED_CHECK: return extlzma_eUnsupportedCheck;
|
30
|
+
case LZMA_GET_CHECK: return extlzma_eGetCheck;
|
31
|
+
case LZMA_MEM_ERROR: return extlzma_eMemError;
|
32
|
+
case LZMA_MEMLIMIT_ERROR: return extlzma_eMemlimitError;
|
33
|
+
case LZMA_FORMAT_ERROR: return extlzma_eFormatError;
|
34
|
+
case LZMA_OPTIONS_ERROR: return extlzma_eOptionsError;
|
35
|
+
case LZMA_DATA_ERROR: return extlzma_eDataError;
|
36
|
+
case LZMA_BUF_ERROR: return extlzma_eBufError;
|
37
|
+
case LZMA_PROG_ERROR: return extlzma_eProgError;
|
38
|
+
default: return rb_eRuntimeError;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
VALUE
|
43
|
+
extlzma_lookup_error(lzma_ret status)
|
44
|
+
{
|
45
|
+
return lookup_exception(status);
|
46
|
+
}
|
47
|
+
|
48
|
+
void
|
49
|
+
extlzma_init_Exceptions(void)
|
50
|
+
{
|
51
|
+
extlzma_mExceptions = rb_define_module_under(extlzma_mLZMA, "Exceptions");
|
52
|
+
rb_include_module(extlzma_mLZMA, extlzma_mExceptions);
|
53
|
+
|
54
|
+
extlzma_eBasicException = rb_define_class_under(extlzma_mExceptions, "BasicException", rb_eStandardError);
|
55
|
+
rb_define_class_under(extlzma_mExceptions, "FilterTooLong", extlzma_eBasicException);
|
56
|
+
rb_define_class_under(extlzma_mExceptions, "BadPreset", extlzma_eBasicException);
|
57
|
+
|
58
|
+
#define DEFINE_EXCEPTION(CLASS, STATUS) \
|
59
|
+
{ \
|
60
|
+
extlzma_e ## CLASS = \
|
61
|
+
rb_define_class_under(extlzma_mExceptions, \
|
62
|
+
#CLASS, extlzma_eBasicException); \
|
63
|
+
rb_define_const(extlzma_e ## CLASS, "STATUS", SIZET2NUM(STATUS)); \
|
64
|
+
} \
|
65
|
+
|
66
|
+
DEFINE_EXCEPTION(StreamEnd, LZMA_STREAM_END);
|
67
|
+
DEFINE_EXCEPTION(NoCheck, LZMA_NO_CHECK);
|
68
|
+
DEFINE_EXCEPTION(UnsupportedCheck, LZMA_UNSUPPORTED_CHECK);
|
69
|
+
DEFINE_EXCEPTION(GetCheck, LZMA_GET_CHECK);
|
70
|
+
DEFINE_EXCEPTION(MemError, LZMA_MEM_ERROR);
|
71
|
+
DEFINE_EXCEPTION(MemlimitError, LZMA_MEMLIMIT_ERROR);
|
72
|
+
DEFINE_EXCEPTION(FormatError, LZMA_FORMAT_ERROR);
|
73
|
+
DEFINE_EXCEPTION(OptionsError, LZMA_OPTIONS_ERROR);
|
74
|
+
DEFINE_EXCEPTION(DataError, LZMA_DATA_ERROR);
|
75
|
+
DEFINE_EXCEPTION(BufError, LZMA_BUF_ERROR);
|
76
|
+
DEFINE_EXCEPTION(ProgError, LZMA_PROG_ERROR);
|
77
|
+
}
|
data/ext/extconf.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!ruby
|
2
|
+
|
3
|
+
require "mkmf"
|
4
|
+
|
5
|
+
needlist = []
|
6
|
+
|
7
|
+
have_header "lzma.h" or needlist << "lzma.h"
|
8
|
+
have_library "lzma" or needlist << "liblzma.a"
|
9
|
+
|
10
|
+
unless needlist.empty?
|
11
|
+
abort "#$0: dependency files are not found (#{needlist.join(" ")})."
|
12
|
+
end
|
13
|
+
|
14
|
+
staticlink = arg_config("--liblzma-static-link", false)
|
15
|
+
|
16
|
+
if staticlink
|
17
|
+
# 静的ライブラリリンクを優先する
|
18
|
+
$libs = ["-Wl,-dn,-llzma", "-Wl,-llzma", $libs].join(" ")
|
19
|
+
end
|
20
|
+
|
21
|
+
if RbConfig::CONFIG["arch"] =~ /mingw/
|
22
|
+
$LDFLAGS << " -static-libgcc " if try_link "void main(void){}", " -static-libgcc "
|
23
|
+
end
|
24
|
+
|
25
|
+
$LDFLAGS << " -Wl,-Bsymbolic " if try_link "void main(void){}", " -Wl,-Bsymbolic "
|
26
|
+
|
27
|
+
create_makefile "extlzma"
|
data/ext/extlzma.c
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
/*
|
2
|
+
* liblzma.c -
|
3
|
+
* - Author: dearblue <dearblue@users.osdn.me>
|
4
|
+
* - Copyright: Copyright (c) 2010 dearblue
|
5
|
+
* - License: Distributed under the 2-clause BSD License
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include "extlzma.h"
|
9
|
+
|
10
|
+
VALUE extlzma_mLZMA;
|
11
|
+
|
12
|
+
ID extlzma_id_dictsize;
|
13
|
+
ID extlzma_id_predict;
|
14
|
+
ID extlzma_id_lc;
|
15
|
+
ID extlzma_id_lp;
|
16
|
+
ID extlzma_id_pb;
|
17
|
+
ID extlzma_id_mode;
|
18
|
+
ID extlzma_id_nice;
|
19
|
+
ID extlzma_id_mf;
|
20
|
+
ID extlzma_id_depth;
|
21
|
+
ID extlzma_id_check;
|
22
|
+
ID extlzma_id_none;
|
23
|
+
ID extlzma_id_crc32;
|
24
|
+
ID extlzma_id_crc64;
|
25
|
+
ID extlzma_id_sha256;
|
26
|
+
|
27
|
+
static VALUE
|
28
|
+
libver_major(VALUE obj)
|
29
|
+
{
|
30
|
+
return INT2FIX(LZMA_VERSION_MAJOR);
|
31
|
+
}
|
32
|
+
|
33
|
+
static VALUE
|
34
|
+
libver_minor(VALUE obj)
|
35
|
+
{
|
36
|
+
return INT2FIX(LZMA_VERSION_MINOR);
|
37
|
+
}
|
38
|
+
|
39
|
+
static VALUE
|
40
|
+
libver_patch(VALUE obj)
|
41
|
+
{
|
42
|
+
return INT2FIX(LZMA_VERSION_PATCH);
|
43
|
+
}
|
44
|
+
|
45
|
+
static VALUE
|
46
|
+
libver_to_s(VALUE obj)
|
47
|
+
{
|
48
|
+
return rb_str_new_cstr(LZMA_VERSION_STRING);
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
static void
|
53
|
+
extlzma_init_LIBVER(void)
|
54
|
+
{
|
55
|
+
VALUE vers[] = {
|
56
|
+
INT2FIX(LZMA_VERSION_MAJOR),
|
57
|
+
INT2FIX(LZMA_VERSION_MINOR),
|
58
|
+
INT2FIX(LZMA_VERSION_PATCH)
|
59
|
+
};
|
60
|
+
|
61
|
+
VALUE libver = rb_ary_new4(ELEMENTOF(vers), vers);
|
62
|
+
rb_define_singleton_method(libver, "major", RUBY_METHOD_FUNC(libver_major), 0);
|
63
|
+
rb_define_singleton_method(libver, "minor", RUBY_METHOD_FUNC(libver_minor), 0);
|
64
|
+
rb_define_singleton_method(libver, "patch", RUBY_METHOD_FUNC(libver_patch), 0);
|
65
|
+
rb_define_singleton_method(libver, "to_s", RUBY_METHOD_FUNC(libver_to_s), 0);
|
66
|
+
rb_define_const(extlzma_mLZMA, "LIBRARY_VERSION", rb_ary_freeze(libver));
|
67
|
+
}
|
68
|
+
|
69
|
+
void
|
70
|
+
Init_extlzma(void)
|
71
|
+
{
|
72
|
+
extlzma_id_dictsize = rb_intern("dictsize");
|
73
|
+
extlzma_id_predict = rb_intern("predict");
|
74
|
+
extlzma_id_lc = rb_intern("lc");
|
75
|
+
extlzma_id_lp = rb_intern("lp");
|
76
|
+
extlzma_id_pb = rb_intern("pb");
|
77
|
+
extlzma_id_mode = rb_intern("mode");
|
78
|
+
extlzma_id_nice = rb_intern("nice");
|
79
|
+
extlzma_id_mf = rb_intern("mf");
|
80
|
+
extlzma_id_depth = rb_intern("depth");
|
81
|
+
extlzma_id_check = rb_intern("check");
|
82
|
+
extlzma_id_none = rb_intern("none");
|
83
|
+
extlzma_id_crc32 = rb_intern("crc32");
|
84
|
+
extlzma_id_crc64 = rb_intern("crc64");
|
85
|
+
extlzma_id_sha256 = rb_intern("sha256");
|
86
|
+
|
87
|
+
extlzma_mLZMA = rb_define_module("LZMA");
|
88
|
+
rb_define_const(extlzma_mLZMA, "LZMA", extlzma_mLZMA);
|
89
|
+
|
90
|
+
extlzma_init_Utils();
|
91
|
+
extlzma_init_Constants();
|
92
|
+
extlzma_init_Exceptions();
|
93
|
+
extlzma_init_Filter();
|
94
|
+
extlzma_init_Stream();
|
95
|
+
extlzma_init_Index();
|
96
|
+
extlzma_init_LIBVER();
|
97
|
+
}
|
data/ext/extlzma.h
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
#ifndef EXTLZMA_H
|
2
|
+
#define EXTLZMA_H 1
|
3
|
+
|
4
|
+
#include <stdarg.h>
|
5
|
+
#include <lzma.h>
|
6
|
+
#include <ruby.h>
|
7
|
+
#include <ruby/thread.h>
|
8
|
+
#include <ruby/intern.h>
|
9
|
+
|
10
|
+
#define LOG { fprintf(stderr, "%s:%d:%s\n", __FILE__, __LINE__, __func__); }
|
11
|
+
|
12
|
+
#define LOGF(FORMAT, ...) \
|
13
|
+
{ \
|
14
|
+
fprintf(stderr, "%s:%d:%s: " FORMAT "\n", \
|
15
|
+
__FILE__, __LINE__, __func__, ## __VA_ARGS__); \
|
16
|
+
} \
|
17
|
+
|
18
|
+
#define ELEMENTOF(VECT) (sizeof(VECT) / sizeof((VECT)[0]))
|
19
|
+
|
20
|
+
#define AUX_FUNCALL(RECV, METHOD, ...) \
|
21
|
+
({ \
|
22
|
+
VALUE args__aux_funcall__[] = { __VA_ARGS__ }; \
|
23
|
+
rb_funcall2((RECV), (METHOD), \
|
24
|
+
ELEMENTOF(args__aux_funcall__), \
|
25
|
+
args__aux_funcall__); \
|
26
|
+
}) \
|
27
|
+
|
28
|
+
extern VALUE extlzma_mLZMA;
|
29
|
+
extern VALUE extlzma_cFilter;
|
30
|
+
extern VALUE extlzma_cStream;
|
31
|
+
extern VALUE extlzma_mExceptions;
|
32
|
+
|
33
|
+
extern VALUE extlzma_eBasicException;
|
34
|
+
extern VALUE extlzma_eStreamEnd;
|
35
|
+
extern VALUE extlzma_eNoCheck;
|
36
|
+
extern VALUE extlzma_eUnsupportedCheck;
|
37
|
+
extern VALUE extlzma_eGetCheck;
|
38
|
+
extern VALUE extlzma_eMemError;
|
39
|
+
extern VALUE extlzma_eMemlimitError;
|
40
|
+
extern VALUE extlzma_eFormatError;
|
41
|
+
extern VALUE extlzma_eOptionsError;
|
42
|
+
extern VALUE extlzma_eDataError;
|
43
|
+
extern VALUE extlzma_eBufError;
|
44
|
+
extern VALUE extlzma_eProgError;
|
45
|
+
extern VALUE extlzma_eFilterTooLong;
|
46
|
+
extern VALUE extlzma_eBadPreset;
|
47
|
+
|
48
|
+
extern ID extlzma_id_dictsize;
|
49
|
+
extern ID extlzma_id_predict;
|
50
|
+
extern ID extlzma_id_lc;
|
51
|
+
extern ID extlzma_id_lp;
|
52
|
+
extern ID extlzma_id_pb;
|
53
|
+
extern ID extlzma_id_mode;
|
54
|
+
extern ID extlzma_id_nice;
|
55
|
+
extern ID extlzma_id_mf;
|
56
|
+
extern ID extlzma_id_depth;
|
57
|
+
extern ID extlzma_id_check;
|
58
|
+
extern ID extlzma_id_none;
|
59
|
+
extern ID extlzma_id_crc32;
|
60
|
+
extern ID extlzma_id_crc64;
|
61
|
+
extern ID extlzma_id_sha256;
|
62
|
+
|
63
|
+
extern void extlzma_init_Stream(void);
|
64
|
+
extern void extlzma_init_Utils(void);
|
65
|
+
extern void extlzma_init_Constants(void);
|
66
|
+
extern void extlzma_init_Exceptions(void);
|
67
|
+
extern void extlzma_init_Filter(void);
|
68
|
+
extern void extlzma_init_Index(void);
|
69
|
+
extern VALUE extlzma_lookup_error(lzma_ret status);
|
70
|
+
|
71
|
+
static inline int
|
72
|
+
aux_lzma_isfailed(lzma_ret status)
|
73
|
+
{
|
74
|
+
return status != 0;
|
75
|
+
}
|
76
|
+
|
77
|
+
static inline void
|
78
|
+
aux_lzma_test(lzma_ret status)
|
79
|
+
{
|
80
|
+
if (aux_lzma_isfailed(status)) {
|
81
|
+
VALUE exc = extlzma_lookup_error(status);
|
82
|
+
exc = rb_exc_new2(exc, "failed lzma processing");
|
83
|
+
rb_exc_raise(exc);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
#define AUX_LZMA_TEST(STATUS) aux_lzma_test((STATUS))
|
88
|
+
|
89
|
+
static inline void *
|
90
|
+
checkref(VALUE obj, void *p)
|
91
|
+
{
|
92
|
+
if (!p) {
|
93
|
+
rb_raise(rb_eArgError,
|
94
|
+
"not initialized yet - #<%s:%p>",
|
95
|
+
rb_obj_classname(obj), (void *)obj);
|
96
|
+
}
|
97
|
+
|
98
|
+
return p;
|
99
|
+
}
|
100
|
+
|
101
|
+
static inline void *
|
102
|
+
check_notref(VALUE obj, void *p)
|
103
|
+
{
|
104
|
+
if (p) {
|
105
|
+
rb_raise(rb_eArgError,
|
106
|
+
"already initialized - #<%s:%p>",
|
107
|
+
rb_obj_classname(obj), (void *)obj);
|
108
|
+
}
|
109
|
+
|
110
|
+
return p;
|
111
|
+
}
|
112
|
+
|
113
|
+
static inline void *
|
114
|
+
getrefp(VALUE obj)
|
115
|
+
{
|
116
|
+
void *p;
|
117
|
+
Data_Get_Struct(obj, void, p);
|
118
|
+
return p;
|
119
|
+
}
|
120
|
+
|
121
|
+
static inline void *
|
122
|
+
getref(VALUE obj)
|
123
|
+
{
|
124
|
+
return checkref(obj, getrefp(obj));
|
125
|
+
}
|
126
|
+
|
127
|
+
static inline lzma_filter *
|
128
|
+
getfilterp(VALUE obj)
|
129
|
+
{
|
130
|
+
return getrefp(obj);
|
131
|
+
}
|
132
|
+
|
133
|
+
static inline lzma_filter *
|
134
|
+
extlzma_getfilter(VALUE obj)
|
135
|
+
{
|
136
|
+
return getref(obj);
|
137
|
+
}
|
138
|
+
|
139
|
+
// rdoc に対して定義されているものと錯覚させるマクロ
|
140
|
+
#define RDOCFAKE(...)
|
141
|
+
|
142
|
+
#define EXTLZMA_NOT_REACHABLE \
|
143
|
+
rb_bug("NOT REACHABLE HERE - %s:%d(%s)", \
|
144
|
+
__FILE__, __LINE__, __func__); \
|
145
|
+
|
146
|
+
|
147
|
+
static inline void *
|
148
|
+
aux_thread_call_without_gvl_main(void *pp)
|
149
|
+
{
|
150
|
+
va_list *p = (va_list *)pp;
|
151
|
+
void *(*func)(void *) = va_arg(*p, void *(*)(void *));
|
152
|
+
va_list *va2 = va_arg(*p, va_list *);
|
153
|
+
return func(va2);
|
154
|
+
}
|
155
|
+
|
156
|
+
static inline void *
|
157
|
+
aux_thread_call_without_gvl_dummy(void *dummy, ...)
|
158
|
+
{
|
159
|
+
va_list va;
|
160
|
+
va_start(va, dummy);
|
161
|
+
void *p = rb_thread_call_without_gvl(
|
162
|
+
aux_thread_call_without_gvl_main, &va, RUBY_UBF_PROCESS, 0);
|
163
|
+
va_end(va);
|
164
|
+
return p;
|
165
|
+
}
|
166
|
+
|
167
|
+
static inline void *
|
168
|
+
aux_thread_call_without_gvl(void *(*func)(va_list *), ...)
|
169
|
+
{
|
170
|
+
va_list va;
|
171
|
+
va_start(va, func);
|
172
|
+
void *p = aux_thread_call_without_gvl_dummy(0, func, &va);
|
173
|
+
va_end(va);
|
174
|
+
return p;
|
175
|
+
}
|
176
|
+
|
177
|
+
#endif /* EXTLZMA_H */
|