void auth_once (auth_t *au) { int res; res = pam_start (au->name, NULL, &au->pconv, &au->pamh); if (res != PAM_SUCCESS) goto pam_start_failed; au->ist = input_state_create (au->epfd); res = pam_authenticate (au->pamh, 0); if (res != PAM_SUCCESS) goto pam_auth_failed; res = pam_acct_mgmt (au->pamh, 0); if (res != PAM_SUCCESS) goto pam_auth_failed; fprintf (stderr, "Authenticated.\n"); goto pam_auth_clean; pam_auth_failed: fprintf (stderr, "Not Authenticated.\n"); pam_auth_clean: input_state_destroy (au->ist); pam_start_failed: pam_end (au->pamh, res); }
void remove_input_state_hook(void) { if (input_state_callback_original) { retro_ctx.state_cb = input_state_callback_original; current_core.retro_set_input_state(retro_ctx.state_cb); input_state_callback_original = NULL; input_state_destroy(); } if (retro_reset_callback_original) { current_core.retro_reset = retro_reset_callback_original; retro_reset_callback_original = NULL; } if (retro_unserialize_callback_original) { current_core.retro_unserialize = retro_unserialize_callback_original; retro_unserialize_callback_original = NULL; } }
int main(void) { int epfd, ret; struct epoll_event tmp; input_state_t *ist; data_handler_t *dht; view_t *v; line_text_t *lt; int timeout = -1; keysym_t sym; epfd = epoll_create1(0); if (epfd == -1) { perror ("epoll create failed"); exit(-1); } screen_enter (epfd); ist = input_state_create (epfd); v = view_create (); lt = view_user_input_ref (v); view_update (v, VIEW_USER); while ((ret = epoll_wait (epfd, &tmp, 1, timeout)) > -1) { if (ret) { dht = tmp.data.ptr; dht->handler (dht->fd, dht->data); } sym = get_input_state_info (ist, &timeout); switch (sym) { case XKB_KEY_NoSymbol: break; case XKB_KEY_Return: goto input_end; case XKB_KEY_BackSpace: line_text_handle_event (lt, DELETE_LEFT_CH); break; case XKB_KEY_Delete: line_text_handle_event (lt, DELETE_RIGHT_CH); break; case XKB_KEY_Left: line_text_handle_event (lt, CURSOR_MOVE_LEFT); break; case XKB_KEY_Right: line_text_handle_event (lt, CURSOR_MOVE_RIGHT); break; default: line_text_handle_event (lt, APPEND_CH, keysym_to_utf32(sym)); break; } if (sym != XKB_KEY_NoSymbol) view_update (v, VIEW_USER); } input_end: line_text_unref (lt); view_destory (v); input_state_destroy (ist); screen_leave (epfd); return 0; }