141 lines
4.2 KiB
Diff
141 lines
4.2 KiB
Diff
diff -Nrup ext.bad/idna.c ext/idna.c
|
|
--- ext.bad/idna.c 2012-02-13 22:16:33.792135714 -0500
|
|
+++ ext/idna.c 2012-02-13 23:14:43.562413759 -0500
|
|
@@ -24,6 +24,16 @@
|
|
#include <idna.h>
|
|
#include "idn.h"
|
|
|
|
+#include <ruby/encoding.h>
|
|
+
|
|
+#define ENCODED_STR_NEW2(str, encoding) \
|
|
+ ({ \
|
|
+ VALUE _string = rb_str_new2((const char *)str); \
|
|
+ int _enc = rb_enc_find_index(encoding); \
|
|
+ rb_enc_associate_index(_string, _enc); \
|
|
+ _string; \
|
|
+ })
|
|
+
|
|
/*
|
|
* Document-class: IDN::Idna
|
|
* The Idna module of LibIDN Ruby Bindings.
|
|
@@ -85,7 +95,7 @@ static VALUE toASCII(int argc, VALUE arg
|
|
flags = 0x0000;
|
|
}
|
|
|
|
- rc = idna_to_ascii_8z(RSTRING(str)->ptr, &buf, flags);
|
|
+ rc = idna_to_ascii_8z(RSTRING_PTR(str), &buf, flags);
|
|
|
|
if (rc != IDNA_SUCCESS) {
|
|
xfree(buf);
|
|
@@ -93,7 +103,7 @@ static VALUE toASCII(int argc, VALUE arg
|
|
return Qnil;
|
|
}
|
|
|
|
- retv = rb_str_new2(buf);
|
|
+ retv = ENCODED_STR_NEW2(buf, "ASCII-8BIT");
|
|
xfree(buf);
|
|
return retv;
|
|
}
|
|
@@ -125,7 +135,7 @@ static VALUE toUnicode(int argc, VALUE a
|
|
flags = 0x0000;
|
|
}
|
|
|
|
- rc = idna_to_unicode_8z8z(RSTRING(str)->ptr, &buf, flags);
|
|
+ rc = idna_to_unicode_8z8z(RSTRING_PTR(str), &buf, flags);
|
|
|
|
if (rc != IDNA_SUCCESS) {
|
|
xfree(buf);
|
|
@@ -133,7 +143,7 @@ static VALUE toUnicode(int argc, VALUE a
|
|
return Qnil;
|
|
}
|
|
|
|
- retv = rb_str_new2(buf);
|
|
+ retv = ENCODED_STR_NEW2(buf, "UTF-8");
|
|
xfree(buf);
|
|
return retv;
|
|
}
|
|
diff -Nrup ext.bad/punycode.c ext/punycode.c
|
|
--- ext.bad/punycode.c 2012-02-13 22:16:33.792135714 -0500
|
|
+++ ext/punycode.c 2012-02-13 23:19:39.499714035 -0500
|
|
@@ -26,6 +26,14 @@
|
|
#include <punycode.h>
|
|
#include "idn.h"
|
|
|
|
+#define ENCODED_STR_NEW(str, len, encoding) \
|
|
+ ({ \
|
|
+ VALUE _string = rb_str_new((const char *)str, (long)len); \
|
|
+ int _enc = rb_enc_find_index(encoding); \
|
|
+ rb_enc_associate_index(_string, _enc); \
|
|
+ _string; \
|
|
+ })
|
|
+
|
|
/*
|
|
* Document-class: IDN::Punycode
|
|
* The Punycode module of LibIDN Ruby Bindings.
|
|
@@ -66,7 +74,7 @@ static VALUE encode(VALUE self, VALUE st
|
|
VALUE retv;
|
|
|
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
|
- ustr = stringprep_utf8_to_ucs4(RSTRING(str)->ptr, RSTRING(str)->len, &len);
|
|
+ ustr = stringprep_utf8_to_ucs4(RSTRING_PTR(str), RSTRING_LEN(str), &len);
|
|
|
|
while (1) {
|
|
buf = realloc(buf, buflen);
|
|
@@ -116,7 +124,7 @@ static VALUE decode(VALUE self, VALUE st
|
|
|
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
|
|
|
- len = RSTRING(str)->len;
|
|
+ len = RSTRING_LEN(str);
|
|
ustr = malloc(len * sizeof(punycode_uint));
|
|
|
|
if (ustr == NULL) {
|
|
@@ -124,7 +132,7 @@ static VALUE decode(VALUE self, VALUE st
|
|
return Qnil;
|
|
}
|
|
|
|
- rc = punycode_decode(RSTRING(str)->len, RSTRING(str)->ptr,
|
|
+ rc = punycode_decode(RSTRING_LEN(str), RSTRING_PTR(str),
|
|
&len, ustr, NULL);
|
|
|
|
if (rc != PUNYCODE_SUCCESS) {
|
|
@@ -134,7 +142,7 @@ static VALUE decode(VALUE self, VALUE st
|
|
}
|
|
|
|
buf = stringprep_ucs4_to_utf8(ustr, len, NULL, &len);
|
|
- retv = rb_str_new(buf, len);
|
|
+ retv = ENCODED_STR_NEW(buf, len, "UTF-8");
|
|
xfree(ustr);
|
|
xfree(buf);
|
|
return retv;
|
|
diff -Nrup ext.bad/stringprep.c ext/stringprep.c
|
|
--- ext.bad/stringprep.c 2012-02-13 22:16:33.792135714 -0500
|
|
+++ ext/stringprep.c 2012-02-13 22:16:55.618862844 -0500
|
|
@@ -64,7 +64,7 @@ static VALUE stringprep_internal(VALUE s
|
|
VALUE retv;
|
|
|
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
|
- rc = stringprep_profile(RSTRING(str)->ptr, &buf, profile, 0);
|
|
+ rc = stringprep_profile(RSTRING_PTR(str), &buf, profile, 0);
|
|
|
|
if (rc != STRINGPREP_OK) {
|
|
rb_raise(eStringprepError, "%s (%d)", stringprep_strerror(rc), rc);
|
|
@@ -135,7 +135,7 @@ static VALUE resourceprep(VALUE self, VA
|
|
static VALUE with_profile(VALUE self, VALUE str, VALUE profile)
|
|
{
|
|
profile = rb_check_convert_type(profile, T_STRING, "String", "to_s");
|
|
- return stringprep_internal(str, RSTRING(profile)->ptr);
|
|
+ return stringprep_internal(str, RSTRING_PTR(profile));
|
|
}
|
|
|
|
/*
|
|
@@ -153,7 +153,7 @@ static VALUE nfkc_normalize(VALUE self,
|
|
VALUE retv;
|
|
|
|
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
|
|
- buf = stringprep_utf8_nfkc_normalize(RSTRING(str)->ptr, RSTRING(str)->len);
|
|
+ buf = stringprep_utf8_nfkc_normalize(RSTRING_PTR(str), RSTRING_LEN(str));
|
|
|
|
retv = rb_str_new2(buf);
|
|
xfree(buf);
|