aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2013-06-11 18:44:10 +0300
committerArnold D. Robbins <arnold@skeeve.com>2013-06-11 18:44:10 +0300
commit612ea8d837f14a15a44c2d4941ff62c0ebf30461 (patch)
tree1770be5b52e131c0b2150c72a1f42c2301d17c51
parent21c8b6d547b12942775d675ead2994992285c04c (diff)
downloadegawk-612ea8d837f14a15a44c2d4941ff62c0ebf30461.tar.gz
egawk-612ea8d837f14a15a44c2d4941ff62c0ebf30461.tar.bz2
egawk-612ea8d837f14a15a44c2d4941ff62c0ebf30461.zip
Improve fix for debugger on Windows.
-rw-r--r--ChangeLog8
-rw-r--r--debug.c7
-rw-r--r--io.c15
3 files changed, 22 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 29617a3a..673fb6bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-06-11 Arnold D. Robbins <arnold@skeeve.com>
+
+ * debug.c (print_lines): Move setting of binary mode to after all
+ the messing with the fd. Simplifies code some.
+ * io.c (srcopen): Rearrange so that can add call to setbinmode
+ here too. This fixes the debugger and makes reading source
+ files a little faster. Thanks again to Corinna Vinschen.
+
2013-06-10 Arnold D. Robbins <arnold@skeeve.com>
* debug.c (print_lines): Set binary mode so that calculation of the
diff --git a/debug.c b/debug.c
index 6d3936b1..0cb9d562 100644
--- a/debug.c
+++ b/debug.c
@@ -519,9 +519,6 @@ print_lines(char *src, int start_line, int nlines)
return -1;
}
- /* set binary mode so that byte offset calculations will be right */
- os_setbinmode(s->fd, O_BINARY);
-
if (fstat(s->fd, &sbuf) == 0 && s->mtime < sbuf.st_mtime) {
fprintf(out_fp, _("WARNING: source file `%s' modified since program compilation.\n"),
src);
@@ -537,9 +534,11 @@ print_lines(char *src, int start_line, int nlines)
src, strerror(errno));
return -1;
}
- os_setbinmode(s->fd, O_BINARY);
}
+ /* set binary mode so that byte offset calculations will be right */
+ os_setbinmode(s->fd, O_BINARY);
+
if (s->line_offset == NULL && find_lines(s) != 0)
return -1;
if (start_line < 1 || start_line > s->srclines) {
diff --git a/io.c b/io.c
index a918c390..44530967 100644
--- a/io.c
+++ b/io.c
@@ -2731,11 +2731,18 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
int
srcopen(SRCFILE *s)
{
+ int fd = INVALID_HANDLE;
+
if (s->stype == SRC_STDIN)
- return fileno(stdin);
- if (s->stype == SRC_FILE || s->stype == SRC_INC)
- return devopen(s->fullpath, "r");
- return INVALID_HANDLE;
+ fd = fileno(stdin);
+ else if (s->stype == SRC_FILE || s->stype == SRC_INC)
+ fd = devopen(s->fullpath, "r");
+
+ /* set binary mode so that debugger byte offset calculations will be right */
+ if (fd != INVALID_HANDLE)
+ os_setbinmode(fd, O_BINARY);
+
+ return fd;
}
/* input parsers, mainly for use by extension functions */