diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-01-29 19:16:37 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-01-29 19:16:37 (GMT) |
commit | 8cbc874ef01f3d161d4ca253167d8f80e689c814 (patch) | |
tree | 2849e7f5af3915a94d8fb0b766f6b7c8ad1817e7 /src/analysis/contents/file.c | |
parent | 0507bdb3b56083c8e8b011fc3d4c16fed2700340 (diff) |
Do not allocate memory for file mmap()'ed contents.
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: |