+static surf_action_t storage_action_ls(void *storage, const char* path)
+{
+ surf_action_t action = storage_action_execute(storage,0, LS);
+ action->ls_dict = NULL;
+ xbt_dict_t ls_dict = xbt_dict_new();
+
+ char* key;
+ surf_stat_t data = NULL;
+ xbt_dict_cursor_t cursor = NULL;
+
+ xbt_dynar_t dyn = NULL;
+ char* file = NULL;
+
+ // foreach file int the storage
+ xbt_dict_foreach(((storage_t)storage)->content,cursor,key,data){
+ // Search if file start with the prefix 'path'
+ if(xbt_str_start_with(key,path)){
+ file = &key[strlen(path)];
+
+ // Split file with '/'
+ dyn = xbt_str_split(file,"/");
+ file = xbt_dynar_get_as(dyn,0,char*);
+
+ // file
+ if(xbt_dynar_length(dyn) == 1){
+ xbt_dict_set(ls_dict,file,&(data->stat),NULL);
+ }
+ // Directory
+ else
+ {
+ // if directory does not exist yet in dict
+ if(!xbt_dict_get_or_null(ls_dict,file))
+ xbt_dict_set(ls_dict,file,NULL,NULL);
+ }
+ xbt_dynar_free(&dyn);
+ }
+ }
+
+ action->ls_dict = ls_dict;
+ return action;
+}
+
+static surf_action_t storage_action_unlink(void *storage, surf_file_t stream)
+{
+ surf_action_t action = storage_action_execute(storage,0, UNLINK);
+
+ // Add memory to storage
+ ((storage_t)storage)->used_size -= stream->content->stat.size;
+
+ // Remove the file from storage
+ xbt_dict_t content_dict = ((storage_t)storage)->content;
+ xbt_dict_remove(content_dict,stream->name);
+
+ free(stream->name);
+ stream->content = NULL;
+ xbt_free(stream);
+
+ return action;
+}
+
+static surf_action_t storage_action_open(void *storage, const char* mount, const char* path, const char* mode)