Exemplo n.º 1
0
bool simulation::execute(string dna, uint32 id)
{
    int status, ret;
    pid_t pid;
    string args;

    setup_input_file(dna, id);

    if (!file_exists(get_bin_path(id).c_str()))
    {
        INFO("verbose", "* simulation: simulator binary does not exists.\n");
        exit(0);
    }

    pid = fork(); // con vfork gdb si blocca
    if (pid == 0)
    {
        int fd;
        ret = chdir((char *)get_sim_path(id).c_str());

        if((fd = open("/dev/null", O_RDWR | O_CREAT, 0777)) == -1)
        {
            perror("open");
            _exit(0);
        }

        dup2(fd, STDOUT_FILENO);
        dup2(fd, STDERR_FILENO);
        close(fd);

        ret = execle(get_bin_path(id).c_str(),
                     conf->get_string_config(CONFIG_SIMULATOR_BIN).c_str(),
                     "-N", "1", "-a",
                     conf->get_string_config(CONFIG_TEST_FILE_OUT).c_str()
                     , NULL, environ);

        perror("execle"); // qui non ci arriva mai ( si spera :D )
        _exit(0);
    }
    else if (pid == -1)
    {
        perror("fork");
        return false;
    }

    waitpid(pid, &status, 0);

    return true;
}
Exemplo n.º 2
0
void
mmcli_get_sim (GDBusConnection *connection,
                  const gchar *path_or_index,
                  GCancellable *cancellable,
                  GAsyncReadyCallback callback,
                  gpointer user_data)
{
    GetSimContext *ctx;

    ctx = g_new0 (GetSimContext, 1);
    ctx->sim_path = get_sim_path (path_or_index);
    if (cancellable)
        ctx->cancellable = g_object_ref (cancellable);
    ctx->result = g_simple_async_result_new (G_OBJECT (connection),
                                             callback,
                                             user_data,
                                             mmcli_get_modem);
    mmcli_get_manager (connection,
                       cancellable,
                       (GAsyncReadyCallback)get_sim_manager_ready,
                       ctx);
}
Exemplo n.º 3
0
MMSim *
mmcli_get_sim_sync (GDBusConnection *connection,
                    const gchar *path_or_index,
                    MMManager **o_manager,
                    MMObject **o_object)
{
    MMManager *manager;
    GList *modems;
    GList *l;
    MMSim *found = NULL;
    gchar *sim_path;

    sim_path = get_sim_path (path_or_index);

    manager = mmcli_get_manager_sync (connection);
    modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (manager));
    if (!modems) {
        g_printerr ("error: couldn't find sim at '%s': 'no modems found'\n",
                    sim_path);
        exit (EXIT_FAILURE);
    }

    for (l = modems; !found && l; l = g_list_next (l)) {
        GError *error = NULL;
        MMObject *object;
        MMModem *modem;

        object = MM_OBJECT (l->data);
        modem = mm_object_get_modem (object);
        if (g_str_equal (sim_path, mm_modem_get_sim_path (modem))) {
            found = mm_modem_get_sim_sync (modem, NULL, &error);
            if (error) {
                g_printerr ("error: couldn't get sim '%s' in modem '%s': '%s'\n",
                            sim_path,
                            mm_modem_get_path (modem),
                            error->message);
                exit (EXIT_FAILURE);
            }

            if (found && o_object)
                *o_object = g_object_ref (object);
        }

        g_object_unref (modem);
    }

    if (!found) {
        g_printerr ("error: couldn't find sim at '%s'\n", sim_path);
        exit (EXIT_FAILURE);
    }

    g_list_free_full (modems, (GDestroyNotify) g_object_unref);
    g_free (sim_path);

    if (o_manager)
        *o_manager = manager;
    else
        g_object_unref (manager);

    return found;
}