Audacious
$Id:Doxyfile42802007-03-2104:39:00Znenolod$
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; under version 3 of the License. 00005 * 00006 * This program is distributed in the hope that it will be useful, 00007 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00008 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00009 * GNU General Public License for more details. 00010 * 00011 * You should have received a copy of the GNU General Public License 00012 * along with this program. If not, see <http://www.gnu.org/licenses>. 00013 * 00014 * The Audacious team does not consider modular code linking to 00015 * Audacious or using our public API to be a derived work. 00016 */ 00017 00018 #ifdef HAVE_CONFIG_H 00019 # include "config.h" 00020 #endif 00021 00022 #include "configdb.h" 00023 #include <libmcs/mcs.h> 00024 #include <stdlib.h> 00025 #include <string.h> 00026 00027 00028 #define RCFILE_DEFAULT_SECTION_NAME "audacious" 00029 00030 static gboolean mcs_initted = FALSE; 00031 static mcs_handle_t * config_handle = NULL; 00032 static gint config_refcount = 0; 00033 00039 mcs_handle_t * 00040 cfg_db_open() 00041 { 00042 if (!mcs_initted) 00043 { 00044 mcs_init(); 00045 mcs_initted = TRUE; 00046 } 00047 00048 if (! config_handle) 00049 config_handle = mcs_new (RCFILE_DEFAULT_SECTION_NAME); 00050 00051 config_refcount ++; 00052 return config_handle; 00053 } 00054 00059 void cfg_db_close (mcs_handle_t * handle) 00060 { 00061 g_return_if_fail (handle == config_handle); 00062 g_return_if_fail (config_refcount > 0); 00063 config_refcount --; 00064 } 00065 00066 void cfg_db_flush (void) 00067 { 00068 if (! config_handle) 00069 return; /* nothing to do */ 00070 00071 g_return_if_fail (! config_refcount); 00072 mcs_destroy (config_handle); 00073 config_handle = NULL; 00074 } 00075 00085 gboolean 00086 cfg_db_get_string(mcs_handle_t * db, 00087 const gchar * section, 00088 const gchar * key, 00089 gchar ** value) 00090 { 00091 if (!section) 00092 section = RCFILE_DEFAULT_SECTION_NAME; 00093 00094 if (! mcs_get_string (db, section, key, value)) 00095 return FALSE; 00096 00097 /* Prior to 2.3, NULL values were saved as "(null)". -jlindgren */ 00098 if (! strcmp (* value, "(null)")) 00099 { 00100 * value = NULL; 00101 return FALSE; 00102 } 00103 00104 return TRUE; 00105 } 00106 00116 gboolean 00117 cfg_db_get_int(mcs_handle_t * db, 00118 const gchar * section, const gchar * key, gint * value) 00119 { 00120 if (!section) 00121 section = RCFILE_DEFAULT_SECTION_NAME; 00122 00123 return mcs_get_int(db, section, key, value); 00124 } 00125 00135 gboolean 00136 cfg_db_get_bool(mcs_handle_t * db, 00137 const gchar * section, 00138 const gchar * key, 00139 gboolean * value) 00140 { 00141 if (!section) 00142 section = RCFILE_DEFAULT_SECTION_NAME; 00143 00144 return mcs_get_bool(db, section, key, value); 00145 } 00146 00157 gboolean 00158 cfg_db_get_float(mcs_handle_t * db, 00159 const gchar * section, 00160 const gchar * key, 00161 gfloat * value) 00162 { 00163 if (!section) 00164 section = RCFILE_DEFAULT_SECTION_NAME; 00165 00166 return mcs_get_float(db, section, key, value); 00167 } 00168 00179 gboolean 00180 cfg_db_get_double(mcs_handle_t * db, 00181 const gchar * section, 00182 const gchar * key, 00183 gdouble * value) 00184 { 00185 if (!section) 00186 section = RCFILE_DEFAULT_SECTION_NAME; 00187 00188 return mcs_get_double(db, section, key, value); 00189 } 00190 00200 void 00201 cfg_db_set_string(mcs_handle_t * db, 00202 const gchar * section, 00203 const gchar * key, 00204 const gchar * value) 00205 { 00206 if (!section) 00207 section = RCFILE_DEFAULT_SECTION_NAME; 00208 00209 if (value == NULL) 00210 mcs_unset_key (db, section, key); 00211 else 00212 mcs_set_string (db, section, key, value); 00213 } 00214 00224 void 00225 cfg_db_set_int(mcs_handle_t * db, 00226 const gchar * section, 00227 const gchar * key, 00228 gint value) 00229 { 00230 if (!section) 00231 section = RCFILE_DEFAULT_SECTION_NAME; 00232 00233 mcs_set_int(db, section, key, value); 00234 } 00235 00245 void 00246 cfg_db_set_bool(mcs_handle_t * db, 00247 const gchar * section, 00248 const gchar * key, 00249 gboolean value) 00250 { 00251 if (!section) 00252 section = RCFILE_DEFAULT_SECTION_NAME; 00253 00254 mcs_set_bool(db, section, key, value); 00255 } 00256 00266 void 00267 cfg_db_set_float(mcs_handle_t * db, 00268 const gchar * section, 00269 const gchar * key, 00270 gfloat value) 00271 { 00272 if (!section) 00273 section = RCFILE_DEFAULT_SECTION_NAME; 00274 00275 mcs_set_float(db, section, key, value); 00276 } 00277 00287 void 00288 cfg_db_set_double(mcs_handle_t * db, 00289 const gchar * section, 00290 const gchar * key, 00291 gdouble value) 00292 { 00293 if (!section) 00294 section = RCFILE_DEFAULT_SECTION_NAME; 00295 00296 mcs_set_double(db, section, key, value); 00297 } 00298 00306 void 00307 cfg_db_unset_key(mcs_handle_t * db, 00308 const gchar * section, 00309 const gchar * key) 00310 { 00311 g_return_if_fail(db != NULL); 00312 g_return_if_fail(key != NULL); 00313 00314 if (!section) 00315 section = RCFILE_DEFAULT_SECTION_NAME; 00316 00317 mcs_unset_key(db, section, key); 00318 }