Exposed the mutli-overlay functionality in the ruby bindings.
Overlays can be added to individual guests (which overlays exactly the supplied directory) or to all guests (which overlays a subdirectory with the guest's name to each guest). The template functionality is provided as before.
This commit is contained in:
+65
-3
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2008 Tobias Brunner
|
* Copyright (C) 2008-2009 Tobias Brunner
|
||||||
* Copyright (C) 2008 Martin Willi
|
* Copyright (C) 2008 Martin Willi
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@@ -85,6 +85,38 @@ static void sigchld_handler(int signal, siginfo_t *info, void* ptr)
|
|||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global Dumm bindings
|
||||||
|
*/
|
||||||
|
static VALUE dumm_add_overlay(VALUE class, VALUE dir)
|
||||||
|
{
|
||||||
|
if (!dumm->add_overlay(dumm, StringValuePtr(dir)))
|
||||||
|
{
|
||||||
|
rb_raise(rb_eRuntimeError, "loading overlay failed");
|
||||||
|
}
|
||||||
|
return class;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE dumm_del_overlay(VALUE class, VALUE dir)
|
||||||
|
{
|
||||||
|
return dumm->del_overlay(dumm, StringValuePtr(dir)) ? Qtrue : Qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE dumm_pop_overlay(VALUE class)
|
||||||
|
{
|
||||||
|
return dumm->pop_overlay(dumm) ? Qtrue : Qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dumm_init()
|
||||||
|
{
|
||||||
|
rbm_dumm = rb_define_module("Dumm");
|
||||||
|
|
||||||
|
rb_define_module_function(rbm_dumm, "add_overlay", dumm_add_overlay, 1);
|
||||||
|
rb_define_module_function(rbm_dumm, "del_overlay", dumm_del_overlay, 1);
|
||||||
|
rb_define_module_function(rbm_dumm, "pop_overlay", dumm_pop_overlay, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Guest bindings
|
* Guest bindings
|
||||||
*/
|
*/
|
||||||
@@ -330,6 +362,34 @@ static VALUE guest_delete(VALUE self)
|
|||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE guest_add_overlay(VALUE self, VALUE dir)
|
||||||
|
{
|
||||||
|
guest_t *guest;
|
||||||
|
|
||||||
|
Data_Get_Struct(self, guest_t, guest);
|
||||||
|
if (!guest->add_overlay(guest, StringValuePtr(dir)))
|
||||||
|
{
|
||||||
|
rb_raise(rb_eRuntimeError, "loading overlay failed");
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE guest_del_overlay(VALUE self, VALUE dir)
|
||||||
|
{
|
||||||
|
guest_t *guest;
|
||||||
|
|
||||||
|
Data_Get_Struct(self, guest_t, guest);
|
||||||
|
return guest->del_overlay(guest, StringValuePtr(dir)) ? Qtrue : Qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE guest_pop_overlay(VALUE self)
|
||||||
|
{
|
||||||
|
guest_t *guest;
|
||||||
|
|
||||||
|
Data_Get_Struct(self, guest_t, guest);
|
||||||
|
return guest->pop_overlay(guest) ? Qtrue : Qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
static void guest_init()
|
static void guest_init()
|
||||||
{
|
{
|
||||||
rbc_guest = rb_define_class_under(rbm_dumm , "Guest", rb_cObject);
|
rbc_guest = rb_define_class_under(rbm_dumm , "Guest", rb_cObject);
|
||||||
@@ -354,6 +414,9 @@ static void guest_init()
|
|||||||
rb_define_method(rbc_guest, "include?", guest_find_iface, 1);
|
rb_define_method(rbc_guest, "include?", guest_find_iface, 1);
|
||||||
rb_define_method(rbc_guest, "iface?", guest_find_iface, 1);
|
rb_define_method(rbc_guest, "iface?", guest_find_iface, 1);
|
||||||
rb_define_method(rbc_guest, "delete", guest_delete, 0);
|
rb_define_method(rbc_guest, "delete", guest_delete, 0);
|
||||||
|
rb_define_method(rbc_guest, "add_overlay", guest_add_overlay, 1);
|
||||||
|
rb_define_method(rbc_guest, "del_overlay", guest_del_overlay, 1);
|
||||||
|
rb_define_method(rbc_guest, "pop_overlay", guest_pop_overlay, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -711,8 +774,7 @@ void Init_dumm()
|
|||||||
|
|
||||||
dumm = dumm_create(NULL);
|
dumm = dumm_create(NULL);
|
||||||
|
|
||||||
rbm_dumm = rb_define_module("Dumm");
|
dumm_init();
|
||||||
|
|
||||||
guest_init();
|
guest_init();
|
||||||
bridge_init();
|
bridge_init();
|
||||||
iface_init();
|
iface_init();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
=begin
|
=begin
|
||||||
Copyright (C) 2008 Tobias Brunner
|
Copyright (C) 2008-2009 Tobias Brunner
|
||||||
Hochschule fuer Technik Rapperswil
|
Hochschule fuer Technik Rapperswil
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -38,11 +38,11 @@ module Dumm
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# unload templates, reset all guests and delete bridges
|
# unload template/overlays, reset all guests and delete bridges
|
||||||
def reset
|
def reset
|
||||||
Template.unload
|
Template.unload
|
||||||
Guest.each { |guest|
|
Guest.each { |guest|
|
||||||
guest.reset if guest.running?
|
guest.reset
|
||||||
}
|
}
|
||||||
Bridge.each { |bridge|
|
Bridge.each { |bridge|
|
||||||
bridge.delete
|
bridge.delete
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
=begin
|
=begin
|
||||||
Copyright (C) 2008 Tobias Brunner
|
Copyright (C) 2008-2009 Tobias Brunner
|
||||||
Hochschule fuer Technik Rapperswil
|
Hochschule fuer Technik Rapperswil
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -33,8 +33,9 @@ module Dumm
|
|||||||
self[id]
|
self[id]
|
||||||
end
|
end
|
||||||
|
|
||||||
# delete all interfaces
|
# remove all overlays, delete all interfaces
|
||||||
def reset
|
def reset
|
||||||
|
while pop_overlay; end
|
||||||
each {|i|
|
each {|i|
|
||||||
i.delete
|
i.delete
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user