#include #include #include #include #include #include #include #define WIDTH 10 void usage(const char *progname) { fprintf(stderr, "usage: %s [-r ] [-w ]\n", progname); } int main(int argc, char *argv[]) { FILE *fp; uint8_t buf[1]; int i = 0; int opt; char *redir = NULL; unsigned int width = WIDTH; bool r = false; if (argc < 2) { usage(argv[0]); return EXIT_FAILURE; } while ((opt = getopt(argc, argv, "w:r:")) != -1) { switch (opt) { case 'w': width = atoi(optarg); break; case 'r': redir = optarg; break; default: usage(argv[0]); return EXIT_FAILURE; } } argc -= optind; argv += optind; fp = fopen(argv[0], "rb"); if (fp == NULL) { fprintf(stderr, "Unable to open %s: %s\n", argv[1], strerror(errno)); return EXIT_FAILURE; } printf("echo -ne \""); while(fread(buf, 1, 1, fp)) { i++; printf("\\x%02x", buf[0]); if (i % width == 0) { if (redir) { printf("\" %s %s\n", r ? ">>" : ">", redir); r = true; } else { printf("\"\n"); } printf("echo -ne \""); } } if (i % WIDTH != 0) printf("\"\n"); fclose(fp); return EXIT_SUCCESS; }