static void *map_file(char * const path, int *fd) { t_stat st; void *ret; if ((*fd = open(path, O_RDWR)) == -1) ft_quit("open error", 2, 42); arch_64(*fd); if (fstat(*fd, &st) == -1) ft_quit("stat error", 2, 42); if ((ret = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, *fd, 0)) == MAP_FAILED) ft_quit("map error2", 2, 42); return (ret); }
int ft_while(t_data *d, struct termios *term, t_list *list) { while (42) { ft_bzero(d->read_char, 3); read(0, d->read_char, 3); if (is_rtn(d->read_char)) { ft_quit(term); final_print(list); return (1); } if (ft_while_help(d, term, list, d->read_char)) ; else if (is_arrow(d->read_char, d, list) == 0) ; else if (is_spc(d->read_char, list, d) == 0) ; else if (is_del(d->read_char)) list = ft_del_elem(list, d, term); if (list == NULL) return (0); } return (0); }
static void arch_64(int fd) { char stamp[5]; ft_bzero(stamp, 5); read(fd, stamp, 4); if (*(int *)stamp != MH_MAGIC_64) ft_quit("Bad architecture", 2, 42); }
static void handler(int sig) { int savedErrno; /* In case we change 'errno' */ savedErrno = errno; if (write(pfd[1], "x", 1) == -1 && errno != EAGAIN) ft_quit("write", 2, 42); errno = savedErrno; }
int main(int argc, char **argv) { char *macho; int fd; if (argc != 2) ft_quit("At least one arg", 2, 42); macho = map_file(argv[1], &fd); get_text(macho, fd); return (42); }
void ft_broadcast(t_client *c, char *msg) { char *line; line = NULL; ft_putstr_fd("broadcast ", c->cs); ft_putendl_fd(msg, c->cs); get_next_line(c->cs, &line); if (ft_strcmp(line, "mort") == 0) ft_quit(c); free(line); }
static int ft_manage_inputs(t_env *e, char *inputs) { int value; if ((inputs[0] == 4 || inputs[0] == 10) && inputs[1] == 0 && inputs[2] == 0 && inputs[3] == 0 && inputs[4] == 0 && inputs[5] == 0 && inputs[6] == 0) return (ft_quit(e, inputs)); else if (!ft_delete(e, inputs)) if (!ft_arrows(e, inputs)) if (!ft_clear(e, inputs)) if (ft_isprint(inputs[0]) || inputs[0] == 9) if ((value = ft_process_char(e, inputs)) != 2) return (value); return (-1); }
int ft_gauche(t_client *cl) { char *line; line = NULL; ft_putendl_fd("gauche", cl->cs); get_next_line(cl->cs, &line); if (ft_strcmp(line, "mort") == 0) ft_quit(cl); if (ft_strcmp(line, "ok") == 0) { free(line); return (1); } return (0); }
void condition(char *buff, int sock) { int r; if (!ft_strncmp("quit", buff, 4)) ft_quit(sock); if (!ft_strncmp("get", buff, 3)) ft_get(buff, sock); if (ft_strcmp("ls", buff) == 0 || ft_strcmp("pwd", buff) == 0 || ft_strncmp("cd", buff, 2) == 0) { while ((r = read(sock, buff, 1)) > 0 && buff[0] != '\0') { buff[r] = '\0'; write(1, buff, r); } } }
static void ft_select(char **argv) { t_signal sig_struct; t_select env; ft_new_select(&env, argv); ft_init_sig(&sig_struct, &env); assign_colors(env.args); env.page.relpos = get_current_element_relative_position(\ &(env.page), env.win); while (!env.quit) { if (env.print) { change_selected_element(&env); ft_print_all_page(&env); get_input(&env); } } ft_quit(&env); }
int detect(int keycode, t_env *box) { if (keycode == 69 && (box->m.zoom *= 0.5)) remake(box); if (keycode == 78 && (box->m.zoom *= 2)) remake(box); if (keycode == 124 && (box->m.inter_x += box->m.zoom / 100)) remake(box); if (keycode == 123 && (box->m.inter_x -= box->m.zoom / 100)) remake(box); if (keycode == 126 && (box->m.inter_y -= box->m.zoom / 100)) remake(box); if (keycode == 125 && (box->m.inter_y += box->m.zoom / 100)) remake(box); if (keycode == 49) box->stop = (box->stop == 1) ? 0 : 1; if (keycode == 82 && reset(box)) remake(box); detect_2(keycode, box); if (keycode == 53) ft_quit(); return (1); }
void ft_keys(char *buf, t_control *list, char **modetab) { if (ARROW) ft_arrows(buf, list, modetab); else if (SPACE) ft_addselected(list, modetab); else if (BACKSPACE || SUPPR) { ft_delete_node(list, list->active); ft_clear(modetab, list, 1); } else if (ENTER) ft_quit(modetab, list, 0, ft_calcret(list)); else if (MINUS) ft_multiselect(list, 0, modetab); else if (PLUS) ft_multiselect(list, 1, modetab); else if (SLASH) ft_search(list, modetab); else if (QUESTIONMARK) ft_printhelp(list, modetab); else if (buf[0] == 'c' && !buf[1]) ft_selectskin(list, modetab); }
int main(int argc, char *argv[]) { fd_set readfds; int ready, nfds, flags; struct timeval timeout; struct timeval *pto; struct sigaction sa; char ch; int fd, j; if (argc < 2 || strcmp(argv[1], "--help") == 0) usageErr("%s {timeout|-} fd...\n" "\t\t('-' means infinite timeout)\n", argv[0]); /* Initialize 'timeout', 'readfds', and 'nfds' for select() */ if (strcmp(argv[1], "-") == 0) { pto = NULL; /* Infinite timeout */ } else { pto = &timeout; timeout.tv_sec = getLong(argv[1], 0, "timeout"); timeout.tv_usec = 0; /* No microseconds */ } nfds = 0; /* Build the 'readfds' from the fd numbers given in command line */ FD_ZERO(&readfds); for (j = 2; j < argc; j++) { fd = getInt(argv[j], 0, "fd"); if (fd >= FD_SETSIZE) cmdLineErr("file descriptor exceeds limit (%d)\n", FD_SETSIZE); if (fd >= nfds) nfds = fd + 1; /* Record maximum fd + 1 */ FD_SET(fd, &readfds); } /* Create pipe before establishing signal handler to prevent race */ if (pipe(pfd) == -1) ft_quit("pipe", 2, 42); FD_SET(pfd[0], &readfds); /* Add read end of pipe to 'readfds' */ nfds = max(nfds, pfd[0] + 1); /* And adjust 'nfds' if required */ /* Make read and write ends of pipe nonblocking */ flags = fcntl(pfd[0], F_GETFL); if (flags == -1) ft_quit("get", 2, 42); flags |= O_NONBLOCK; /* Make read end nonblocking */ if (fcntl(pfd[0], F_SETFL, flags) == -1) ft_quit("set", 2, 42); flags = fcntl(pfd[1], F_GETFL); if (flags == -1) ft_quit("get", 2, 42); flags |= O_NONBLOCK; /* Make write end nonblocking */ if (fcntl(pfd[1], F_SETFL, flags) == -1) ft_quit("set", 2, 42); sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; /* Restart interrupted reads()s */ sa.sa_handler = handler; if (sigaction(SIGINT, &sa, NULL) == -1) ft_quit("sigaction", 2, 42); while ((ready = select(nfds, &readfds, NULL, NULL, pto)) == -1 && errno == EINTR) continue; /* Restart if interrupted by signal */ if (ready == -1) /* Unexpected error */ ft_quit("select", 2, 42); if (FD_ISSET(pfd[0], &readfds)) { /* Handler was called */ printf("A signal was caught\n"); for (;;) { /* Consume bytes from pipe */ if (read(pfd[0], &ch, 1) == -1) { if (errno == EAGAIN) break; /* No more bytes */ else ft_quit("read", 2, 42); } /* Perform any actions that should be taken in response to signal */ } } /* Examine file descriptor sets returned by select() to see which other file descriptors are ready */ printf("ready = %d\n", ready); for (j = 2; j < argc; j++) { fd = getInt(argv[j], 0, "fd"); printf("%d: %s\n", fd, FD_ISSET(fd, &readfds) ? "r" : ""); } /* And check if read end of pipe is ready */ printf("%d: %s (read end of pipe)\n", pfd[0], FD_ISSET(pfd[0], &readfds) ? "r" : ""); if (pto != NULL) printf("timeout after select(): %ld.%03ld\n", (long) timeout.tv_sec, (long) timeout.tv_usec / 1000); exit(EXIT_SUCCESS); }