+
+static xbt_dict_t ws_get_properties(const void *ws)
+{
+ return surf_resource_properties(surf_cpu_resource_priv(ws));
+}
+
+static storage_t find_storage_on_mount_list(void *workstation,const char* storage)
+{
+ storage_t st = NULL;
+ s_mount_t mnt;
+ unsigned int cursor;
+ workstation_CLM03_t ws = (workstation_CLM03_t) surf_workstation_resource_priv(workstation);
+ xbt_dynar_t storage_list = ws->storage;
+
+ XBT_DEBUG("Search for storage name '%s' on '%s'",storage,ws->generic_resource.name);
+ xbt_dynar_foreach(storage_list,cursor,mnt)
+ {
+ XBT_DEBUG("See '%s'",mnt.name);
+ if(!strcmp(storage,mnt.name)){
+ st = mnt.id;
+ break;
+ }
+ }
+ if(!st) xbt_die("Can't find mount '%s' for '%s'",storage,ws->generic_resource.name);
+ return st;
+}
+
+static surf_action_t ws_action_open(void *workstation, const char* mount, const char* path, const char* mode)
+{
+ storage_t st = find_storage_on_mount_list(workstation, mount);
+ XBT_DEBUG("OPEN on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.open(st, mount, path, mode);
+}
+
+static surf_action_t ws_action_close(void *workstation, surf_file_t fp)
+{
+ storage_t st = find_storage_on_mount_list(workstation, fp->storage);
+ XBT_DEBUG("CLOSE on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.close(st, fp);
+}
+
+static surf_action_t ws_action_read(void *workstation, void* ptr, size_t size, size_t nmemb, surf_file_t stream)
+{
+ storage_t st = find_storage_on_mount_list(workstation, stream->storage);
+ XBT_DEBUG("READ on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.read(st, ptr, (double)size, nmemb, stream);
+}
+
+static surf_action_t ws_action_write(void *workstation, const void* ptr, size_t size, size_t nmemb, surf_file_t stream)
+{
+ storage_t st = find_storage_on_mount_list(workstation, stream->storage);
+ XBT_DEBUG("WRITE on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.write(st, ptr, size, nmemb, stream);
+}
+
+static surf_action_t ws_action_stat(void *workstation, surf_file_t stream)
+{
+ storage_t st = find_storage_on_mount_list(workstation, stream->storage);
+ XBT_DEBUG("STAT on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.stat(st, stream);
+}
+
+static surf_action_t ws_action_unlink(void *workstation, surf_file_t stream)
+{
+ storage_t st = find_storage_on_mount_list(workstation, stream->storage);
+ XBT_DEBUG("UNLINK on disk '%s'",st->generic_resource.name);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.unlink(st, stream);
+}
+
+static surf_action_t ws_action_ls(void *workstation, const char* mount, const char *path)
+{
+ XBT_DEBUG("LS on mount '%s' and file '%s'",mount, path);
+ storage_t st = find_storage_on_mount_list(workstation, mount);
+ surf_model_t model = st->generic_resource.model;
+ return model->extension.storage.ls(st, path);