summaryrefslogtreecommitdiffstats
path: root/ini/ini_fileobj.c
diff options
context:
space:
mode:
authorDmitri Pal <dpal@redhat.com>2012-03-18 14:13:00 -0400
committerStephen Gallagher <sgallagh@redhat.com>2012-04-05 11:20:08 -0700
commit31fb35c3fc8ac631b39fcad5c2cba7a7e7c97fa0 (patch)
tree14ed726d500017e4b689110783eb1d5176e1a59b /ini/ini_fileobj.c
parentb2784fd8bb14123deb03692932e1a0af5819aabe (diff)
downloadding-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.c28
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;
}