glib2 1.0.0-x86-mingw32 → 1.0.1-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.
@@ -537,28 +537,60 @@ mc_prepare(VALUE self)
537
537
  return rb_assoc_new(CBOOL2RVAL(ret), INT2NUM(priority));
538
538
  }
539
539
 
540
+ struct mc_query_body_args {
541
+ GPollFD *fds;
542
+ gint timeout_;
543
+ gint ret;
544
+ };
545
+
546
+ static VALUE
547
+ mc_query_body(VALUE value)
548
+ {
549
+ struct mc_query_body_args *args = (struct mc_query_body_args *)value;
550
+ gint i;
551
+ VALUE ary = rb_ary_new();
552
+
553
+ for (i = 0; i < args->ret; i++)
554
+ rb_ary_push(ary, BOXED2RVAL(&args->fds[i], G_TYPE_POLL_FD));
555
+
556
+ return rb_assoc_new(INT2NUM(args->timeout_), ary);
557
+ }
558
+
559
+ static VALUE
560
+ mc_query_ensure(VALUE value)
561
+ {
562
+ g_free((GPollFD *)value);
563
+
564
+ return Qnil;
565
+ }
566
+
540
567
  static VALUE
541
568
  mc_query(VALUE self, VALUE max_priority)
542
569
  {
543
- gint i, timeout_;
544
- VALUE ary;
570
+ gint timeout_;
571
+ struct mc_query_body_args args;
545
572
 
546
- GPollFD* fds = g_new (GPollFD, 100);
547
- gint ret = g_main_context_query(_SELF(self), NUM2INT(max_priority),
548
- &timeout_, fds, 100);
573
+ GPollFD *fds = g_new(GPollFD, 100);
574
+ gint ret = g_main_context_query(_SELF(self),
575
+ NUM2INT(max_priority),
576
+ &timeout_,
577
+ fds,
578
+ 100);
549
579
  if (ret > 100) {
550
580
  g_free(fds);
551
581
  fds = g_new(GPollFD, ret);
552
- g_main_context_query(_SELF(self), NUM2INT(max_priority),
553
- &timeout_, fds, ret);
582
+ g_main_context_query(_SELF(self),
583
+ NUM2INT(max_priority),
584
+ &timeout_,
585
+ fds,
586
+ ret);
554
587
  }
555
588
 
556
- ary = rb_ary_new();
557
- for (i = 0; i < ret; i++)
558
- rb_ary_push(ary, BOXED2RVAL(&fds[i], G_TYPE_POLL_FD));
559
-
560
- g_free(fds);
561
- return rb_assoc_new(INT2NUM(timeout_), ary);
589
+ args.fds = fds;
590
+ args.timeout_ = timeout_;
591
+ args.ret = ret;
592
+ return rb_ensure(mc_query_body, (VALUE)&args,
593
+ mc_query_ensure, (VALUE)fds);
562
594
  }
563
595
 
