5
S_g_input_stream_read(USER_OBJECT_ s_object, USER_OBJECT_ s_count,
6
USER_OBJECT_ s_cancellable)
8
USER_OBJECT_ _result = NULL_USER_OBJECT;
9
#if GIO_CHECK_VERSION(2, 16, 0)
10
GInputStream* object = G_INPUT_STREAM(getPtrValue(s_object));
11
gsize count = ((gsize)asCNumeric(s_count));
12
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
13
G_CANCELLABLE(getPtrValue(s_cancellable));
16
guchar* buffer = R_alloc(count, sizeof(guchar));
19
ans = g_input_stream_read(object, buffer, count, cancellable, &error);
21
_result = asRInteger(ans);
23
_result = retByVal(_result, "buffer", asRRawArrayWithSize(buffer, count),
24
"error", asRGError(error), NULL);
26
CLEANUP(g_error_free, error);;
28
error("g_input_stream_read exists only in gio >= 2.16.0");
35
S_g_input_stream_read_all(USER_OBJECT_ s_object, USER_OBJECT_ s_count,
36
USER_OBJECT_ s_cancellable)
38
USER_OBJECT_ _result = NULL_USER_OBJECT;
39
#if GIO_CHECK_VERSION(2, 16, 0)
40
GInputStream* object = G_INPUT_STREAM(getPtrValue(s_object));
41
gsize count = ((gsize)asCNumeric(s_count));
42
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
43
G_CANCELLABLE(getPtrValue(s_cancellable));
46
guchar* buffer = R_alloc(count, sizeof(guchar));
50
ans = g_input_stream_read_all(object, buffer, count, &bytes_read,
53
_result = asRLogical(ans);
55
_result = retByVal(_result, "buffer", asRRawArrayWithSize(buffer, count),
56
"bytes.read", asRNumeric(bytes_read),
57
"error", asRGError(error), NULL);
60
CLEANUP(g_error_free, error);;
62
error("g_input_stream_read_all exists only in gio >= 2.16.0");
68
/* Strategy: allocate the buffer, stick it with user data. Have the
69
readFinish() call get the user data from the async result, return
70
the buffer instead of only the length (and free the buffer). */
73
S_g_input_stream_read_async(USER_OBJECT_ s_object,
74
USER_OBJECT_ s_count, USER_OBJECT_ s_io_priority,
75
USER_OBJECT_ s_cancellable, USER_OBJECT_ s_callback,
76
USER_OBJECT_ s_user_data)
78
USER_OBJECT_ _result = NULL_USER_OBJECT;
79
#if GIO_CHECK_VERSION(2, 16, 0)
80
GAsyncReadyCallback callback = ((GAsyncReadyCallback)S_GAsyncReadyCallback);
81
R_CallbackData* user_data = R_createCBData(s_callback, s_user_data);
82
GInputStream* object = G_INPUT_STREAM(getPtrValue(s_object));
83
gsize count = ((gsize)asCNumeric(s_count));
84
guchar* buffer = g_new(guchar, count);
85
int io_priority = ((int)asCInteger(s_io_priority));
86
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
87
G_CANCELLABLE(getPtrValue(s_cancellable));
89
user_data->extra = buffer;
91
g_input_stream_read_async(object, buffer, count, io_priority, cancellable,
95
error("g_input_stream_read_async exists only in gio >= 2.16.0");
101
S_g_input_stream_read_finish(USER_OBJECT_ s_object, USER_OBJECT_ s_result)
103
USER_OBJECT_ _result = NULL_USER_OBJECT;
104
#if GIO_CHECK_VERSION(2, 16, 0)
105
GInputStream* object = G_INPUT_STREAM(getPtrValue(s_object));
106
GAsyncResult* result = G_ASYNC_RESULT(getPtrValue(s_result));
107
R_CallbackData* user_data =
108
(R_CallbackData *)g_async_result_get_user_data(result);
111
GError* error = NULL;
112
guchar *buffer = (guchar *)user_data->extra;
114
ans = g_input_stream_read_finish(object, result, &error);
117
_result = asRRawArrayWithSize(buffer, ans);
119
_result = retByVal(_result, "error", asRGError(error), NULL);
120
CLEANUP(g_error_free, error);;
122
error("g_input_stream_read_finish exists only in gio >= 2.16.0");
129
/* Same as that generated, we use sprintf on the R side */
131
S_g_simple_async_result_new_error(USER_OBJECT_ s_source_object,
132
USER_OBJECT_ s_callback,
133
USER_OBJECT_ s_user_data,
134
USER_OBJECT_ s_domain, USER_OBJECT_ s_code,
135
USER_OBJECT_ s_format)
137
USER_OBJECT_ _result = NULL_USER_OBJECT;
138
#if GIO_CHECK_VERSION(2, 16, 0)
139
GAsyncReadyCallback callback = ((GAsyncReadyCallback)S_GAsyncReadyCallback);
140
R_CallbackData* user_data = R_createCBData(s_callback, s_user_data);
141
GObject* source_object = G_OBJECT(getPtrValue(s_source_object));
142
GQuark domain = ((GQuark)asCNumeric(s_domain));
143
gint code = ((gint)asCInteger(s_code));
144
const char* format = ((const char*)asCString(s_format));
146
GSimpleAsyncResult* ans;
148
ans = g_simple_async_result_new_error(source_object, callback, user_data,
149
domain, code, "%s", format);
151
_result = toRPointerWithRef(ans, "GSimpleAsyncResult");
153
error("g_simple_async_result_new_error exists only in gio >= 2.16.0");
159
S_g_simple_async_result_set_error(USER_OBJECT_ s_object, USER_OBJECT_ s_domain,
160
USER_OBJECT_ s_code, USER_OBJECT_ s_format)
162
USER_OBJECT_ _result = NULL_USER_OBJECT;
163
#if GIO_CHECK_VERSION(2, 16, 0)
164
GSimpleAsyncResult* object = G_SIMPLE_ASYNC_RESULT(getPtrValue(s_object));
165
GQuark domain = ((GQuark)asCNumeric(s_domain));
166
gint code = ((gint)asCInteger(s_code));
167
const char* format = ((const char*)asCString(s_format));
170
g_simple_async_result_set_error(object, domain, code, "%s", format);
173
error("g_simple_async_result_set_error exists only in gio >= 2.16.0");
179
S_g_simple_async_report_error_in_idle(USER_OBJECT_ s_object,
180
USER_OBJECT_ s_callback,
181
USER_OBJECT_ s_user_data,
182
USER_OBJECT_ s_domain,
184
USER_OBJECT_ s_format)
186
USER_OBJECT_ _result = NULL_USER_OBJECT;
187
#if GIO_CHECK_VERSION(2, 16, 0)
188
GAsyncReadyCallback callback = ((GAsyncReadyCallback)S_GAsyncReadyCallback);
189
R_CallbackData* user_data = R_createCBData(s_callback, s_user_data);
190
GObject* object = G_OBJECT(getPtrValue(s_object));
191
GQuark domain = ((GQuark)asCNumeric(s_domain));
192
gint code = ((gint)asCInteger(s_code));
193
const char* format = ((const char*)asCString(s_format));
196
g_simple_async_report_error_in_idle(object, callback, user_data, domain, code,
200
error("g_simple_async_report_error_in_idle exists only in gio >= 2.16.0");
206
/* Handle properties */
209
S_g_async_initable_new_async(USER_OBJECT_ s_object_type,
210
USER_OBJECT_ s_io_priority,
211
USER_OBJECT_ s_cancellable,
212
USER_OBJECT_ s_callback, USER_OBJECT_ s_user_data,
213
USER_OBJECT_ s_properties)
215
USER_OBJECT_ _result = NULL_USER_OBJECT;
216
#if GIO_CHECK_VERSION(2, 22, 0)
217
GAsyncReadyCallback callback = ((GAsyncReadyCallback)S_GAsyncReadyCallback);
218
R_CallbackData* user_data = R_createCBData(s_callback, s_user_data);
219
GType object_type = ((GType)asCNumeric(s_object_type));
220
GObjectClass *object_class = G_OBJECT_CLASS(g_type_class_ref(object_type));
221
int io_priority = ((int)asCInteger(s_io_priority));
222
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
223
G_CANCELLABLE(getPtrValue(s_cancellable));
225
int i, n = GET_LENGTH(s_properties);
226
GParameter *params = g_new0(GParameter, n);
227
USER_OBJECT_ propNames = GET_NAMES(s_properties);
229
for(i = 0; i < n; i++) {
230
params[i].name = asCString(STRING_ELT(propNames, i));
231
R_setGValueForProperty(¶ms[i].value, object_class, params[i].name,
232
VECTOR_ELT(s_properties, i));
235
g_async_initable_newv_async(object_type, n, params, io_priority, cancellable,
236
callback, user_data);
241
error("g_async_initable_new_async exists only in gio >= 2.22.0");
247
S_g_initable_new(USER_OBJECT_ s_object_type, USER_OBJECT_ s_cancellable,
248
USER_OBJECT_ s_properties)
250
USER_OBJECT_ _result = NULL_USER_OBJECT;
251
#if GIO_CHECK_VERSION(2, 22, 0)
252
GType object_type = ((GType)asCNumeric(s_object_type));
253
GObjectClass *object_class = G_OBJECT_CLASS(g_type_class_ref(object_type));
254
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
255
G_CANCELLABLE(getPtrValue(s_cancellable));
258
GError* error = NULL;
260
int i, n = GET_LENGTH(s_properties);
261
GParameter *params = g_new0(GParameter, n);
262
USER_OBJECT_ propNames = GET_NAMES(s_properties);
264
for(i = 0; i < n; i++) {
265
params[i].name = asCString(STRING_ELT(propNames, i));
266
R_setGValueForProperty(¶ms[i].value, object_class, params[i].name,
267
VECTOR_ELT(s_properties, i));
270
ans = g_initable_newv(object_type, n, params, cancellable, &error);
274
_result = retByVal(_result, "error", asRGError(error), NULL);
275
CLEANUP(g_error_free, error);;
277
error("g_initable_new exists only in gio >= 2.22.0");
283
/* Buffer preallocation */
286
S_g_socket_receive(USER_OBJECT_ s_object, USER_OBJECT_ s_size,
287
USER_OBJECT_ s_cancellable)
289
USER_OBJECT_ _result = NULL_USER_OBJECT;
290
#if GIO_CHECK_VERSION(2, 22, 0)
291
GSocket* object = G_SOCKET(getPtrValue(s_object));
292
gsize size = ((gsize)asCNumeric(s_size));
293
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
294
G_CANCELLABLE(getPtrValue(s_cancellable));
297
gchar* buffer = R_alloc(size, sizeof(guchar));
298
GError* error = NULL;
300
ans = g_socket_receive(object, buffer, size, cancellable, &error);
302
_result = asRInteger(ans);
304
_result = retByVal(_result, "buffer", asRRawArrayWithSize(buffer, size),
305
"error", asRGError(error), NULL);
307
CLEANUP(g_error_free, error);;
309
error("g_socket_receive exists only in gio >= 2.22.0");
316
S_g_socket_receive_from(USER_OBJECT_ s_object, USER_OBJECT_ s_size,
317
USER_OBJECT_ s_cancellable)
319
USER_OBJECT_ _result = NULL_USER_OBJECT;
320
#if GIO_CHECK_VERSION(2, 22, 0)
321
GSocket* object = G_SOCKET(getPtrValue(s_object));
322
gsize size = ((gsize)asCNumeric(s_size));
323
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
324
G_CANCELLABLE(getPtrValue(s_cancellable));
327
GSocketAddress* address = NULL;
328
guchar *buffer = R_alloc(size, sizeof(guchar));
329
GError* error = NULL;
331
ans = g_socket_receive_from(object, &address, buffer, size, cancellable,
334
_result = asRInteger(ans);
336
_result = retByVal(_result,
337
"address", toRPointerWithFinalizer(address, "GSocketAddress", (RPointerFinalizer) g_object_unref),
338
"buffer", asRRawArrayWithSize(buffer, size),
339
"error", asRGError(error),
343
CLEANUP(g_error_free, error);;
345
error("g_socket_receive_from exists only in gio >= 2.22.0");
351
/* These allow multiple i/o vectors, but is this optimization worth it
352
in R? Probably not, so we just create a single vector. Their
353
utility is in socket control messages, whatever those are. */
356
S_g_socket_receive_message(USER_OBJECT_ s_object, USER_OBJECT_ s_num_vectors,
357
USER_OBJECT_ s_flags, USER_OBJECT_ s_cancellable)
359
USER_OBJECT_ _result = NULL_USER_OBJECT;
360
#if GIO_CHECK_VERSION(2, 22, 0)
361
GSocket* object = G_SOCKET(getPtrValue(s_object));
362
gint num_vectors = asCInteger(s_num_vectors);
363
gint flags = asCInteger(s_flags);
364
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
365
G_CANCELLABLE(getPtrValue(s_cancellable));
368
GSocketAddress* address = NULL;
369
guchar *buffer = R_alloc(num_vectors, sizeof(guchar));
370
GInputVector vectors[] = {
371
{ buffer, num_vectors }
373
GSocketControlMessage** messages = NULL;
375
GError* error = NULL;
377
ans = g_socket_receive_message(object, &address, vectors, num_vectors,
378
&messages, &num_messages, &flags, cancellable,
381
_result = asRInteger(ans);
383
_result = retByVal(_result,
384
"address", toRPointerWithFinalizer(address, "GSocketAddress", (RPointerFinalizer) g_object_unref),
385
"vectors", toRPointer(vectors, "GInputVector"),
386
"messages", toRPointerWithFinalizerArrayWithSize(messages, "GSocketControlMessage", (RPointerFinalizer) g_object_unref, num_messages),
387
"num.messages", asRInteger(num_messages),
388
"flags", asRInteger(flags),
389
"error", asRGError(error), NULL);
392
CLEANUP(g_free, messages);;
394
CLEANUP(g_error_free, error);;
396
error("g_socket_receive_message exists only in gio >= 2.22.0");
403
S_g_socket_send_message(USER_OBJECT_ s_object, USER_OBJECT_ s_address,
404
USER_OBJECT_ s_vectors, USER_OBJECT_ s_messages,
405
USER_OBJECT_ s_flags, USER_OBJECT_ s_cancellable)
407
USER_OBJECT_ _result = NULL_USER_OBJECT;
408
#if GIO_CHECK_VERSION(2, 22, 0)
409
GSocket* object = G_SOCKET(getPtrValue(s_object));
410
GSocketAddress* address = G_SOCKET_ADDRESS(getPtrValue(s_address));
411
GOutputVector vectors[] = {
412
{ RAW(s_vectors), GET_LENGTH(s_vectors) }
414
gint num_vectors = ((gint)GET_LENGTH(s_vectors));
415
GSocketControlMessage** messages = s_messages == NULL_USER_OBJECT ? NULL : ((GSocketControlMessage**)asCArray(s_messages, GSocketControlMessage*, getPtrValue));
416
gint num_messages = ((gint)GET_LENGTH(s_messages));
417
gint flags = ((gint)asCInteger(s_flags));
418
GCancellable* cancellable = GET_LENGTH(s_cancellable) == 0 ? NULL :
419
G_CANCELLABLE(getPtrValue(s_cancellable));
422
GError* error = NULL;
424
ans = g_socket_send_message(object, address, vectors, num_vectors, messages,
425
num_messages, flags, cancellable, &error);
427
_result = asRInteger(ans);
429
_result = retByVal(_result, "error", asRGError(error), NULL);
430
CLEANUP(g_error_free, error);;
432
error("g_socket_send_message exists only in gio >= 2.22.0");
438
/* Special memory management of the buffer */
440
S_g_memory_output_stream_new(USER_OBJECT_ s_len)
442
USER_OBJECT_ _result = NULL_USER_OBJECT;
443
#if GIO_CHECK_VERSION(2, 16, 0)
444
gsize len = asCInteger(s_len);
445
gpointer data = g_new(guchar, len);
449
ans = g_memory_output_stream_new(data, len, g_realloc, g_free);
451
_result = toRPointerWithFinalizer(ans, "GOutputStream", (RPointerFinalizer) g_object_unref);
453
error("g_memory_output_stream_new exists only in gio >= 2.16.0");