Ejemplo n.º 1
0
static void
on_question_request_execute (question_answer_state_t *question_answer_state,
                             ply_boot_client_t       *client)
{
  ply_boot_client_ask_daemon_question (client,
                                       question_answer_state->prompt,
                                       (ply_boot_client_answer_handler_t)
                                       on_question_answer,
                                       (ply_boot_client_response_handler_t)
                                       on_question_answer_failure,
                                       question_answer_state);
}
Ejemplo n.º 2
0
Plymouth::answer_t Plymouth::askQuestion(const std::string & prompt, std::string & answer){
    ply_boot_client_attach_to_event_loop(_ply_client, _ply_event_loop);

    auto answer_helper = [this, &answer] (const char * _answer, int exit_status) -> void {
	if(_answer == 0 || _answer[0] == KEY_CTRL_C){
	    exit_status = CANCELED;
	}
	if(exit_status == OK){
	    answer.assign(_answer);
	}
	ply_event_loop_exit(_ply_event_loop, exit_status);
    };
    typedef decltype(answer_helper) answer_helper_t;
    auto answer_hdl = [] (void * data, const char * answer, ply_boot_client_t *) -> void{
	(*reinterpret_cast<answer_helper_t*>(data))(answer, OK);
    };
    auto fail_hdl = [] (void *data, ply_boot_client_t*) -> void{
	(*reinterpret_cast<answer_helper_t*>(data))("", FAILED);
    };
    ply_boot_client_ask_daemon_question(_ply_client, prompt.c_str(), answer_hdl, fail_hdl, &answer_helper);

    return static_cast<answer_t>(ply_event_loop_run(_ply_event_loop));
}