static int read_string(UI *ui, UI_STRING *uis) { int ok = 0; switch (UI_get_string_type(uis)) { case UIT_BOOLEAN: fputs(UI_get0_output_string(uis), tty_out); fputs(UI_get0_action_string(uis), tty_out); fflush(tty_out); return read_string_inner(ui, uis, UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO, 0); case UIT_PROMPT: fputs(UI_get0_output_string(uis), tty_out); fflush(tty_out); return read_string_inner(ui, uis, UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO, 1); case UIT_VERIFY: fprintf(tty_out, "Verifying - %s", UI_get0_output_string(uis)); fflush(tty_out); if ((ok = read_string_inner(ui, uis, UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO, 1)) <= 0) return ok; if (strcmp(UI_get0_result_string(uis), UI_get0_test_string(uis)) != 0) { fprintf(tty_out, "Verify failure\n"); fflush(tty_out); return 0; } break; default: break; } return 1; }
static int ui_android_read(UI *ui, UI_STRING *uis) { int ok = 0; int num = 0; const char *str; char **args; switch (UI_get_string_type(uis)) { case UIT_BOOLEAN: android_log(PRG_DEBUG, "called ui_android_read() output boolean %s", UI_get0_output_string(uis)); android_log(PRG_DEBUG, "called ui_android_read() action boolean %s", UI_get0_action_string(uis)); // UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO case UIT_PROMPT: str = UI_get0_output_string(uis); android_log(PRG_DEBUG, "called ui_android_read() output prompt %s", str); break; case UIT_VERIFY: str = UI_get0_output_string(uis); android_log(PRG_DEBUG, "called ui_android_read() verify output %s", str); break; default: return 1; break; } strlcat(ui_buf, "=X=", sizeof(ui_buf)); strlcat(ui_buf, str, sizeof(ui_buf)); process: if (send_req(ui_buf) < 0) { android_log(PRG_ERR, "send_req() failed"); goto out; } if (recv_cmd(&num, &args) < 0) { android_log(PRG_ERR, "recv_cmd() failed"); goto out; } if (num != 1) { android_log(PRG_ERR, "parameter number mismatch"); goto out; } android_log(PRG_DEBUG, "ui_android_read() cmd: %s %d", args[0], num); send_ack(num); UI_set_result(ui, uis, args[0]); ok = 1; out: if (num) free_cmd(num, args); ui_buf[0] = '\0'; return ok; }