summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitri Pal <dpal@redhat.com>2010-12-26 18:08:27 -0500
committerDmitri Pal <dpal@redhat.com>2011-01-03 15:00:43 -0500
commit8176dad24b0124a634450741f00b2d03c48ce437 (patch)
tree895954eef9960efcd123ca460f3230e5479a9b78
parent24241d6fa2aa0b7e1595f0600d28238945f647d3 (diff)
downloadding-libs-8176dad24b0124a634450741f00b2d03c48ce437.tar.gz
ding-libs-8176dad24b0124a634450741f00b2d03c48ce437.tar.xz
ding-libs-8176dad24b0124a634450741f00b2d03c48ce437.zip
[INI] Separate close and destroy
Allow closing file without destroying the context.
-rw-r--r--ini/ini_configobj.h5
-rw-r--r--ini/ini_fileobj.c25
-rw-r--r--ini/ini_parse_ut.c10
3 files changed, 28 insertions, 12 deletions
diff --git a/ini/ini_configobj.h b/ini/ini_configobj.h
index f0c6882..e728c2e 100644
--- a/ini/ini_configobj.h
+++ b/ini/ini_configobj.h
@@ -213,9 +213,12 @@ int ini_config_file_open(const char *filename,
uint32_t metadata_flags,
struct ini_cfgfile **file_ctx);
-/* Close file context and destroy the object */
+/* Close file context */
void ini_config_file_close(struct ini_cfgfile *file_ctx);
+/* Close file context and destroy the object */
+void ini_config_file_destroy(struct ini_cfgfile *file_ctx);
+
/* How many errors do we have in the list ? */
unsigned ini_config_error_count(struct ini_cfgfile *file_ctx);
diff --git a/ini/ini_fileobj.c b/ini/ini_fileobj.c
index 7bc599b..f998eb0 100644
--- a/ini/ini_fileobj.c
+++ b/ini/ini_fileobj.c
@@ -75,12 +75,25 @@ 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);
+ }
+
+ 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 +157,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 +168,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 +179,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 +189,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 +198,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;
}
diff --git a/ini/ini_parse_ut.c b/ini/ini_parse_ut.c
index 95793dc..f0a9552 100644
--- a/ini/ini_parse_ut.c
+++ b/ini/ini_parse_ut.c
@@ -91,7 +91,7 @@ int test_one_file(const char *in_filename,
/* We do not return here intentionally */
}
- ini_config_file_close(file_ctx);
+ ini_config_file_destroy(file_ctx);
INIOUT(col_debug_collection(ini_config->cfg, COL_TRAVERSE_DEFAULT));
@@ -381,13 +381,13 @@ int merge_values_test(void)
printf("This is unexpected error %d in mode %d\n", error, mflags[i]);
ini_config_destroy(ini_config);
simplebuffer_free(sbobj);
- ini_config_file_close(file_ctx);
+ ini_config_file_destroy(file_ctx);
return error;
}
/* We do not return here intentionally */
}
- ini_config_file_close(file_ctx);
+ ini_config_file_destroy(file_ctx);
INIOUT(col_debug_collection(ini_config->cfg, COL_TRAVERSE_DEFAULT));
@@ -572,12 +572,12 @@ int merge_section_test(void)
error, msecflags[i], mflags[j]);
ini_config_destroy(ini_config);
simplebuffer_free(sbobj);
- ini_config_file_close(file_ctx);
+ ini_config_file_destroy(file_ctx);
return error;
}
}
- ini_config_file_close(file_ctx);
+ ini_config_file_destroy(file_ctx);
INIOUT(col_debug_collection(ini_config->cfg,
COL_TRAVERSE_DEFAULT));