From e342f6395a0c18edfd89f6fc4540adf3c829e5e6 Mon Sep 17 00:00:00 2001 From: suter Date: Tue, 8 Oct 2013 15:03:11 +0200 Subject: [PATCH] use pointers on sg_storage_size_t in the dict instead of crappy void* and &size to manage contents --- src/msg/msg_io.c | 7 +++++-- src/surf/storage.c | 38 +++++++++++++++++++++++++------------- src/surf/workstation.c | 4 +++- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/msg/msg_io.c b/src/msg/msg_io.c index 31aa42031d..08601f3f74 100644 --- a/src/msg/msg_io.c +++ b/src/msg/msg_io.c @@ -21,12 +21,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg, /********************************* File **************************************/ void __MSG_file_get_info(msg_file_t fd){ xbt_dynar_t info = simcall_file_get_info(fd->simdata->smx_file); + sg_storage_size_t *psize; + fd->info->content_type = xbt_dynar_pop_as(info, char *); fd->info->storage_type = xbt_dynar_pop_as(info, char *); fd->info->storageId = xbt_dynar_pop_as(info, char *); fd->info->mount_point = xbt_dynar_pop_as(info, char *); - fd->info->size = xbt_dynar_pop_as(info, sg_storage_size_t); - + psize = xbt_dynar_pop_as(info, sg_storage_size_t*); + fd->info->size = *psize; + xbt_free(psize); xbt_dynar_free_container(&info); } diff --git a/src/surf/storage.c b/src/surf/storage.c index e492a9c12b..8e549ad0e8 100644 --- a/src/surf/storage.c +++ b/src/surf/storage.c @@ -44,7 +44,7 @@ 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_homogeneous(NULL); + xbt_dict_t ls_dict = xbt_dict_new_homogeneous(xbt_free); char* key; sg_storage_size_t size = 0; @@ -65,7 +65,9 @@ static surf_action_t storage_action_ls(void *storage, const char* path) // file if(xbt_dynar_length(dyn) == 1){ - xbt_dict_set(ls_dict,file,&size,NULL); + sg_storage_size_t *psize = xbt_new(sg_storage_size_t,1); + *psize=size; + xbt_dict_set(ls_dict,file,psize,NULL); } // Directory else @@ -87,12 +89,16 @@ static surf_action_t storage_action_open(void *storage, const char* mount, { XBT_DEBUG("\tOpen file '%s'",path); xbt_dict_t content_dict = ((storage_t)storage)->content; - sg_storage_size_t size = (sg_storage_size_t) xbt_dict_get_or_null(content_dict,path); - + sg_storage_size_t size, *psize; + psize = (sg_storage_size_t*) xbt_dict_get_or_null(content_dict, path); + if (psize) + size = *psize; + else { // if file does not exist create an empty file - if(!size){ - size = 0; - xbt_dict_set(content_dict,path,&size,NULL); + psize = xbt_new(sg_storage_size_t,1); + size = 0; + *psize = size; + xbt_dict_set(content_dict,path,psize,NULL); XBT_DEBUG("File '%s' was not found, file created.",path); } surf_file_t file = xbt_new0(s_surf_file_t,1); @@ -207,9 +213,10 @@ static xbt_dict_t storage_get_content(void *storage) xbt_dict_t content_dict = xbt_dict_new_homogeneous(NULL); xbt_dict_cursor_t cursor = NULL; char *file; - sg_storage_size_t *size; - xbt_dict_foreach(((storage_t)st)->content, cursor, file, size){ - xbt_dict_set(content_dict,file,(void*)size,NULL); + sg_storage_size_t *psize; + + xbt_dict_foreach(((storage_t)st)->content, cursor, file, psize){ + xbt_dict_set(content_dict,file,psize,NULL); } return content_dict; } @@ -297,8 +304,11 @@ static void storage_update_actions_state(double now, double delta) ((storage_t)(action->storage))->used_size += incr; // disk usage ((surf_action_t)action)->file->size += incr; // file size + sg_storage_size_t *psize = xbt_new(sg_storage_size_t,1); + *psize = ((surf_action_t)action)->file->size; + xbt_dict_t content_dict = ((storage_t)(action->storage))->content; - xbt_dict_set(content_dict,((surf_action_t)action)->file->name,(void*)(((surf_action_t)action)->file->size),NULL); + xbt_dict_set(content_dict,((surf_action_t)action)->file->name,psize,NULL); } double_update(&(GENERIC_ACTION(action).remains), @@ -565,7 +575,7 @@ static xbt_dict_t parse_storage_content(char *filename, sg_storage_size_t *used_ if ((!filename) || (strcmp(filename, "") == 0)) return NULL; - xbt_dict_t parse_content = xbt_dict_new_homogeneous(NULL); + xbt_dict_t parse_content = xbt_dict_new_homogeneous(xbt_free); FILE *file = NULL; file = surf_fopen(filename, "r"); @@ -582,7 +592,9 @@ static xbt_dict_t parse_storage_content(char *filename, sg_storage_size_t *used_ if (read){ if (sscanf(line,"%s %" SCNu64, path, &size) == 2) { *used_size += size; - xbt_dict_set(parse_content,path,(void*) size,NULL); + sg_storage_size_t *psize = xbt_new(sg_storage_size_t, 1); + *psize = size; + xbt_dict_set(parse_content,path,psize,NULL); } else { xbt_die("Be sure of passing a good format for content file.\n"); } diff --git a/src/surf/workstation.c b/src/surf/workstation.c index bbd96645e6..c2b83964e8 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -462,8 +462,10 @@ static sg_storage_size_t ws_file_get_size(void *workstation, surf_file_t fd) static xbt_dynar_t ws_file_get_info(void *workstation, surf_file_t fd) { storage_t st = find_storage_on_mount_list(workstation, fd->mount); + sg_storage_size_t *psize = xbt_new(sg_storage_size_t, 1); + *psize = fd->size; xbt_dynar_t info = xbt_dynar_new(sizeof(void*), NULL); - xbt_dynar_push_as(info, void *, (void*)fd->size); + xbt_dynar_push_as(info, sg_storage_size_t *, psize); xbt_dynar_push_as(info, void *, fd->mount); xbt_dynar_push_as(info, void *, st->generic_resource.name); xbt_dynar_push_as(info, void *, st->type_id); -- 2.20.1