Exemplo n.º 1
0
static unsigned handle_internal_options(int argc, const char **argv, const char *usage)
{
    unsigned skip = 0;

    while (*argv)
    {
        const char *cmd = *argv;
        if (cmd[0] != '-')
            break;

        if (strcmp(cmd, "--version") == 0)
        {
            printf("%s version %s\n", g_progname, PACKAGE_VERSION);
            exit(0);
        }
        if (strcmp(cmd, "--help") == 0)
        {
            return skip + argc;
        }
#if 0
        if (prefixcmp(cmd, "--base-dir=") == 0)
            D_list = g_list_append(D_list, xstrdup(cmd + strlen("--base-dir=")));
        else if (prefixcmp(cmd, "--list-events") == 0)
        {
            const char *pfx = cmd + strlen("--list-events");
            if (pfx && *pfx)
                pfx += 1; /* skip '=' */

            char *events = list_possible_events(NULL, dump_dir_name, pfx);
            if (!events)
                exit(1); /* error msg is already logged */

            fputs(events, stdout);
            free(events);

            exit(0);
        }
#endif
        else
            error_msg_and_die("%s", usage);

        argv++;
        argc--;
        skip++;
    }

    return skip;
}
Exemplo n.º 2
0
void problem_data_reload_from_dump_dir(void)
{
    free(g_events);

    struct dump_dir *dd = dd_opendir(g_dump_dir_name, DD_OPEN_READONLY);
    if (!dd)
        xfunc_die(); /* dd_opendir already logged error msg */

    problem_data_t *new_cd = create_problem_data_from_dump_dir(dd);
    problem_data_add_text_noteditable(new_cd, CD_DUMPDIR, g_dump_dir_name);

    g_events = list_possible_events(dd, NULL, "");
    dd_close(dd);

    /* Copy "selected for reporting" flags */
    GHashTableIter iter;
    char *name;
    struct problem_item *new_item;
    g_hash_table_iter_init(&iter, new_cd);
    while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&new_item))
    {
        struct problem_item *old_item = g_cd ? problem_data_get_item_or_NULL(g_cd, name) : NULL;
        if (old_item)
        {
            new_item->selected_by_user = old_item->selected_by_user;
            new_item->allowed_by_reporter = old_item->allowed_by_reporter;
            new_item->default_by_reporter = old_item->default_by_reporter;
            new_item->required_by_reporter = old_item->required_by_reporter;
        }
        else
        {
            new_item->selected_by_user = 0;
            new_item->allowed_by_reporter = 0;
            new_item->default_by_reporter = 0;
            new_item->required_by_reporter = 0;
        }
        //log("%s: was ->selected_by_user=%d", __func__, new_item->selected_by_user);
    }
    problem_data_free(g_cd);
    g_cd = new_cd;
}
Exemplo n.º 3
0
GList *list_possible_events_glist(const char *problem_dir_name,
                                  const char *pfx)
{
    struct dump_dir *dd = dd_opendir(problem_dir_name, DD_OPEN_READONLY);
    GList *l = NULL;
    char *events = list_possible_events(dd, problem_dir_name, pfx);
    char *start = events;
    char *end = strchr(events, '\n');

    while(end)
    {
        *end = '\0';
        l = g_list_append(l, xstrdup(start));
        start = end + 1;
        end = strchr(start, '\n');
    }

    dd_close(dd);
    free(events);

    return l;
}