Exemple #1
0
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;
}
Exemple #2
0
/**
* @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;
}
Exemple #3
0
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);
}