diff options
Diffstat (limited to 'src/analysis/contents/file.c')
-rw-r--r-- | src/analysis/contents/file.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/analysis/contents/file.c b/src/analysis/contents/file.c index 4f102d8..7497667 100644 --- a/src/analysis/contents/file.c +++ b/src/analysis/contents/file.c @@ -49,6 +49,7 @@ struct _GFileContent GMemoryContent parent; /* A laisser en premier */ char *filename; /* Fichier chargé en mémoire */ + int fd; /* Flux ouvert en lectureu */ }; @@ -136,6 +137,7 @@ static void g_file_content_class_init(GFileContentClass *klass) static void g_file_content_init(GFileContent *content) { content->filename = NULL; + content->fd = -1; } @@ -193,8 +195,19 @@ static void g_file_content_dispose(GFileContent *content) static void g_file_content_finalize(GFileContent *content) { + GMemoryContent *base; /* Structure parente */ + free(content->filename); + if (content->fd != -1) + { + base = G_MEMORY_CONTENT(content); + munmap(base->data, base->length); + + close(content->fd); + + } + G_OBJECT_CLASS(g_file_content_parent_class)->finalize(G_OBJECT(content)); } @@ -254,14 +267,9 @@ GBinContent *g_file_content_new(const char *filename) base = G_MEMORY_CONTENT(result); - base->data = malloc(info.st_size); - memcpy(base->data, content, info.st_size); - + base->data = content; base->length = info.st_size; - munmap(content, info.st_size); - close(fd); - return G_BIN_CONTENT(result); file_error: |