diff options
author | Dmitri Pal <dpal@redhat.com> | 2012-03-18 14:13:00 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-04-05 11:20:08 -0700 |
commit | 31fb35c3fc8ac631b39fcad5c2cba7a7e7c97fa0 (patch) | |
tree | 14ed726d500017e4b689110783eb1d5176e1a59b /ini/ini_fileobj.c | |
parent | b2784fd8bb14123deb03692932e1a0af5819aabe (diff) | |
download | ding-libs-31fb35c3fc8ac631b39fcad5c2cba7a7e7c97fa0.tar.gz ding-libs-31fb35c3fc8ac631b39fcad5c2cba7a7e7c97fa0.tar.xz ding-libs-31fb35c3fc8ac631b39fcad5c2cba7a7e7c97fa0.zip |
Separate close and destroy
Allow closing file without destroying the context.
Diffstat (limited to 'ini/ini_fileobj.c')
-rw-r--r-- | ini/ini_fileobj.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/ini/ini_fileobj.c b/ini/ini_fileobj.c index 7bc599b..09c35e3 100644 --- a/ini/ini_fileobj.c +++ b/ini/ini_fileobj.c @@ -75,12 +75,28 @@ static int valid_collision_flags(uint32_t collision_flags) return 1; } -/* Close file context and destroy the object */ + +/* Close file but not destroy the object */ void ini_config_file_close(struct ini_cfgfile *file_ctx) { TRACE_FLOW_ENTRY(); if(file_ctx) { + if(file_ctx->file) { + fclose(file_ctx->file); + file_ctx->file = NULL; + } + } + + TRACE_FLOW_EXIT(); +} + +/* Close file context and destroy the object */ +void ini_config_file_destroy(struct ini_cfgfile *file_ctx) +{ + TRACE_FLOW_ENTRY(); + + if(file_ctx) { free(file_ctx->filename); col_destroy_collection(file_ctx->error_list); col_destroy_collection(file_ctx->metadata); @@ -144,7 +160,7 @@ int ini_config_file_open(const char *filename, new_ctx->filename = malloc(PATH_MAX + 1); if (!(new_ctx->filename)) { error = errno; - ini_config_file_close(new_ctx); + ini_config_file_destroy(new_ctx); TRACE_ERROR_NUMBER("Failed to allocate memory for file path.", error); return error; } @@ -155,7 +171,7 @@ int ini_config_file_open(const char *filename, filename); if(error) { TRACE_ERROR_NUMBER("Failed to resolve path", error); - ini_config_file_close(new_ctx); + ini_config_file_destroy(new_ctx); return error; } @@ -166,7 +182,7 @@ int ini_config_file_open(const char *filename, if (!(new_ctx->file)) { error = errno; TRACE_ERROR_NUMBER("Failed to open file", error); - ini_config_file_close(new_ctx); + ini_config_file_destroy(new_ctx); return error; } @@ -176,7 +192,7 @@ int ini_config_file_open(const char *filename, COL_CLASS_INI_PERROR); if (error) { TRACE_ERROR_NUMBER("Failed to create error list", error); - ini_config_file_close(new_ctx); + ini_config_file_destroy(new_ctx); return error; } @@ -185,7 +201,7 @@ int ini_config_file_open(const char *filename, COL_CLASS_INI_META); if (error) { TRACE_ERROR_NUMBER("Failed to create metadata collection", error); - ini_config_file_close(new_ctx); + ini_config_file_destroy(new_ctx); return error; } |