564
596
  /* How can I implement this?
@@ -29,7 +29,8 @@ static VALUE rbglib_log_handler_procs;
29
29
  static ID id_call;
30
30
  static gboolean log_canceled;
31
31
 
32
- static gchar* logmessage(GLogLevelFlags level)
32
+ static const gchar *
33
+ logmessage(GLogLevelFlags level)
33
34
  {
34
35
  if (level & G_LOG_LEVEL_ERROR){
35
36
  return "ERROR";
@@ -14,37 +14,29 @@
14
14
  static VALUE
15
15
  shell_parse(VALUE self, VALUE command_line)
16
16
  {
17
- gint argc, i;
18
- gchar** argv;
19
- GError* err = NULL;
20
- VALUE ary;
17
+ gint argc;
18
+ gchar **argv;
19
+ GError *error = NULL;
21
20
 
22
- gboolean ret = g_shell_parse_argv(RVAL2CSTR(command_line),
23
- &argc, &argv, &err);
21
+ if (!g_shell_parse_argv(RVAL2CSTR(command_line), &argc, &argv, &error))
22
+ RAISE_GERROR(error);
24
23
 
25
- if (! ret) RAISE_GERROR(err);
26
-
27
- ary = rb_ary_new();
28
- for (i = 0; i < argc; i++) {
29
- rb_ary_push(ary, CSTR2RVAL(argv[i]));
30
- }
31
- g_strfreev (argv);
32
- return ary;
24
+ return STRV2RVAL_FREE(argv);
33
25
  }
34
26
 
35
27
  static VALUE
36
28
  shell_quote(VALUE self, VALUE unquoted_string)
37
29
  {
38
- return CSTR2RVAL_FREE(g_shell_quote((const gchar*)RVAL2CSTR(unquoted_string)));
30
+ return CSTR2RVAL_FREE(g_shell_quote(RVAL2CSTR(unquoted_string)));
39
31
  }
40
32
 
41
33
  static VALUE
42
34
  shell_unquote(VALUE self, VALUE quoted_string)
43
35
  {
44
- GError* err = NULL;
45
- gchar* str = g_shell_unquote((const gchar*)RVAL2CSTR(quoted_string), &err);
46
-
47
- if (! str) RAISE_GERROR(err);
36
+ GError *error = NULL;
37
+ gchar *str = g_shell_unquote(RVAL2CSTR(quoted_string), &error);
38
+ if (str == NULL)
39
+ RAISE_GERROR(error);
48
40
 
49
41
  return CSTR2RVAL_FREE(str);
50
42
  }
@@ -31,9 +31,8 @@ rbglib_m_spawn_async_with_pipes(VALUE self, VALUE working_directory, VALUE argv,
31
31
  gboolean ret;
32
32
  GPid child_pid;
33
33
  VALUE func = Qnil;
34
- gint gargc, genc, i;
35
- gchar** gargv = (gchar**)NULL;
36
- gchar** genvp = (gchar**)NULL;
34
+ gchar **gargv;
35
+ gchar **genvp;
37
36
  gint standard_input, standard_output, standard_error;
38
37
 
39
38
  if (rb_block_given_p()) {
@@ -41,36 +40,8 @@ rbglib_m_spawn_async_with_pipes(VALUE self, VALUE working_directory, VALUE argv,
41
40
  G_RELATIVE(self, func);
42
41
  }
43
42
 
44
- if (! NIL_P(argv)){
45
- Check_Type(argv, T_ARRAY);
46
- gargc = RARRAY_LEN(argv);
47
- gargv = ALLOCA_N(gchar*, gargc + 1);
48
- for (i = 0; i < gargc; i++) {
49
- if (TYPE(RARRAY_PTR(argv)[i]) == T_STRING) {
50
- gargv[i] = RVAL2CSTR(RARRAY_PTR(argv)[i]);
51
- }
52
- else {
53
- gargv[i] = "";
54
- }
55
- }
56
- gargv[gargc] = (gchar*)NULL;
57
- }
58
-
59
- if (! NIL_P(envp)){
60
- Check_Type(envp, T_ARRAY);
61
- genc = RARRAY_LEN(envp);
62
- genvp = ALLOCA_N(gchar*, genc + 1);
63
- for (i = 0; i < genc; i++) {
64
- if (TYPE(RARRAY_PTR(envp)[i]) == T_STRING) {
65
- genvp[i] = RVAL2CSTR(RARRAY_PTR(envp)[i]);
66
- }
67
- else {
68
- genvp[i] = "";
69
- }
70
- }
71
- genvp[genc] = (gchar*)NULL;
72
- }
73
-
43
+ gargv = (gchar **)RVAL2STRV(argv);
44
+ genvp = (gchar **)RVAL2STRV(envp);
74
45
  ret = g_spawn_async_with_pipes(NIL_P(working_directory) ? NULL : RVAL2CSTR(working_directory),
75
46
  gargv, genvp, NUM2INT(flags),
76
47
  (GSpawnChildSetupFunc)child_setup,
@@ -78,8 +49,10 @@ rbglib_m_spawn_async_with_pipes(VALUE self, VALUE working_directory, VALUE argv,
78
49
  &child_pid,
79
50
  &standard_input, &standard_output,
80
51
  &standard_error, &err);
81
-
82
- if (! ret) RAISE_GERROR(err);
52
+ g_free(gargv);
53
+ g_free(genvp);
54
+ if (!ret)
55
+ RAISE_GERROR(err);
83
56
 
84
57
  return rb_ary_new3(4, INT2NUM((gint)child_pid),
85
58
  rb_funcall(rb_cIO, id_new, 1, INT2NUM(standard_input)),
@@ -94,54 +67,25 @@ rbglib_m_spawn_async(VALUE self, VALUE working_directory, VALUE argv, VALUE envp
94
67
  gboolean ret;
95
68
  GPid child_pid;
96
69
  VALUE func = Qnil;
97
- gint gargc, genc, i;
98
- gchar** gargv = (gchar**)NULL;
99
- gchar** genvp = (gchar**)NULL;
70
+ gchar **gargv;
71
+ gchar **genvp;
100
72
 
101
73
  if (rb_block_given_p()) {
102
74
  func = rb_block_proc();
103
75
  G_RELATIVE(self, func);
104
76
  }
105
77
 
106
- if (! NIL_P(argv)){
107
- Check_Type(argv, T_ARRAY);
108
- gargc = RARRAY_LEN(argv);
109
- gargv = ALLOCA_N(gchar*, gargc + 1);
110
- for (i = 0; i < gargc; i++) {
111
- if (TYPE(RARRAY_PTR(argv)[i]) == T_STRING) {
112
- gargv[i] = RVAL2CSTR(RARRAY_PTR(argv)[i]);
113
- }
114
- else {
115
- gargv[i] = "";
116
- }
117
- }
118
- gargv[gargc] = (gchar*)NULL;
119
- }
120
-
121
- if (! NIL_P(envp)){
122
- Check_Type(envp, T_ARRAY);
123
- genc = RARRAY_LEN(envp);
124
- genvp = ALLOCA_N(gchar*, genc + 1);
125
- for (i = 0; i < genc; i++) {
126
- if (TYPE(RARRAY_PTR(envp)[i]) == T_STRING) {
127
- genvp[i] = RVAL2CSTR(RARRAY_PTR(envp)[i]);
128
- }
129
- else {
130
- genvp[i] = "";
131
- }
132
- }
133
- genvp[genc] = (gchar*)NULL;
134
- }
135
-
78
+ gargv = (gchar **)RVAL2STRV(argv);
79
+ genvp = (gchar **)RVAL2STRV(envp);
136
80
  ret = g_spawn_async(NIL_P(working_directory) ? NULL : RVAL2CSTR(working_directory),
137
81
  gargv, genvp, NUM2INT(flags),
138
82
  (GSpawnChildSetupFunc)child_setup, (gpointer)func,
139
83
  &child_pid, &err);
140
-
141
- if (! ret){
84
+ g_free(gargv);
85
+ g_free(genvp);
86
+ if (!ret)
142
87
  RAISE_GERROR(err);
143
- }
144
-
88
+
145
89
  return INT2NUM((int)child_pid);
146
90
  }
147
91
 
@@ -151,9 +95,8 @@ rbglib_m_spawn_sync(VALUE self, VALUE working_directory, VALUE argv, VALUE envp,
151
95
  GError *err = NULL;
152
96
  gboolean ret;
153
97
  VALUE func = Qnil;
154
- gint gargc, genc, i;
155
- gchar** gargv = (gchar**)NULL;
156
- gchar** genvp = (gchar**)NULL;
98
+ gchar** gargv;
99
+ gchar** genvp;
157
100
  gchar *standard_output = NULL, *standard_error = NULL;
158
101
  gint exit_status;
159
102
  VALUE std_out, std_err;
@@ -163,46 +106,17 @@ rbglib_m_spawn_sync(VALUE self, VALUE working_directory, VALUE argv, VALUE envp,
163
106
  G_RELATIVE(self, func);
164
107
  }
165
108
 
166
- if (! NIL_P(argv)){
167
- Check_Type(argv, T_ARRAY);
168
- gargc = RARRAY_LEN(argv);
169
- gargv = ALLOCA_N(gchar*, gargc + 1);
170
- for (i = 0; i < gargc; i++) {
171
- if (TYPE(RARRAY_PTR(argv)[i]) == T_STRING) {
172
- gargv[i] = RVAL2CSTR(RARRAY_PTR(argv)[i]);
173
- }
174
- else {
175
- gargv[i] = "";
176
- }
177
- }
178
- gargv[gargc] = (gchar*)NULL;
179
- }
180
-
181
- if (! NIL_P(envp)){
182
- Check_Type(envp, T_ARRAY);
183
- genc = RARRAY_LEN(envp);
184
- genvp = ALLOCA_N(gchar*, genc + 1);
185
- for (i = 0; i < genc; i++) {
186
- if (TYPE(RARRAY_PTR(envp)[i]) == T_STRING) {
187
- genvp[i] = RVAL2CSTR(RARRAY_PTR(envp)[i]);
188
- }
189
- else {
190
- genvp[i] = "";
191
- }
192
- }
193
- genvp[genc] = (gchar*)NULL;
194
- }
195
-
109
+ gargv = (gchar **)RVAL2STRV(argv);
110
+ genvp = (gchar **)RVAL2STRV(envp);
196
111
  ret = g_spawn_sync(NIL_P(working_directory) ? NULL : RVAL2CSTR(working_directory),
197
112
  gargv, genvp, NUM2INT(flags),
198
113
  (GSpawnChildSetupFunc)child_setup, (gpointer)func,
199
114
  &standard_output, &standard_error,
200
115
  &exit_status, &err);
201
-
202
-
203
- if (! ret){
116
+ g_free(gargv);
117
+ g_free(genvp);
118
+ if (!ret)
204
119
  RAISE_GERROR(err);
205
- }
206
120
 
207
121
  if (standard_output) {
208
122
  std_out = CSTR2RVAL(standard_output);
@@ -279,12 +193,16 @@ rbglib_m_spawn_command_line_async(VALUE self, VALUE str)
279
193
  }
280
194
 
281
195
  #ifdef HAVE_G_SPAWN_CLOSE_PID
196
+
197
+ #define RVAL2GPID(value) ((GPid)NUM2INT(pid))
198
+
282
199
  static VALUE
283
200
  rbglib_m_spawn_close_pid(VALUE self, VALUE pid)
284
201
  {
285
- g_spawn_close_pid(NUM2INT(pid));
202
+ g_spawn_close_pid(RVAL2GPID(pid));
286
203
  return Qnil;
287
204
  }
205
+
288
206
  #endif
289
207
 
290
208
  void
@@ -120,29 +120,16 @@ rbglib_m_user_config_dir(VALUE self)
120
120
  return CSTR2RVAL(g_get_user_config_dir());
121
121
  }
122
122
 
123
- static VALUE
124
- strv_to_array(const gchar * const *strv)
125
- {
126
- VALUE array;
127
-
128
- array = rb_ary_new();
129
- for (; *strv; strv++) {
130
- rb_ary_push(array, CSTR2RVAL(*strv));
131
- }
132
-
133
- return array;
134
- }
135
-
136
123
  static VALUE
137
124
  rbglib_m_system_data_dirs(VALUE self)
138
125
  {
139
- return strv_to_array(g_get_system_data_dirs());
126
+ return STRV2RVAL((const gchar **)g_get_system_data_dirs());
140
127
  }
141
128
 
142
129
  static VALUE
143
130
  rbglib_m_system_config_dirs(VALUE self)
144
131
  {
145
- return strv_to_array(g_get_system_config_dirs());
132
+ return STRV2RVAL((const gchar **)g_get_system_config_dirs());
146
133
  }
147
134
  #endif
148
135
 
@@ -254,21 +241,19 @@ static VALUE
254
241
  rbglib_m_parse_debug_string(VALUE self, VALUE string, VALUE keys)
255
242
  {
256
243
  gint i, nkeys;
257
- VALUE ary, ret;
244
+ VALUE ary;
258
245
  GDebugKey* gkeys;
259
246
 
260
247
  Check_Type(keys, T_HASH);
261
248
  ary = rb_funcall(keys, rb_intern("to_a"), 0);
262
249
  nkeys = RARRAY_LEN(ary);
263
- gkeys = g_new(GDebugKey, nkeys);
250
+ gkeys = ALLOCA_N(GDebugKey, nkeys);
264
251
  for (i = 0; i < nkeys; i++) {
265
252
  gkeys[i].key = RVAL2CSTR(RARRAY_PTR(RARRAY_PTR(ary)[i])[0]);
266
253
  gkeys[i].value = NUM2UINT(RARRAY_PTR(RARRAY_PTR(ary)[i])[1]);
267
254
  }
268
255
 
269
- ret = UINT2NUM(g_parse_debug_string(RVAL2CSTR(string), gkeys, nkeys));
270
- g_free(gkeys);
271
- return ret;
256
+ return UINT2NUM(g_parse_debug_string(RVAL2CSTR(string), gkeys, nkeys));
272
257
  }
273
258
 
274
259
  /*
@@ -33,7 +33,7 @@ struct _GRClosure
33
33
  static VALUE
34
34
  rclosure_default_g2r_func(guint num, const GValue *values)
35
35
  {
36
- int i;
36
+ guint i;
37
37
  VALUE args = rb_ary_new2(num);
38
38
  for (i = 0; i < num; i++)
39
39
  rb_ary_store(args, i, GVAL2RVAL(&values[i]));
@@ -323,7 +323,8 @@ Init_closure()
323
323
 
324
324
  /**********************************************************************/
