G_MODULE_EXPORT gboolean on_menu_quit_activate(void) { gint wx = 0, wy = 0, width = 0, height = 0; gchar buf[16]; int i = 0; gint length = g_list_length(gummi->tabmanager->tabs); motion_pause_compile_thread(gummi->motion); for (i = 0; i < length; i++) { gtk_notebook_set_current_page(gui->tabmanagergui->notebook, i); tabmanager_set_active_tab(i); gint ret = check_for_save(g_active_editor); if (GTK_RESPONSE_YES == ret) { gui_save_file(g_active_tab, FALSE); } else if (GTK_RESPONSE_CANCEL == ret || GTK_RESPONSE_DELETE_EVENT == ret) { motion_resume_compile_thread(gummi->motion); return TRUE; } } /* Stop compile thread */ if (length > 0) motion_stop_compile_thread(gummi->motion); gboolean is_maximized; g_object_get(gui->mainwindow, "is-maximized", &is_maximized, NULL); if (!is_maximized) { gtk_window_get_size(gui->mainwindow, &width, &height); gtk_window_get_position(gui->mainwindow, &wx, &wy); config_begin(); config_set_value("mainwindow_x", g_ascii_dtostr(buf, 16, (double)wx)); config_set_value("mainwindow_y", g_ascii_dtostr(buf, 16, (double)wy)); config_set_value("mainwindow_w", g_ascii_dtostr(buf, 16, (double)width)); config_set_value("mainwindow_h", g_ascii_dtostr(buf, 16, (double)height)); config_commit(); } gtk_main_quit(); for (i = 0; i < length; i++) editor_destroy(GU_TAB_CONTEXT(g_list_nth_data (gummi->tabmanager->tabs, i))->editor); printf(" ___ \n" " {o,o} Thanks for using Gummi!\n" " |)__) I welcome your feedback at:\n" " -\"-\"- http://gummi.midnightcoding.org\n\n"); return FALSE; }
/** * @brief 配置下发入口 (main) **/ int32_t config_deliver(const struct ap_cfg_info_st *cfg_info) { int32_t ret = WL_SUCCESS; const struct ap_cfg_info_st *info = cfg_info; if (info == NULL) { LOG_DEBUG("Input a invalid config."); return WL_FAILED; } config_parse_prepare(); while(info) { ret = config_parse(info); if (ret == WL_FAILED) { LOG_WARN("Parsing config failed."); return ret; } if (info->more) { info = (struct ap_cfg_info_st *)((uint8_t*)info + CONF_HEADER_SIZE + info->len); } else { info = NULL; } } ret = config_commit(); create_launch_flag(); LOG_INFO("*** Committing over. result=%s .", (ret==0 ? "OK":"ERROR")); return ret; }
int main(int argc, char *argv[]) { char c; pool_conf_t *conf = NULL; const char *static_conf_loc; (void) getpname(argv[0]); (void) setlocale(LC_ALL, ""); (void) textdomain(TEXT_DOMAIN); while ((c = getopt(argc, argv, "cdensx")) != EOF) { switch (c) { case 'c': /* Create (or modify) system configuration */ Cflag++; break; case 'd': /* Disable the pools facility */ Dflag++; break; case 'e': /* Enable the pools facility */ Eflag++; break; case 'n': /* Don't actually do anything */ Nflag++; break; case 's': /* Update the submitted configuration */ Sflag++; break; case 'x': /* Delete current system configuration */ Xflag++; break; case '?': default: usage(); /*NOTREACHED*/ } } /* * Not all flags can be used at the same time. */ if ((Cflag || Sflag || Dflag || Eflag) && Xflag) usage(); if ((Dflag || Eflag) && (Cflag || Sflag || Xflag)) usage(); if (Dflag && Eflag) usage(); argc -= optind; argv += optind; if (! (Cflag || Sflag)) { if (argc != 0) usage(); } else { if (argc == 0) static_conf_loc = pool_static_location(); else if (argc == 1) static_conf_loc = argv[0]; else usage(); } if (!Nflag && (Cflag + Dflag + Eflag + Xflag != 0) && !priv_ineffect(PRIV_SYS_RES_CONFIG)) die(gettext(ERR_PERMISSIONS)); if (Dflag) { if (pool_set_status(POOL_DISABLED) != PO_SUCCESS) die(gettext(ERR_DISABLE)); } else if (Eflag) { if (pool_set_status(POOL_ENABLED) != PO_SUCCESS) { if (errno == EEXIST) die(gettext(ERR_ENABLE ": System has active processor sets\n")); else die(gettext(ERR_ENABLE)); } } else { if ((conf = pool_conf_alloc()) == NULL) die(gettext(ERR_NOMEM)); if (Cflag + Sflag + Xflag == 0) { /* * No flags means print current system configuration */ config_print(conf); } else if (!Nflag && Xflag) { /* * Destroy active pools configuration and * remove the state file. */ config_destroy(conf); } else { /* * Commit a new configuration. */ if (Cflag) config_commit(conf, static_conf_loc); else { /* * Dump the dynamic state to the * specified location */ if (!Nflag && Sflag) { if (pool_conf_open(conf, pool_dynamic_location(), PO_RDONLY) != PO_SUCCESS) die(gettext(ERR_OPEN_DYNAMIC), get_errstr()); if (pool_conf_export(conf, static_conf_loc, POX_NATIVE) != PO_SUCCESS) die(gettext(ERR_EXPORT_DYNAMIC), static_conf_loc, get_errstr()); (void) pool_conf_close(conf); } } } pool_conf_free(conf); } return (E_PO_SUCCESS); }
static int _ipmi_sensors_config (pstdout_state_t pstate, const char *hostname, void *arg) { ipmi_sensors_config_state_data_t state_data; ipmi_sensors_config_prog_data_t *prog_data; int exit_code = EXIT_FAILURE; config_err_t ret = 0; int file_opened = 0; FILE *fp = NULL; /* init NULL to remove warnings */ assert (pstate); assert (arg); prog_data = (ipmi_sensors_config_prog_data_t *) arg; if (prog_data->args->config_args.common_args.flush_cache) { if (sdr_cache_flush_cache (pstate, hostname, &prog_data->args->config_args.common_args) < 0) return (EXIT_FAILURE); return (EXIT_SUCCESS); } memset (&state_data, '\0', sizeof (ipmi_sensors_config_state_data_t)); state_data.prog_data = prog_data; state_data.pstate = pstate; if (!(state_data.ipmi_ctx = ipmi_open (prog_data->progname, hostname, &(prog_data->args->config_args.common_args), state_data.pstate))) goto cleanup; if (!(state_data.sdr_ctx = ipmi_sdr_ctx_create ())) { pstdout_perror (pstate, "ipmi_sdr_ctx_create()"); goto cleanup; } if (sdr_cache_create_and_load (state_data.sdr_ctx, NULL, state_data.ipmi_ctx, hostname, &state_data.prog_data->args->config_args.common_args) < 0) goto cleanup; if (!(state_data.sections = ipmi_sensors_config_sections_create (&state_data))) goto cleanup; if (prog_data->args->config_args.action == CONFIG_ACTION_CHECKOUT) { if (prog_data->args->config_args.filename) { if (prog_data->hosts_count > 1) { pstdout_fprintf (pstate, stderr, "Cannot output multiple host checkout into a single file\n"); goto cleanup; } if (!(fp = fopen (prog_data->args->config_args.filename, "w"))) { pstdout_perror (pstate, "fopen"); goto cleanup; } file_opened++; } else fp = stdout; } else if (prog_data->args->config_args.action == CONFIG_ACTION_COMMIT || prog_data->args->config_args.action == CONFIG_ACTION_DIFF) { if (prog_data->args->config_args.filename && strcmp (prog_data->args->config_args.filename, "-")) { if (!(fp = fopen (prog_data->args->config_args.filename, "r"))) { pstdout_perror (pstate, "fopen"); goto cleanup; } file_opened++; } else fp = stdin; } /* parse if there is an input file or no pairs at all */ if ((prog_data->args->config_args.action == CONFIG_ACTION_COMMIT && prog_data->args->config_args.filename) || (prog_data->args->config_args.action == CONFIG_ACTION_COMMIT && !prog_data->args->config_args.filename && !prog_data->args->config_args.keypairs) || (prog_data->args->config_args.action == CONFIG_ACTION_DIFF && prog_data->args->config_args.filename) || (prog_data->args->config_args.action == CONFIG_ACTION_DIFF && !prog_data->args->config_args.filename && !prog_data->args->config_args.keypairs)) { if (config_parse (pstate, state_data.sections, &(prog_data->args->config_args), fp) < 0) { /* errors printed in function call */ goto cleanup; } } /* note: argp validation catches if user specified keypair and filename for a diff */ if ((prog_data->args->config_args.action == CONFIG_ACTION_CHECKOUT || prog_data->args->config_args.action == CONFIG_ACTION_COMMIT || prog_data->args->config_args.action == CONFIG_ACTION_DIFF) && prog_data->args->config_args.keypairs) { if (config_sections_insert_keyvalues (pstate, state_data.sections, prog_data->args->config_args.keypairs) < 0) { /* errors printed in function call */ goto cleanup; } } if (prog_data->args->config_args.action == CONFIG_ACTION_COMMIT || prog_data->args->config_args.action == CONFIG_ACTION_DIFF) { int num; if ((num = config_sections_validate_keyvalue_inputs (pstate, state_data.sections, &state_data)) < 0) goto cleanup; /* some errors found */ if (num) goto cleanup; } if (prog_data->args->config_args.action == CONFIG_ACTION_CHECKOUT && prog_data->args->config_args.section_strs) { struct config_section_str *sstr; sstr = prog_data->args->config_args.section_strs; while (sstr) { if (!config_find_section (state_data.sections, sstr->section_name)) { pstdout_fprintf (pstate, stderr, "Unknown section `%s'\n", sstr->section_name); goto cleanup; } sstr = sstr->next; } } switch (prog_data->args->config_args.action) { case CONFIG_ACTION_CHECKOUT: if (prog_data->args->config_args.section_strs) { struct config_section_str *sstr; /* note: argp validation catches if user specified --section * and --keypair, so all_keys_if_none_specified should be '1'. */ sstr = prog_data->args->config_args.section_strs; while (sstr) { struct config_section *s; config_err_t this_ret; if (!(s = config_find_section (state_data.sections, sstr->section_name))) { pstdout_fprintf (pstate, stderr, "## FATAL: Cannot checkout section '%s'\n", sstr->section_name); continue; } this_ret = config_checkout_section (pstate, s, &(prog_data->args->config_args), 1, fp, 75, &state_data); if (this_ret != CONFIG_ERR_SUCCESS) ret = this_ret; if (ret == CONFIG_ERR_FATAL_ERROR) break; sstr = sstr->next; } } else { int all_keys_if_none_specified = 0; if (!prog_data->args->config_args.keypairs) all_keys_if_none_specified++; ret = config_checkout (pstate, state_data.sections, &(prog_data->args->config_args), all_keys_if_none_specified, fp, 75, &state_data); } break; case CONFIG_ACTION_COMMIT: ret = config_commit (pstate, state_data.sections, &(prog_data->args->config_args), &state_data); break; case CONFIG_ACTION_DIFF: ret = config_diff (pstate, state_data.sections, &(prog_data->args->config_args), &state_data); break; case CONFIG_ACTION_LIST_SECTIONS: ret = config_output_sections_list (pstate, state_data.sections); break; } if (ret == CONFIG_ERR_FATAL_ERROR) { exit_code = CONFIG_FATAL_EXIT_VALUE; goto cleanup; } if (ret == CONFIG_ERR_NON_FATAL_ERROR) { exit_code = CONFIG_NON_FATAL_EXIT_VALUE; goto cleanup; } exit_code = EXIT_SUCCESS; cleanup: ipmi_sdr_ctx_destroy (state_data.sdr_ctx); ipmi_ctx_close (state_data.ipmi_ctx); ipmi_ctx_destroy (state_data.ipmi_ctx); config_sections_destroy (state_data.sections); if (file_opened) fclose (fp); return (exit_code); }