ucl 0.1.1 → 0.1.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.
- checksums.yaml +4 -4
- data/ext/ucl.c +34 -24
- data/ucl.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fb8e8b518ea32adfa5365bf32e260487f3aa4ec9e546738911e6cf37a16e300
|
4
|
+
data.tar.gz: e9067e8747899c187f9ae400cd4bfe58e4343c41ff04b70cdbe161a500062bfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 962eea2f25228aec1ee903315074ceabd9cc424b2afab0963e68179fd39f1666abe6954404594ae6d4c658704b89200d4bfad21174bc9cd298b8ce66ea9252b7
|
7
|
+
data.tar.gz: b5c9bbe4b92be69734f5bd0df81a043dba97158489da7f67d7fce6e33f976a6eb209c45b7a72690bd441aa2fd8aed203f47389753328efd875fe05175e875afa
|
data/ext/ucl.c
CHANGED
@@ -25,6 +25,11 @@
|
|
25
25
|
static VALUE mUCL = Qundef;
|
26
26
|
static VALUE eUCLError = Qundef;
|
27
27
|
|
28
|
+
static int ucl_allowed_flags = UCL_PARSER_KEY_LOWERCASE |
|
29
|
+
UCL_PARSER_NO_TIME |
|
30
|
+
UCL_PARSER_DISABLE_MACRO |
|
31
|
+
UCL_PARSER_NO_FILEVARS ;
|
32
|
+
|
28
33
|
|
29
34
|
VALUE
|
30
35
|
_iterate_valid_ucl(ucl_object_t const *root, int flags)
|
@@ -130,11 +135,6 @@ ucl_s_set_flags(VALUE klass, VALUE val)
|
|
130
135
|
static VALUE
|
131
136
|
ucl_s_parse(int argc, VALUE *argv, VALUE klass)
|
132
137
|
{
|
133
|
-
static int allowed_flags = UCL_PARSER_KEY_LOWERCASE |
|
134
|
-
UCL_PARSER_NO_TIME |
|
135
|
-
UCL_PARSER_DISABLE_MACRO |
|
136
|
-
UCL_PARSER_NO_FILEVARS ;
|
137
|
-
|
138
138
|
VALUE data, flags;
|
139
139
|
rb_scan_args(argc, argv, "11", &data, &flags);
|
140
140
|
if (NIL_P(flags)) flags = ucl_s_get_flags(mUCL);
|
@@ -142,7 +142,7 @@ ucl_s_parse(int argc, VALUE *argv, VALUE klass)
|
|
142
142
|
rb_check_type(data, T_STRING);
|
143
143
|
rb_check_type(flags, T_FIXNUM);
|
144
144
|
|
145
|
-
int c_flags = FIX2INT(flags) &
|
145
|
+
int c_flags = FIX2INT(flags) & ucl_allowed_flags;
|
146
146
|
|
147
147
|
struct ucl_parser *parser =
|
148
148
|
ucl_parser_new(c_flags | UCL_PARSER_NO_IMPLICIT_ARRAYS);
|
@@ -152,20 +152,16 @@ ucl_s_parse(int argc, VALUE *argv, VALUE klass)
|
|
152
152
|
RSTRING_LEN(data));
|
153
153
|
|
154
154
|
if (ucl_parser_get_error(parser)) {
|
155
|
-
|
155
|
+
const char *errormsg = ucl_parser_get_error(parser);
|
156
|
+
if (parser != NULL) { ucl_parser_free(parser); }
|
157
|
+
rb_raise(eUCLError, "%s", errormsg);
|
156
158
|
}
|
157
159
|
|
158
160
|
ucl_object_t *root = ucl_parser_get_object(parser);
|
161
|
+
VALUE res = _iterate_valid_ucl(root, FIX2INT(flags));
|
159
162
|
|
160
|
-
|
161
|
-
|
162
|
-
if (parser != NULL) {
|
163
|
-
ucl_parser_free(parser);
|
164
|
-
}
|
165
|
-
|
166
|
-
if (root != NULL) {
|
167
|
-
ucl_object_unref(root);
|
168
|
-
}
|
163
|
+
if (parser != NULL) { ucl_parser_free(parser); }
|
164
|
+
if (root != NULL) { ucl_object_unref(root); }
|
169
165
|
|
170
166
|
return res;
|
171
167
|
}
|
@@ -187,17 +183,31 @@ ucl_s_load_file(int argc, VALUE *argv, VALUE klass)
|
|
187
183
|
{
|
188
184
|
VALUE file, flags;
|
189
185
|
rb_scan_args(argc, argv, "11", &file, &flags);
|
186
|
+
if (NIL_P(flags)) flags = ucl_s_get_flags(mUCL);
|
190
187
|
|
191
|
-
|
192
|
-
|
193
|
-
|
188
|
+
rb_check_type(file, T_STRING);
|
189
|
+
rb_check_type(flags, T_FIXNUM);
|
190
|
+
|
191
|
+
int c_flags = FIX2INT(flags) & ucl_allowed_flags;
|
192
|
+
char *c_file = StringValueCStr(file);
|
193
|
+
|
194
|
+
struct ucl_parser *parser =
|
195
|
+
ucl_parser_new(c_flags | UCL_PARSER_NO_IMPLICIT_ARRAYS);
|
196
|
+
ucl_parser_add_file(parser, c_file);
|
197
|
+
|
198
|
+
if (ucl_parser_get_error(parser)) {
|
199
|
+
const char *errormsg = ucl_parser_get_error(parser);
|
200
|
+
if (parser != NULL) { ucl_parser_free(parser); }
|
201
|
+
rb_raise(eUCLError, "%s", errormsg);
|
202
|
+
}
|
194
203
|
|
195
|
-
|
196
|
-
VALUE
|
197
|
-
2, read_args, RB_PASS_KEYWORDS);
|
204
|
+
ucl_object_t *root = ucl_parser_get_object(parser);
|
205
|
+
VALUE res = _iterate_valid_ucl(root, FIX2INT(flags));
|
198
206
|
|
199
|
-
|
200
|
-
|
207
|
+
if (parser != NULL) { ucl_parser_free(parser); }
|
208
|
+
if (root != NULL) { ucl_object_unref(root); }
|
209
|
+
|
210
|
+
return res;
|
201
211
|
}
|
202
212
|
|
203
213
|
|
data/ucl.gemspec
CHANGED