Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/majn/tgl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2016-01-01 17:35:54 +0300
committermjentsch <mtthsjntsch@gmail.com>2016-01-07 02:17:34 +0300
commit8e6224ed463b7db5ba4803a4c13797ecffae6104 (patch)
tree316a4f6529e2c03cd5bc46505af10ed97100ffcb
parentec0b19630f88ebe3b68e855f49ef134f0e98e943 (diff)
make generate work on windows
-rw-r--r--generate.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/generate.c b/generate.c
index 4fbb91b..a89963c 100644
--- a/generate.c
+++ b/generate.c
@@ -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);