diff options
Diffstat (limited to 'gnu/dist/cvs/src/logmsg.c')
| -rw-r--r-- | gnu/dist/cvs/src/logmsg.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gnu/dist/cvs/src/logmsg.c b/gnu/dist/cvs/src/logmsg.c index 52ea9bc512a..d07df533f03 100644 --- a/gnu/dist/cvs/src/logmsg.c +++ b/gnu/dist/cvs/src/logmsg.c @@ -182,7 +182,6 @@ do_editor (dir, messagep, repository, changes) char *fname; struct stat pre_stbuf, post_stbuf; int retcode = 0; - char *p; if (noexec || reuse_log_message) return; @@ -216,7 +215,6 @@ do_editor (dir, messagep, repository, changes) { FILE *tfp; char buf[1024]; - char *p; size_t n; size_t nwrite; @@ -231,9 +229,9 @@ do_editor (dir, messagep, repository, changes) { while (!feof (tfp)) { + char *p = buf; n = fread (buf, 1, sizeof buf, tfp); nwrite = n; - p = buf; while (nwrite > 0) { n = fwrite (p, 1, nwrite, fp); @@ -315,7 +313,8 @@ do_editor (dir, messagep, repository, changes) if (*messagep) { - p = *messagep; + size_t message_len = post_stbuf.st_size + 1; + size_t offset = 0; while (1) { line_length = getline (&line, &line_chars_allocated, fp); @@ -327,8 +326,11 @@ do_editor (dir, messagep, repository, changes) } if (strncmp (line, CVSEDITPREFIX, CVSEDITPREFIXLEN) == 0) continue; - (void) strcpy (p, line); - p += line_length; + if (offset + line_length >= message_len) + expand_string (messagep, &message_len, + offset + line_length + 1); + (void) strcpy (*messagep + offset, line); + offset += line_length; } } if (fclose (fp) < 0) |
