int main(int argc, char **argv) { const char *ttypath, *imgpath; int rv, rc, tty, term, prot, patch; void *bootmsg; void *debugmsg; void *img; size_t size; speed_t speed; rv = 1; tty = -1; bootmsg = NULL; debugmsg = NULL; imgpath = NULL; img = NULL; term = 0; patch = 0; size = 0; speed = B115200; kwboot_verbose = isatty(STDOUT_FILENO); do { int c = getopt(argc, argv, "hb:ptaB:dD:q:s:"); if (c < 0) break; switch (c) { case 'b': bootmsg = kwboot_msg_boot; imgpath = optarg; break; case 'D': bootmsg = NULL; imgpath = optarg; break; case 'd': debugmsg = kwboot_msg_debug; break; case 'p': patch = 1; break; case 't': term = 1; break; case 'a': msg_req_delay = KWBOOT_MSG_REQ_DELAY_AXP; msg_rsp_timeo = KWBOOT_MSG_RSP_TIMEO_AXP; break; case 'q': msg_req_delay = atoi(optarg); break; case 's': msg_rsp_timeo = atoi(optarg); break; case 'B': speed = kwboot_tty_speed(atoi(optarg)); if (speed == -1) goto usage; break; case 'h': rv = 0; default: goto usage; } } while (1); if (!bootmsg && !term && !debugmsg) goto usage; if (patch && !imgpath) goto usage; if (argc - optind < 1) goto usage; ttypath = argv[optind++]; tty = kwboot_open_tty(ttypath, speed); if (tty < 0) { perror(ttypath); goto out; } if (imgpath) { prot = PROT_READ | (patch ? PROT_WRITE : 0); img = kwboot_mmap_image(imgpath, &size, prot); if (!img) { perror(imgpath); goto out; } } if (patch) { rc = kwboot_img_patch_hdr(img, size); if (rc) { fprintf(stderr, "%s: Invalid image.\n", imgpath); goto out; } } if (debugmsg) { rc = kwboot_debugmsg(tty, debugmsg); if (rc) { perror("debugmsg"); goto out; } } else { rc = kwboot_bootmsg(tty, bootmsg); if (rc) { perror("bootmsg"); goto out; } } if (img) { rc = kwboot_xmodem(tty, img, size); if (rc) { perror("xmodem"); goto out; } } if (term) { rc = kwboot_terminal(tty); if (rc && !(errno == EINTR)) { perror("terminal"); goto out; } } rv = 0; out: if (tty >= 0) close(tty); if (img) munmap(img, size); return rv; usage: kwboot_usage(rv ? stderr : stdout, basename(argv[0])); goto out; }
int main(int argc, char **argv) { const char *ttypath, *imgpath; int rv, rc, tty, term; void *bootmsg; void *debugmsg; void *img; size_t size; speed_t speed; rv = 1; tty = -1; bootmsg = NULL; debugmsg = NULL; imgpath = NULL; img = NULL; term = 0; size = 0; speed = B115200; kwboot_verbose = isatty(STDOUT_FILENO); do { int c = getopt(argc, argv, "hb:dtB:D:"); if (c < 0) break; switch (c) { case 'b': bootmsg = kwboot_msg_boot; imgpath = optarg; break; case 'D': bootmsg = NULL; imgpath = optarg; break; case 'd': debugmsg = kwboot_msg_debug; break; case 't': term = 1; break; case 'B': speed = kwboot_tty_speed(atoi(optarg)); if (speed == -1) goto usage; break; case 'h': rv = 0; default: goto usage; } } while (1); if (!bootmsg && !term && !debugmsg) goto usage; if (argc - optind < 1) goto usage; ttypath = argv[optind++]; tty = kwboot_open_tty(ttypath, speed); if (tty < 0) { perror(ttypath); goto out; } if (imgpath) { img = kwboot_mmap_image(imgpath, &size, PROT_READ); if (!img) { perror(imgpath); goto out; } } if (debugmsg) { rc = kwboot_debugmsg(tty, debugmsg); if (rc) { perror("debugmsg"); goto out; } } else { rc = kwboot_bootmsg(tty, bootmsg); if (rc) { perror("bootmsg"); goto out; } } if (img) { rc = kwboot_xmodem(tty, img, size); if (rc) { perror("xmodem"); goto out; } } if (term) { rc = kwboot_terminal(tty); if (rc && !(errno == EINTR)) { perror("terminal"); goto out; } } rv = 0; out: if (tty >= 0) close(tty); if (img) munmap(img, size); return rv; usage: kwboot_usage(rv ? stderr : stdout, basename(argv[0])); goto out; }