char *ft_readline(char *prompt, int settings) { t_rl rl; char *line; int code; ft_initcap(); if (rl_init(&rl, settings, prompt) < 0) return (NULL); write(1, prompt, rl.promptsize); while (!ISIN(rl.bitset, RL_BS_FLUSH)) { dumpdyn(rl.dyn); if (!(code = rl_read())) continue ; if (rl_maj(&rl, code) < 0) { rl_destroy(&rl); return (NULL); } } line = ft_strjoin(rl.dyn.str, rl.dyn.strend - rl.dyn.post); rl_destroy(&rl); return (line); }
int rl_read_header(rlite *db) { db->page_size = HEADER_SIZE; int retval; if (db->driver_type == RL_MEMORY_DRIVER) { db->page_size = DEFAULT_PAGE_SIZE; RL_CALL(rl_create_db, RL_OK, db); } else if (db->driver_type == RL_FILE_DRIVER) { RL_CALL(file_driver_fp, RL_OK, db); RL_CALL(rl_apply_wal, RL_OK, db); retval = rl_read(db, &rl_data_type_header, 0, NULL, NULL, 1); if (retval == RL_NOT_FOUND && rl_has_flag(db, RLITE_OPEN_CREATE)) { db->page_size = DEFAULT_PAGE_SIZE; RL_CALL(rl_create_db, RL_OK, db); RL_CALL(rl_write, RL_OK, db, &rl_data_type_header, 0, NULL); } else if (retval != RL_FOUND) { goto cleanup; } } else { fprintf(stderr, "Unknown driver type %d\n", db->driver_type); retval = RL_UNEXPECTED; goto cleanup; } retval = RL_OK; cleanup: return retval; }
static int readline_loop(t_rl *rl) { long int input; while (42) { if (ISIN(rl->bitset, RL_BS_FLUSH) || ISIN(rl->bitset, RL_BS_QFLUSH)) break ; if (!(input = rl_read())) continue ; if (rl_maj(rl, input) < 0) { rl_destroy(rl); return (-1); } } return (0); }
static int readline_loop(t_rl *rl) { long int input; while (42) { if (ISIN(rl->bitset, RL_BS_FLUSH) || ISIN(rl->bitset, RL_BS_QFLUSH)) //If \n, \0, errors occurs, break the loop break ; if (!(input = rl_read())) //Get an user input (if error just continue) continue ; if (rl_maj(rl, input) < 0) //Maj buffers and screen depending of the input { rl_destroy(rl); return (-1); } } return (0); }