Call
guestfs_create[http://libguestfs.org/guestfs.3.html#guestfs_create]
to create a new libguestfs handle. The handle is represented in Ruby as an
instance of the Guestfs::Guestfs class.
static VALUE
ruby_guestfs_create (int argc, VALUE *argv, VALUE m)
{
guestfs_h *g;
if (argc > 1)
rb_raise (rb_eArgError, "expecting 0 or 1 arguments");
volatile VALUE optargsv = argc == 1 ? argv[0] : rb_hash_new ();
Check_Type (optargsv, T_HASH);
unsigned flags = 0;
volatile VALUE v;
v = rb_hash_lookup (optargsv, ID2SYM (rb_intern ("environment")));
if (v != Qnil && !RTEST (v))
flags |= GUESTFS_CREATE_NO_ENVIRONMENT;
v = rb_hash_lookup (optargsv, ID2SYM (rb_intern ("close_on_exit")));
if (v != Qnil && !RTEST (v))
flags |= GUESTFS_CREATE_NO_CLOSE_ON_EXIT;
g = guestfs_create_flags (flags);
if (!g)
rb_raise (e_Error, "failed to create guestfs handle");
/* Don't print error messages to stderr by default. */
guestfs_set_error_handler (g, NULL, NULL);
/* Wrap it, and make sure the close function is called when the
* handle goes away.
*/
return Data_Wrap_Struct (c_guestfs, NULL, ruby_guestfs_free, g);
}
Call
guestfs_event_to_string[http://libguestfs.org/guestfs.3.html#guestfs_event_to_string]
to convert an event or event bitmask into a printable string.
static VALUE
ruby_event_to_string (VALUE modulev, VALUE eventsv)
{
uint64_t events;
char *str;
events = NUM2ULL (eventsv);
str = guestfs_event_to_string (events);
if (str == NULL)
rb_raise (e_Error, "%s", strerror (errno));
volatile VALUE rv = rb_str_new2 (str);
free (str);
return rv;
}