sc_bool sc_fs_storage_initialize(const gchar *path, sc_bool clear) { g_message("Initialize sc-storage from path: %s", path); g_snprintf(segments_path, MAX_PATH_LENGTH, "%s/segments.scdb", path); repo_path = g_strdup(path); g_message("\tFile memory engine: %s", sc_config_fm_engine()); // load engine extension #ifdef __MINGW32__ g_snprintf(fm_engine_module_path, MAX_PATH_LENGTH, "libsc-fm-%s.dll", sc_config_fm_engine()); #elif WIN32 g_snprintf(fm_engine_module_path, MAX_PATH_LENGTH, "sc-fm-%s.dll", sc_config_fm_engine()); #else g_snprintf(fm_engine_module_path, MAX_PATH_LENGTH, "libsc-fm-%s.so", sc_config_fm_engine()); #endif // try to load engine extension fFmEngineInitFunc func; fm_engine_module = g_module_open(fm_engine_module_path, G_MODULE_BIND_LOCAL); // skip non module files if (g_str_has_suffix(fm_engine_module_path, G_MODULE_SUFFIX) == TRUE) { if (fm_engine_module == null_ptr) { g_critical("Can't load module: %s. Error: %s", fm_engine_module_path, g_module_error()); } else { g_message("Initialize file memory engine from: %s", fm_engine_module_path); if (g_module_symbol(fm_engine_module, "initialize", (gpointer*) &func) == FALSE) { g_critical("Can't find 'initialize' symbol in module: %s", fm_engine_module_path); } else { fm_engine = func(repo_path); if (fm_engine == 0) { g_critical("Can't create file memory engine from: %s", fm_engine_module_path); return SC_FALSE; } } } } // clear repository if needs if (clear == SC_TRUE) { g_message("Clear memory"); if (g_file_test(segments_path, G_FILE_TEST_IS_REGULAR) && g_remove(segments_path) != 0) g_error("Can't delete segments file: %s", segments_path); g_message("Clear file memory"); if (sc_fm_clear(fm_engine) != SC_RESULT_OK) { g_critical("Can't clear file memory"); return SC_FALSE; } } return SC_TRUE; }
sc_bool sc_fs_storage_initialize(const gchar *path, sc_bool clear) { g_message("Initialize sc-storage from path: %s", path); g_snprintf(segments_path, MAX_PATH_LENGTH, "%s/%s", path, seg_dir); repo_path = g_strdup(path); g_message("\tFile memory engine: %s", sc_config_fm_engine()); // load engine extension #ifdef WIN32 g_snprintf(fm_engine_module_path, MAX_PATH_LENGTH, "sc-fm-%s.dll", sc_config_fm_engine()); #else g_snprintf(fm_engine_module_path, MAX_PATH_LENGTH, "libsc-fm-%s.so", sc_config_fm_engine()); #endif // try to load engine extension fFmEngineInitFunc func; fm_engine_module = g_module_open(fm_engine_module_path, G_MODULE_BIND_LOCAL); // skip non module files if (g_str_has_suffix(fm_engine_module_path, G_MODULE_SUFFIX) == TRUE) { if (fm_engine_module == nullptr) { g_critical("Can't load module: %s. Error: %s", fm_engine_module_path, g_module_error()); }else { g_message("Initialize file memory engine from: %s", fm_engine_module_path); if (g_module_symbol(fm_engine_module, "initialize", (gpointer*) &func) == FALSE) { g_critical("Can't find 'initialize' symbol in module: %s", fm_engine_module_path); }else { fm_engine = func(repo_path); if (fm_engine == 0) { g_critical("Can't create file memory engine from: %s", fm_engine_module_path); return SC_FALSE; } } } } // clear repository if needs if (clear == SC_TRUE) { g_message("Clear file memory"); if (g_file_test(segments_path, G_FILE_TEST_IS_DIR)) { // remove all segments GDir *dir = 0; const gchar *fname = 0; char path[MAX_PATH_LENGTH]; dir = g_dir_open(segments_path, 0, 0); g_assert( dir != (GDir*)0 ); // calculate files fname = g_dir_read_name(dir); while (fname != 0) { g_snprintf(path, MAX_PATH_LENGTH, "%s/%s", segments_path, fname); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { if (g_remove(path) == -1) { g_critical("Can't remove segment: %s", path); g_dir_close(dir); return SC_FALSE; } } fname = g_dir_read_name(dir); } g_dir_close(dir); } if (sc_fm_clear(fm_engine) != SC_RESULT_OK) { g_critical("Can't clear file memory"); return SC_FALSE; } } return SC_TRUE; }