Revision: 4778 http://geany.svn.sourceforge.net/geany/?rev=4778&view=rev Author: ntrel Date: 2010-03-19 17:38:27 +0000 (Fri, 19 Mar 2010)
Log Message: ----------- Add stash_group_load_from_file() and stash_group_save_to_file().
Modified Paths: -------------- trunk/ChangeLog trunk/doc/stash-example.c trunk/src/stash.c trunk/src/stash.h trunk/src/utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-03-19 12:51:08 UTC (rev 4777) +++ trunk/ChangeLog 2010-03-19 17:38:27 UTC (rev 4778) @@ -3,6 +3,8 @@ * src/stash.c: Make adding string and string vector settings initialise the setting to NULL for safety. + * src/utils.c, src/stash.c, src/stash.h, doc/stash-example.c: + Add stash_group_load_from_file() and stash_group_save_to_file().
2010-03-18 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/doc/stash-example.c =================================================================== --- trunk/doc/stash-example.c 2010-03-19 12:51:08 UTC (rev 4777) +++ trunk/doc/stash-example.c 2010-03-19 17:38:27 UTC (rev 4778) @@ -1,9 +1,7 @@ StashGroup *group; gboolean china_enabled; -gchar *potter_name = NULL; /* strings must be initialised */ -GKeyFile *keyfile; -const gchar filename[] = "/path/to/data.conf"; -gchar *data; +gchar *potter_name; +const gchar filename[] = "/path/data.conf";
/* setup the group */ group = stash_group_new("cups"); @@ -11,23 +9,15 @@ stash_group_add_string(group, &potter_name, "potter_name", "Miss Clay");
/* load the settings from a file */ -keyfile = g_key_file_new(); -g_key_file_load_from_file(keyfile, filename, G_KEY_FILE_NONE, NULL); -stash_group_load_from_key_file(group, keyfile); -g_key_file_free(keyfile); +if (!stash_group_load_from_file(group, filename, G_KEY_FILE_NONE)) + g_warning(_("Could not load keyfile %s!"), filename);
/* now use settings china_enabled and potter_name */ ...
/* save settings to file */ -keyfile = g_key_file_new(); -stash_group_save_to_key_file(group, keyfile); -data = g_key_file_to_data(keyfile, NULL, NULL); -if (utils_write_file(filename, data) != 0) - dialogs_show_msgbox(GTK_MESSAGE_ERROR, - _("Could not save keyfile %s!"), filename); -g_free(data); -g_key_file_free(keyfile); +if (stash_group_save_to_file(group, filename, G_KEY_FILE_NONE) != 0) + g_error(_("Could not save keyfile %s!"), filename);
/* free memory */ stash_group_free(group);
Modified: trunk/src/stash.c =================================================================== --- trunk/src/stash.c 2010-03-19 12:51:08 UTC (rev 4777) +++ trunk/src/stash.c 2010-03-19 17:38:27 UTC (rev 4778) @@ -40,7 +40,7 @@ * * @section String Settings * String settings and other dynamically allocated settings will be initialized to NULL when - * added to a StashGroup (so they can safely be freed before reassigning). + * added to a StashGroup (so they can safely be reassigned). * * @section Widget Support * Widgets very commonly used in configuration dialogs will be supported with their own function. @@ -51,6 +51,7 @@ * * @section Example * @include stash-example.c + * @note You might want to handle the warning/error conditions differently from above. */
/* Implementation Note @@ -257,6 +258,61 @@ }
+/** Reads group settings from a configuration file using @c GKeyFile. + * @param group . + * @param filename Filename of the file to write, in locale encoding. + * @param flags Keyfile options - @c G_KEY_FILE_NONE is the most efficient. + * @return @c TRUE if a key file could be loaded. + * @see stash_group_load_from_key_file(). + **/ +gboolean stash_group_load_from_file(StashGroup *group, const gchar *filename, + GKeyFileFlags flags) +{ + GKeyFile *keyfile; + gboolean ret; + + keyfile = g_key_file_new(); + ret = g_key_file_load_from_file(keyfile, filename, flags, NULL); + /* even on failure we load settings to apply defaults */ + stash_group_load_from_key_file(group, keyfile); + + g_key_file_free(keyfile); + return ret; +} + + +/** Writes group settings to a configuration file using @c GKeyFile. + * If the file doesn't exist, it will be created. + * If it already exists, it will be overwritten. + * + * @param group . + * @param filename Filename of the file to write, in locale encoding. + * @param flags Keyfile options - @c G_KEY_FILE_NONE is the most efficient. + * @return 0 if the file was successfully written, otherwise the @c errno of the + * failed operation is returned. + * @see stash_group_save_to_key_file(). + **/ +gint stash_group_save_to_file(StashGroup *group, const gchar *filename, + GKeyFileFlags flags) +{ + GKeyFile *keyfile; + gchar *data; + gint ret; + + keyfile = g_key_file_new(); + /* if we need to keep comments or translations, try to load first */ + if (flags) + g_key_file_load_from_file(keyfile, filename, flags, NULL); + + stash_group_save_to_key_file(group, keyfile); + data = g_key_file_to_data(keyfile, NULL, NULL); + ret = utils_write_file(filename, data); + g_free(data); + g_key_file_free(keyfile); + return ret; +} + + /** Creates a new group. * @param name Name used for @c GKeyFile group. * @return Group. */
Modified: trunk/src/stash.h =================================================================== --- trunk/src/stash.h 2010-03-19 12:51:08 UTC (rev 4777) +++ trunk/src/stash.h 2010-03-19 17:38:27 UTC (rev 4778) @@ -55,6 +55,12 @@
void stash_group_save_to_key_file(StashGroup *group, GKeyFile *keyfile);
+gboolean stash_group_load_from_file(StashGroup *group, const gchar *filename, + GKeyFileFlags flags); + +gint stash_group_save_to_file(StashGroup *group, const gchar *filename, + GKeyFileFlags flags); + void stash_group_free(StashGroup *group);
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2010-03-19 12:51:08 UTC (rev 4777) +++ trunk/src/utils.c 2010-03-19 17:38:27 UTC (rev 4778) @@ -221,7 +221,7 @@ * @param filename The filename of the file to write, in locale encoding. * @param text The text to write into the file. * - * @return 0 if the directory was successfully created, otherwise the @c errno of the + * @return 0 if the file was successfully written, otherwise the @c errno of the * failed operation is returned. **/ gint utils_write_file(const gchar *filename, const gchar *text)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.