checked in first draft of "Dynamic Uml Mesh Modeler"

This commit is contained in:
Martin Willi
2007-07-24 14:22:56 +00:00
parent c019260e01
commit 5c7da9d402
6 changed files with 618 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
#include <sys/stat.h>
#include <debug.h>
#include "dumm.h"
typedef struct private_dumm_t private_dumm_t;
struct private_dumm_t {
dumm_t public;
linked_list_t *guests;
};
static guest_t* start_guest(private_dumm_t *this, char *name, char *kernel,
char *master, int mem)
{
guest_t *guest;
guest = guest_create(name, kernel, master, mem);
if (guest)
{
if (guest->start(guest))
{
this->guests->insert_last(this->guests, guest);
return guest;
}
guest->destroy(guest);
}
return NULL;
}
static iterator_t* create_guest_iterator(private_dumm_t *this)
{
return this->guests->create_iterator(this->guests, TRUE);
}
static void destroy(private_dumm_t *this)
{
this->guests->destroy_offset(this->guests, offsetof(guest_t, destroy));
free(this);
}
/**
* check for a directory, create if it does not exist
*/
static bool makedir(char *dir)
{
struct stat st;
if (stat(dir, &st) != 0)
{
return mkdir(dir, S_IRWXU) == 0;
}
return S_ISDIR(st.st_mode);
}
dumm_t *dumm_create()
{
private_dumm_t *this = malloc_thing(private_dumm_t);
this->public.start_guest = (void*)start_guest;
this->public.create_guest_iterator = (void*)create_guest_iterator;
this->public.destroy = (void*)destroy;
if (!makedir(HOST_DIR) || !makedir(MOUNT_DIR) || !makedir(RUN_DIR))
{
free(this);
return NULL;
}
this->guests = linked_list_create();
return &this->public;
}