Add building and installing instructions.
[fuzz.git] / fuzz.c
blob4800ce23768ec7243ed4453c8684aacaf95851a8
1 /* fuzz - print many unicode chars to the terminal.
2 *
3 * This program will print every 4-byte combination to the
4 * terminal (though, of course, this could take a *long* time...)
5 *
6 * Copyright (C) 2017 Ethan McTague
7 * Email <ethan@tague.me> for more information.
8 * Licensed under the BSD license - see LICENSE.
9 */
10 #include <stdio.h>
11 #include <string.h>
13 void fuzz(const char* before, int num);
14 void help(const char* progName);
15 void version();
16 void badArgs(const char* progName);
17 void readArgs(int argc, char* argv[], int* showHelp, int* showVersion, int* runFuzz);
19 int main (int argc, char* argv[]) {
20 int showHelp = 0;
21 int showVersion = 0;
22 int runFuzz = 0;
23 readArgs(argc, argv, &showHelp, &showVersion, &runFuzz);
25 if (showHelp) help(argv[0]);
26 else if (showVersion) version();
27 else if (runFuzz) fuzz("", 4);
28 else badArgs(argv[0]);
29 return 0;
32 void fuzz(const char* before, int num) {
33 for (int ch = 0; ch < 0x7FFFFFF; ch++) {
34 int size = num + strlen(before) + 1;
35 char buffer[size];
36 snprintf(buffer, size, "%s%c", before, ch);
37 if (num > 0) fuzz(buffer, num - 1);
38 else printf("%s", buffer);
42 void help(const char* progName) {
43 puts("fuzzer: print many unicode chars to the terminal.");
44 puts("Pipe output to another program to test its input handling.");
45 puts("");
46 printf("Usage: %s [options]\n", progName);
47 puts("Options:");
48 puts(" --help Print this help screen.");
49 puts(" --version Print version information.");
50 puts(" --fuzz Run the Fuzzer.");
51 puts("");
52 puts("Copyright (C) 2017 Ethan McTague");
53 puts("Email <ethan@tague.me> for more information.");
56 void version() {
57 puts("fuzzer 0.0.1");
58 puts("By Ethan McTague");
61 void badArgs(const char* progName) {
62 printf("Bad arguments. Run '%s --help' to learn how to use fuzzer.\n", progName);
65 void readArgs(int argc, char* argv[], int* showHelp, int* showVersion, int* runFuzz) {
66 for (int i = 1; i < argc; i++) {
67 if (!strcmp(argv[i], "--help")) {
68 *showHelp = 1;
69 return;
70 } else if (!strcmp(argv[i], "--version")) {
71 *showVersion = 1;
72 return;
73 } else if (!strcmp(argv[i], "--fuzz")) {
74 *runFuzz = 1;
75 return;