diff options
author | Eion Robb <eion@robbmob.com> | 2016-01-01 17:35:54 +0300 |
---|---|---|
committer | mjentsch <mtthsjntsch@gmail.com> | 2016-01-07 02:17:34 +0300 |
commit | 8e6224ed463b7db5ba4803a4c13797ecffae6104 (patch) | |
tree | 316a4f6529e2c03cd5bc46505af10ed97100ffcb | |
parent | ec0b19630f88ebe3b68e855f49ef134f0e98e943 (diff) |
make generate work on windows
-rw-r--r-- | generate.c | 25 |
1 files changed, 23 insertions, 2 deletions
@@ -2987,6 +2987,27 @@ void sig_abrt_handler (int signum __attribute__ ((unused))) { exit (EXIT_FAILURE); } +static int +read_all(int fd, void *buf, size_t len) +{ + unsigned int rs = 0; + while(rs < len) + { + int rval = read(fd, buf + rs, len - rs); + if (rval == 0) + break; + if (rval < 0) + return rval; + + rs += rval; + } + return rs; +} + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + int main (int argc, char **argv) { signal (SIGSEGV, sig_segv_handler); signal (SIGABRT, sig_abrt_handler); @@ -3013,12 +3034,12 @@ int main (int argc, char **argv) { usage (); } - int fd = open (argv[optind], O_RDONLY); + int fd = open (argv[optind], O_RDONLY | O_BINARY); if (fd < 0) { fprintf (stderr, "Can not open file '%s'. Error %s\n", argv[optind], strerror(errno)); exit (1); } - buf_size = read (fd, buf, (1 << 20)); + buf_size = read_all (fd, buf, (1 << 20)); if (fd == (1 << 20)) { fprintf (stderr, "Too big tlo file\n"); exit (2); |