diff options
Diffstat (limited to 'tools/csv2bin/csv2bin.c')
-rw-r--r-- | tools/csv2bin/csv2bin.c | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/tools/csv2bin/csv2bin.c b/tools/csv2bin/csv2bin.c deleted file mode 100644 index 5c8b5111..00000000 --- a/tools/csv2bin/csv2bin.c +++ /dev/null @@ -1,103 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <stdint.h> -#include <ctype.h> - -char * ReadWholeFile(char * filename) { - FILE * infile = fopen(filename, "rb"); - if (infile == NULL) return NULL; - fseek(infile, 0, SEEK_END); - size_t fsize = ftell(infile); - fseek(infile, 0, SEEK_SET); - char * ret = malloc(fsize); - if (ret != NULL) { - if (fread(ret, 1, fsize, infile) != fsize) { - free(ret); - ret = NULL; - } - } - fclose(infile); - return ret; -} - -int main(int argc, char ** argv) { - int width = 4; - char * buffer = NULL; - char * endptr = NULL; - FILE * outfile = NULL; - char * infname = NULL; - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "--width") == 0) { - ++i; - width = strtol(argv[i], &endptr, 10); - if (width == 0) { - fprintf(stderr, "invalid integer value for %s: %s\n", argv[i - 1], argv[i]); - return EXIT_FAILURE; - } - } else if (strcmp(argv[i], "-o") == 0 || strcmp(argv[i], "--output") == 0) { - ++i; - outfile = fopen(argv[i], "wb"); - if (outfile == NULL) { - fprintf(stderr, "unable to open file '%s' for writing\n", argv[i]); - return EXIT_FAILURE; - } - } else { - if (buffer == NULL) - { - buffer = ReadWholeFile(argv[i]); - } - if (buffer == NULL) - { - fprintf(stderr, "invalid argument: %s\n", argv[i]); - return EXIT_FAILURE; - } - infname = argv[i]; - } - } - if (buffer == NULL) { - fprintf(stderr, "missing required argument: INFILE\n"); - return EXIT_FAILURE; - } - if (outfile == NULL) { - char * infname_ext = strrchr(infname, '.'); - char * outfname = malloc(infname_ext - infname + 5); - char * outfname_ext = stpncpy(outfname, argv[1], infname_ext - argv[1]); - strcpy(outfname_ext, ".bin"); - outfile = fopen(outfname, "wb"); - if (outfile == NULL) { - fprintf(stderr, "unable to open file '%s' for writing\n", outfname); - return EXIT_FAILURE; - } - free(outfname); - } - uint32_t value; - size_t size = 0; - char * ptr = buffer; - char * end = NULL; - int lineno = 1; - int colno = 1; - while (1) { - while (isspace(*ptr) || *ptr == ',') { - if (*ptr == 0) break; - if (*ptr == '\n') - { lineno++; colno = 1; } - if (*ptr == ',') colno++; - ptr++; - }; - if (*ptr == 0) break; - value = strtoul(ptr, &end, 10); - if (value == 0 && ptr == end) { - fprintf(stderr, "syntax error: %d:%d\n", lineno, colno); - return EXIT_FAILURE; - } - if (fwrite(&value, 1, width, outfile) != width) { - fprintf(stderr, "write error\n"); - return EXIT_FAILURE; - } - ptr = end; - } - fclose(outfile); - free(buffer); - return EXIT_SUCCESS; -} |