iconv 1.0.1 → 1.0.2
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/.gitignore +4 -0
- data/.travis.yml +10 -0
- data/Gemfile +1 -0
- data/README.md +2 -0
- data/Rakefile +2 -2
- data/ext/iconv/extconf.rb +3 -2
- data/ext/iconv/iconv.c +82 -10
- data/ext/iconv/mkwrapper.rb +1 -1
- data/iconv.gemspec +1 -0
- data/lib/iconv.rb +1 -1
- data/lib/iconv/version.rb +2 -2
- data/test/test_basic.rb +1 -1
- data/test/test_option.rb +1 -1
- data/test/test_partial.rb +1 -1
- metadata +7 -4
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -12,8 +12,8 @@ file "lib/#{NAME}/#{NAME}.so" =>
|
|
12
12
|
Dir.chdir("ext/#{NAME}") do
|
13
13
|
# this does essentially the same thing
|
14
14
|
# as what RubyGems does
|
15
|
-
ruby "extconf.rb"
|
16
|
-
sh "make"
|
15
|
+
ruby "extconf.rb", *ARGV.grep(/\A--/)
|
16
|
+
sh "make", *ARGV.grep(/\A(?!--)/)
|
17
17
|
end
|
18
18
|
cp "ext/#{NAME}/#{NAME}.so", "lib/#{NAME}"
|
19
19
|
end
|
data/ext/iconv/extconf.rb
CHANGED
@@ -5,8 +5,9 @@ dir_config("iconv")
|
|
5
5
|
conf = File.exist?(File.join($srcdir, "config.charset"))
|
6
6
|
conf = with_config("config-charset", enable_config("config-charset", conf))
|
7
7
|
|
8
|
-
have_func("rb_enc_get", "ruby/encoding.h")
|
9
|
-
|
8
|
+
unless have_func("rb_enc_get", "ruby/encoding.h") || have_func("vasprintf", "stdio.h")
|
9
|
+
raise "vasprintf is required for Ruby 1.8"
|
10
|
+
end
|
10
11
|
if have_func("iconv", "iconv.h") or
|
11
12
|
have_library("iconv", "iconv", "iconv.h")
|
12
13
|
check_signedness("size_t") rescue nil
|
data/ext/iconv/iconv.c
CHANGED
@@ -17,13 +17,60 @@
|
|
17
17
|
#include <errno.h>
|
18
18
|
#include <iconv.h>
|
19
19
|
#include <assert.h>
|
20
|
-
#ifdef HAVE_RUBY_ST_H
|
21
|
-
#include "ruby/st.h"
|
22
|
-
#else /* assume 1.8 */
|
23
|
-
#include "st.h"
|
24
|
-
#endif
|
25
20
|
#ifdef HAVE_RUBY_ENCODING_H
|
26
|
-
|
21
|
+
/* assume Ruby 1.9 or later */
|
22
|
+
# include "ruby/st.h"
|
23
|
+
# include "ruby/encoding.h"
|
24
|
+
#else
|
25
|
+
# include "st.h"
|
26
|
+
# include <stdarg.h>
|
27
|
+
# define rb_f_notimplement rb_notimplement
|
28
|
+
# define rb_str_subseq(a, b, c) rb_str_substr(a, b, c)
|
29
|
+
# define rb_str_new_cstr(a) rb_str_new2(a)
|
30
|
+
NORETURN(static void rb_sys_fail_str(VALUE msg));
|
31
|
+
static void
|
32
|
+
rb_sys_fail_str(VALUE msg)
|
33
|
+
{
|
34
|
+
rb_sys_fail(RSTRING_PTR(msg));
|
35
|
+
}
|
36
|
+
static VALUE
|
37
|
+
rb_str_equal(str1, str2)
|
38
|
+
VALUE str1, str2;
|
39
|
+
{
|
40
|
+
if (str1 == str2) return Qtrue;
|
41
|
+
if (TYPE(str2) != T_STRING) {
|
42
|
+
if (!rb_respond_to(str2, rb_intern("to_str"))) {
|
43
|
+
return Qfalse;
|
44
|
+
}
|
45
|
+
return rb_equal(str2, str1);
|
46
|
+
}
|
47
|
+
if (RSTRING(str1)->len == RSTRING(str2)->len &&
|
48
|
+
rb_str_cmp(str1, str2) == 0) {
|
49
|
+
return Qtrue;
|
50
|
+
}
|
51
|
+
return Qfalse;
|
52
|
+
}
|
53
|
+
void
|
54
|
+
rb_set_errinfo(VALUE err)
|
55
|
+
{
|
56
|
+
extern VALUE ruby_errinfo;
|
57
|
+
ruby_errinfo = err;
|
58
|
+
}
|
59
|
+
#define ENCODING_GET(a) 0
|
60
|
+
VALUE
|
61
|
+
rb_sprintf(const char *format, ...)
|
62
|
+
{
|
63
|
+
va_list ap;
|
64
|
+
char *ret;
|
65
|
+
int len;
|
66
|
+
|
67
|
+
va_start(ap, format);
|
68
|
+
len = vasprintf(&ret, format, ap);
|
69
|
+
va_end(ap);
|
70
|
+
if (len == -1) return Qnil;
|
71
|
+
|
72
|
+
return rb_str_new(ret, len);
|
73
|
+
}
|
27
74
|
#endif
|
28
75
|
|
29
76
|
/*
|
@@ -212,7 +259,9 @@ iconv_create(VALUE to, VALUE from, struct rb_iconv_opt_t *opt, int *idx)
|
|
212
259
|
iconv_t cd;
|
213
260
|
int retry = 0;
|
214
261
|
|
262
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
215
263
|
*idx = rb_enc_find_index(tocode);
|
264
|
+
#endif
|
216
265
|
|
217
266
|
if (toopt) {
|
218
267
|
toenc = rb_str_plus(to, toopt);
|
@@ -499,7 +548,9 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
|
499
548
|
{
|
500
549
|
if (NIL_P(str)) {
|
501
550
|
ret = rb_str_new(buffer, outlen);
|
551
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
502
552
|
if (toidx >= 0) rb_enc_associate_index(ret, toidx);
|
553
|
+
#endif
|
503
554
|
}
|
504
555
|
else {
|
505
556
|
if (ret) {
|
@@ -507,7 +558,9 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
|
507
558
|
}
|
508
559
|
else {
|
509
560
|
ret = rb_str_new(instart, tmpstart - instart);
|
561
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
510
562
|
if (toidx >= 0) rb_enc_associate_index(ret, toidx);
|
563
|
+
#endif
|
511
564
|
OBJ_INFECT(ret, str);
|
512
565
|
}
|
513
566
|
ret = rb_str_buf_cat(ret, buffer, outlen);
|
@@ -529,7 +582,9 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
|
529
582
|
|
530
583
|
if (!ret) {
|
531
584
|
ret = rb_str_derive(str, instart, inptr - instart);
|
585
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
532
586
|
if (toidx >= 0) rb_enc_associate_index(ret, toidx);
|
587
|
+
#endif
|
533
588
|
}
|
534
589
|
else if (inptr > instart) {
|
535
590
|
rb_str_cat(ret, instart, inptr - instart);
|
@@ -555,7 +610,9 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
|
555
610
|
|
556
611
|
if (!ret) {
|
557
612
|
ret = rb_str_derive(str, instart, inptr - instart);
|
613
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
558
614
|
if (toidx >= 0) rb_enc_associate_index(ret, toidx);
|
615
|
+
#endif
|
559
616
|
}
|
560
617
|
else if (inptr > instart) {
|
561
618
|
rb_str_cat(ret, instart, inptr - instart);
|
@@ -673,7 +730,9 @@ iconv_initialize(int argc, VALUE *argv, VALUE self)
|
|
673
730
|
iconv_free(check_iconv(self));
|
674
731
|
DATA_PTR(self) = NULL;
|
675
732
|
DATA_PTR(self) = (void *)ICONV2VALUE(iconv_create(to, from, &opt, &idx));
|
733
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
676
734
|
if (idx >= 0) ENCODING_SET(self, idx);
|
735
|
+
#endif
|
677
736
|
return self;
|
678
737
|
}
|
679
738
|
|
@@ -697,7 +756,9 @@ iconv_s_open(int argc, VALUE *argv, VALUE self)
|
|
697
756
|
cd = ICONV2VALUE(iconv_create(to, from, &opt, &idx));
|
698
757
|
|
699
758
|
self = Data_Wrap_Struct(self, NULL, ICONV_FREE, (void *)cd);
|
759
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
700
760
|
if (idx >= 0) ENCODING_SET(self, idx);
|
761
|
+
#endif
|
701
762
|
|
702
763
|
if (rb_block_given_p()) {
|
703
764
|
return rb_ensure(rb_yield, self, (VALUE(*)())iconv_finish, self);
|
@@ -838,7 +899,7 @@ iconv_s_list(void)
|
|
838
899
|
|
839
900
|
args[1] = rb_block_given_p() ? 0 : rb_ary_new();
|
840
901
|
iconvlist(list_iconv, args);
|
841
|
-
state =
|
902
|
+
state = (int)args[0];
|
842
903
|
if (state) rb_jump_tag(state);
|
843
904
|
if (args[1]) return args[1];
|
844
905
|
#elif defined(HAVE___ICONV_FREE_LIST)
|
@@ -930,27 +991,38 @@ iconv_iconv(int argc, VALUE *argv, VALUE self)
|
|
930
991
|
|
931
992
|
rb_scan_args(argc, argv, "12", &str, &n1, &n2);
|
932
993
|
if (!NIL_P(str)) {
|
994
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
933
995
|
VALUE n = rb_str_length(StringValue(str));
|
934
996
|
slen = NUM2LONG(n);
|
997
|
+
#else
|
998
|
+
slen = RSTRING_LEN(StringValue(str));
|
999
|
+
#endif
|
935
1000
|
}
|
936
1001
|
if (argc != 2 || !RTEST(rb_range_beg_len(n1, &start, &length, slen, 0))) {
|
937
1002
|
if (NIL_P(n1) || ((start = NUM2LONG(n1)) < 0 ? (start += slen) >= 0 : start < slen)) {
|
938
1003
|
length = NIL_P(n2) ? -1 : NUM2LONG(n2);
|
939
1004
|
}
|
940
1005
|
}
|
941
|
-
#ifdef HAVE_RUBY_ENCODING_H
|
942
1006
|
if (start > 0 || length > 0) {
|
943
|
-
|
1007
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
944
1008
|
const char *s = RSTRING_PTR(str), *e = s + RSTRING_LEN(str);
|
945
1009
|
const char *ps = s;
|
1010
|
+
rb_encoding *enc = rb_enc_get(str);
|
946
1011
|
if (start > 0) {
|
947
1012
|
start = (ps = rb_enc_nth(s, e, start, enc)) - s;
|
948
1013
|
}
|
949
1014
|
if (length > 0) {
|
950
1015
|
length = rb_enc_nth(ps, e, length, enc) - ps;
|
951
1016
|
}
|
952
|
-
|
1017
|
+
#else
|
1018
|
+
if (start > slen) {
|
1019
|
+
start = slen;
|
1020
|
+
}
|
1021
|
+
if (length > slen - start) {
|
1022
|
+
length = slen - start;
|
1023
|
+
}
|
953
1024
|
#endif
|
1025
|
+
}
|
954
1026
|
|
955
1027
|
return iconv_convert(VALUE2ICONV(cd), str, start, length, ENCODING_GET(self), NULL);
|
956
1028
|
}
|
data/ext/iconv/mkwrapper.rb
CHANGED
data/iconv.gemspec
CHANGED
data/lib/iconv.rb
CHANGED
data/lib/iconv/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
class Iconv
|
2
|
-
VERSION = "1.0.
|
1
|
+
class Iconv < Data
|
2
|
+
VERSION = "1.0.2"
|
3
3
|
end
|
data/test/test_basic.rb
CHANGED
data/test/test_option.rb
CHANGED
data/test/test_partial.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iconv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: iconv wrapper library
|
15
15
|
email:
|
@@ -20,6 +20,7 @@ extensions:
|
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
22
|
- .gitignore
|
23
|
+
- .travis.yml
|
23
24
|
- BSDL
|
24
25
|
- Gemfile
|
25
26
|
- LICENSE.txt
|
@@ -47,13 +48,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
48
|
requirements:
|
48
49
|
- - ! '>='
|
49
50
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
51
|
+
version: 1.9.2
|
51
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
53
|
none: false
|
53
54
|
requirements:
|
54
55
|
- - ! '>='
|
55
56
|
- !ruby/object:Gem::Version
|
56
57
|
version: '0'
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
hash: -4204543701599333297
|
57
61
|
requirements: []
|
58
62
|
rubyforge_project:
|
59
63
|
rubygems_version: 1.8.24
|
@@ -65,4 +69,3 @@ test_files:
|
|
65
69
|
- test/test_option.rb
|
66
70
|
- test/test_partial.rb
|
67
71
|
- test/utils.rb
|
68
|
-
has_rdoc:
|