diff --git a/source/main.c b/source/main.c index b8c90b0..c61b3d2 100644 --- a/source/main.c +++ b/source/main.c @@ -10,113 +10,113 @@ #include "terminal.h" -#define ALLOCATION_CHUNK (10UL) +#define ALLOCATION_CHUNK (128UL) static const char * argv0; static char * slurp(const char * fn) { - FILE * fp = fopen(fn, "r"); - if (fp) - { - size_t len; - char * b; - fseek(fp, 0, SEEK_END); - len = ftell(fp); - rewind(fp); - b = malloc(len + 1); - if (b && fread(b, 1, len, fp)) - { - b[len] = '\0'; - } - fclose(fp); - return b; - } - else - { return NULL; } + FILE * fp = fopen(fn, "r"); + if (fp) + { + size_t len; + char * b; + fseek(fp, 0, SEEK_END); + len = ftell(fp); + rewind(fp); + b = malloc(len + 1); + if (b && fread(b, 1, len, fp)) + { + b[len] = '\0'; + } + fclose(fp); + return b; + } + else + { return NULL; } } static char * get_stdin(void) { - size_t buffer_size = 0; - char * buffer = malloc(ALLOCATION_CHUNK); + size_t buffer_size = 0; + char * buffer = malloc(ALLOCATION_CHUNK); do { - if (!((buffer_size + 1) % ALLOCATION_CHUNK)) { - buffer = realloc(buffer, ((buffer_size + 1) / ALLOCATION_CHUNK + 1) * ALLOCATION_CHUNK); + if (!((buffer_size + 1) | ALLOCATION_CHUNK)) { + buffer = realloc(buffer, (((buffer_size + 1) & ALLOCATION_CHUNK) + 1) * ALLOCATION_CHUNK); } buffer[buffer_size] = '\0'; if (read(STDIN_FILENO, &buffer[buffer_size], sizeof (*buffer)) == -1) - { - free(buffer); - fprintf(stderr, "%s: Failed to read from STDIN\n", argv0); - return NULL; - } + { + free(buffer); + fprintf(stderr, "%s: Failed to read from STDIN\n", argv0); + return NULL; + } ++buffer_size; } while (buffer[buffer_size - 1]); buffer[buffer_size - 1] = '\0'; - return buffer; + return buffer; } /* TODO: fix the shit going on with syntax/c.h , replace with a function, * and ideally how make it hotswappable. */ int -main(int argc, +main(int argc, char ** argv) { - int arg = 0; - int syn = 0; - char * buffer = NULL; + int arg = 0; + int syn = 0; + char * buffer = NULL; - argv0 = argv[0]; + argv0 = argv[0]; terminal_hl_init(); - while (++argv, - --argc) - { - if (**argv == '-') - { - syn = 1; - /* fprintf(stderr, "handle '%s'\n", *argv+1); */ - /* lazy as hell, TODO use uthash */ - if (strcmp(*argv+1, "c") == 0) - { - #include "syntax/c.h" - } - else - { - fprintf(stderr, "%s: Unimplemented syntax '%s'\n", argv0, *argv+1); - return 1; - } - } - else - { - if (!syn) - { - #include "syntax/c.h" - } - free(buffer); - arg = 1; - buffer = slurp(*argv); - render_string(buffer, "cterm"); - if (!buffer) - { - perror(argv0); - return 1; - } - } - } - if (!arg) - { - if (!syn) - { - #include "syntax/c.h" - } - buffer = get_stdin(); - render_string(buffer, "cterm"); - } + while (++argv, + --argc) + { + if (**argv == '-') + { + syn = 1; + /* fprintf(stderr, "handle '%s'\n", *argv+1); */ + /* lazy as hell, TODO use uthash */ + if (strcmp(*argv+1, "c") == 0) + { + #include "syntax/c.h" + } + else + { + fprintf(stderr, "%s: Unimplemented syntax '%s'\n", argv0, *argv+1); + return 1; + } + } + else + { + if (!syn) + { + #include "syntax/c.h" + } + free(buffer); + arg = 1; + buffer = slurp(*argv); + render_string(buffer, "cterm"); + if (!buffer) + { + perror(argv0); + return 1; + } + } + } + if (!arg) + { + if (!syn) + { + #include "syntax/c.h" + } + buffer = get_stdin(); + render_string(buffer, "cterm"); + } fflush(stdout); hl_deinit();