/** * Stores the routing data rd in config_file * * @param rd Pointer to the routing tree which shall be saved to file * * @return 0 means ok, -1 means an error occurred */ int save_config(struct route_data_t * rd) { FILE * outfile; int i,j; if(backup_config() < 0){ return -1; } if ((outfile = fopen(config_file, "w")) == NULL) { LM_ERR("Could not open config file %s\n", config_file); return -1; } i = 0; if (rd->carrier_num>=1) { for (j=0; j< rd->carriers[i]->domain_num; j++) { fprintf(outfile, "domain %.*s {\n", rd->carriers[i]->domains[j]->name->len, rd->carriers[i]->domains[j]->name->s); if (save_route_data_recursor(rd->carriers[i]->domains[j]->tree, outfile) < 0) { goto errout; } fprintf(outfile, "}\n\n"); } } fclose(outfile); return 0; errout: fclose(outfile); LM_ERR("Cannot save config file %s\n", config_file); return -1; }
void btn_backup_config_clicked(GtkButton *button, gpointer user_data) { GtkWidget *dialog, *err_dialog; char *file_name; int ret; dialog = gtk_file_chooser_dialog_new( "Backup to file", GTK_WINDOW(GET_WIDGET(WIN_CONFIG)), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "/home"); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "btnx_conf_backup.tar.gz"); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { settings_file_save(); file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); ret = backup_config(file_name); g_free(file_name); switch (ret) { case ERROR_BACKUP_OPEN_VERSION: case ERROR_BACKUP_WRITE_VERSION: SHOW_ERROR_DIALOG(err_dialog, dialog, TEXT_BACKUP_ERROR, _("Could not create a version stamp file.")); break; case ERROR_BACKUP_TAR_CREATE: SHOW_ERROR_DIALOG(err_dialog, dialog, TEXT_BACKUP_ERROR, _("Unspecified tar execution failure.")); break; default: break; } } gtk_widget_destroy(dialog); }