325
325
 
326
- void Init_gobject_gclosure()
326
+ void
327
+ Init_gobject_gclosure()
327
328
  {
328
329
  Init_rclosure();
329
330
  Init_closure();
@@ -164,7 +164,7 @@ rbgobj_enum_add_constants(VALUE mod, GType enum_type,
164
164
  const gchar *strip_prefix)
165
165
  {
166
166
  GEnumClass *gclass;
167
- int i;
167
+ guint i;
168
168
  int prefix_len = strlen(strip_prefix);
169
169
 
170
170
  gclass = G_ENUM_CLASS(g_type_class_ref(enum_type));
@@ -190,7 +190,7 @@ rbgobj_flags_add_constants(VALUE mod, GType flags_type,
190
190
  const gchar *strip_prefix)
191
191
  {
192
192
  GFlagsClass *gclass;
193
- int i;
193
+ guint i;
194
194
  int prefix_len = strlen(strip_prefix);
195
195
 
196
196
  gclass = G_FLAGS_CLASS(g_type_class_ref(flags_type));
@@ -296,7 +296,7 @@ void
296
296
  rbgobj_init_enum_class(VALUE klass)
297
297
  {
298
298
  GEnumClass* gclass = g_type_class_ref(CLASS2GTYPE(klass));
299
- int i;
299
+ guint i;
300
300
 
301
301
  for (i = 0; i < gclass->n_values; i++) {
302
302
  GEnumValue* entry = &(gclass->values[i]);
@@ -342,24 +342,44 @@ enum_s_range(VALUE self)
342
342
  return result;
343
343
  }
344
344
 
345
+ struct enum_s_values_body_args {
346
+ GEnumClass *gclass;
347
+ VALUE self;
348
+ };
349
+
345
350
  static VALUE
346
- enum_s_values(VALUE self)
351
+ enum_s_values_body(VALUE value)
347
352
  {
348
- GEnumClass *gclass;
349
- VALUE result;
350
- int i;
353
+ struct enum_s_values_body_args *args = (struct enum_s_values_body_args *)value;
354
+ VALUE result = rb_ary_new();
355
+ guint i;
351
356
 
352
- gclass = g_type_class_ref(CLASS2GTYPE(self));;
353
- result = rb_ary_new();
354
- for (i = 0; i < gclass->n_values; i++) {
355
- GEnumValue *p = &(gclass->values[i]);
356
- rb_ary_push(result, make_enum(p->value, self));
357
- }
357
+ for (i = 0; i < args->gclass->n_values; i++)
358
+ rb_ary_push(result, make_enum(args->gclass->values[i].value, args->self));
358
359
 
359
- g_type_class_unref(gclass);
360
360
  return result;
361
361
  }
362
362
 
363
+ static VALUE
364
+ enum_s_values_ensure(VALUE gclass)
365
+ {
366
+ g_type_class_unref((GEnumClass *)gclass);
367
+
368
+ return Qnil;
369
+ }
370
+
371
+ static VALUE
372
+ enum_s_values(VALUE self)
373
+ {
374
+ struct enum_s_values_body_args args = {
375
+ g_type_class_ref(CLASS2GTYPE(self)),
376
+ self
377
+ };
378
+
379
+ return rb_ensure(enum_s_values_body, (VALUE)&args,
380
+ enum_s_values_ensure, (VALUE)args.gclass);
381
+ }
382
+
363
383
  static VALUE
364
384
  enum_s_allocate(VALUE self)
365
385
  {
@@ -573,7 +593,7 @@ rbgobj_init_flags_class(VALUE klass)
573
593
  {
574
594
  GFlagsClass* gclass = g_type_class_ref(CLASS2GTYPE(klass));
575
595
  GString* source = g_string_new(NULL);
576
- int i;
596
+ guint i;
577
597
 
578
598
  for (i = 0; i < gclass->n_values; i++) {
579
599
  GFlagsValue* entry = &(gclass->values[i]);
@@ -639,7 +659,7 @@ flags_s_values(VALUE klass)
639
659
  {
640
660
  GFlagsClass *gclass;
641
661
  VALUE result;
642
- int i;
662
+ guint i;
643
663
 
644
664
  gclass = g_type_class_ref(CLASS2GTYPE(klass));
645
665
  result = rb_ary_new();
@@ -694,7 +714,7 @@ flags_initialize(int argc, VALUE* argv, VALUE self)
694
714
  }
695
715
 
696
716
  if (!p->info) {
697
- int i;
717
+ guint i;
698
718
  for (i = 0; i < p->gclass->n_values; i++){
699
719
  GFlagsValue* val = &(p->gclass->values[i]);
700
720
  if (val->value == p->value){