* [PATCH 1/2] prefer xwrite instead of write @ 2014-01-17 14:17 Erik Faye-Lund 2014-01-17 14:17 ` [PATCH 2/2] mingw: remove mingw_write Erik Faye-Lund 2014-01-17 18:21 ` [PATCH 1/2] prefer xwrite instead of write Jonathan Nieder 0 siblings, 2 replies; 7+ messages in thread From: Erik Faye-Lund @ 2014-01-17 14:17 UTC (permalink / raw) To: git; +Cc: msysgit, Erik Faye-Lund Our xwrite wrapper already deals with a few potential hazards, and are as such more robust. Prefer it instead of write to get the robustness benefits everywhere. Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> --- With this patch, we don't call write directly any more; all calls goes via the xwrite-wrapper. builtin/merge.c | 2 +- streaming.c | 2 +- transport-helper.c | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/builtin/merge.c b/builtin/merge.c index 4941a6c..9383c31 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead sha1_to_hex(commit->object.sha1)); pretty_print_commit(&ctx, commit, &out); } - if (write(fd, out.buf, out.len) < 0) + if (xwrite(fd, out.buf, out.len) < 0) die_errno(_("Writing SQUASH_MSG")); if (close(fd)) die_errno(_("Finishing SQUASH_MSG")); diff --git a/streaming.c b/streaming.c index 9659f18..d7c9f32 100644 --- a/streaming.c +++ b/streaming.c @@ -538,7 +538,7 @@ int stream_blob_to_fd(int fd, unsigned const char *sha1, struct stream_filter *f goto close_and_exit; } if (kept && (lseek(fd, kept - 1, SEEK_CUR) == (off_t) -1 || - write(fd, "", 1) != 1)) + xwrite(fd, "", 1) != 1)) goto close_and_exit; result = 0; diff --git a/transport-helper.c b/transport-helper.c index 2010674..bf64ad7 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -1129,9 +1129,8 @@ static int udt_do_write(struct unidirectional_transfer *t) return 0; /* Nothing to write. */ transfer_debug("%s is writable", t->dest_name); - bytes = write(t->dest, t->buf, t->bufuse); - if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN && - errno != EINTR) { + bytes = xwrite(t->dest, t->buf, t->bufuse); + if (bytes < 0 && errno != EWOULDBLOCK) { error("write(%s) failed: %s", t->dest_name, strerror(errno)); return -1; } else if (bytes > 0) { -- 1.8.4.msysgit.0 -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] mingw: remove mingw_write 2014-01-17 14:17 [PATCH 1/2] prefer xwrite instead of write Erik Faye-Lund @ 2014-01-17 14:17 ` Erik Faye-Lund 2014-01-17 18:21 ` [PATCH 1/2] prefer xwrite instead of write Jonathan Nieder 1 sibling, 0 replies; 7+ messages in thread From: Erik Faye-Lund @ 2014-01-17 14:17 UTC (permalink / raw) To: git; +Cc: msysgit, Erik Faye-Lund Since 0b6806b9 ("xread, xwrite: limit size of IO to 8MB"), this wrapper is no longer needed, as read and write are already split into small chunks. Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> --- compat/mingw.c | 17 ----------------- compat/mingw.h | 3 --- 2 files changed, 20 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index fecb98b..e9892f8 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -304,23 +304,6 @@ int mingw_open (const char *filename, int oflags, ...) return fd; } -#undef write -ssize_t mingw_write(int fd, const void *buf, size_t count) -{ - /* - * While write() calls to a file on a local disk are translated - * into WriteFile() calls with a maximum size of 64KB on Windows - * XP and 256KB on Vista, no such cap is placed on writes to - * files over the network on Windows XP. Unfortunately, there - * seems to be a limit of 32MB-28KB on X64 and 64MB-32KB on x86; - * bigger writes fail on Windows XP. - * So we cap to a nice 31MB here to avoid write failures over - * the net without changing the number of WriteFile() calls in - * the local case. - */ - return write(fd, buf, min(count, 31 * 1024 * 1024)); -} - static BOOL WINAPI ctrl_ignore(DWORD type) { return TRUE; diff --git a/compat/mingw.h b/compat/mingw.h index 92cd728..e033e72 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -180,9 +180,6 @@ int mingw_rmdir(const char *path); int mingw_open (const char *filename, int oflags, ...); #define open mingw_open -ssize_t mingw_write(int fd, const void *buf, size_t count); -#define write mingw_write - int mingw_fgetc(FILE *stream); #define fgetc mingw_fgetc -- 1.8.4.msysgit.0 -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] prefer xwrite instead of write 2014-01-17 14:17 [PATCH 1/2] prefer xwrite instead of write Erik Faye-Lund 2014-01-17 14:17 ` [PATCH 2/2] mingw: remove mingw_write Erik Faye-Lund @ 2014-01-17 18:21 ` Jonathan Nieder 2014-01-17 19:07 ` Junio C Hamano 1 sibling, 1 reply; 7+ messages in thread From: Jonathan Nieder @ 2014-01-17 18:21 UTC (permalink / raw) To: Erik Faye-Lund; +Cc: git, msysgit, Ilari Liusvaara Hi, Erik Faye-Lund wrote: > --- a/builtin/merge.c > +++ b/builtin/merge.c > @@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead > sha1_to_hex(commit->object.sha1)); > pretty_print_commit(&ctx, commit, &out); > } > - if (write(fd, out.buf, out.len) < 0) > + if (xwrite(fd, out.buf, out.len) < 0) > die_errno(_("Writing SQUASH_MSG")); Shouldn't this use write_in_full() to avoid a silently truncated result? (*) [...] > --- a/streaming.c > +++ b/streaming.c > @@ -538,7 +538,7 @@ int stream_blob_to_fd(int fd, unsigned const char *sha1, struct stream_filter *f > goto close_and_exit; > } > if (kept && (lseek(fd, kept - 1, SEEK_CUR) == (off_t) -1 || > - write(fd, "", 1) != 1)) > + xwrite(fd, "", 1) != 1)) Yeah, if we get EINTR then it's worth retrying. [...] > --- a/transport-helper.c > +++ b/transport-helper.c > @@ -1129,9 +1129,8 @@ static int udt_do_write(struct unidirectional_transfer *t) > return 0; /* Nothing to write. */ > > transfer_debug("%s is writable", t->dest_name); > - bytes = write(t->dest, t->buf, t->bufuse); > - if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN && > - errno != EINTR) { > + bytes = xwrite(t->dest, t->buf, t->bufuse); > + if (bytes < 0 && errno != EWOULDBLOCK) { Here the write is limited by BUFFERSIZE, and returning to the outer loop to try another read when the write returns EAGAIN, like the original code does, seems philosophically like the right thing to do. Luckily we don't use O_NONBLOCK anywhere, so the change shouldn't matter in practice. So although it doesn't do any good, using xwrite here for consistency should be fine. So my only worry is the (*) above. With that change, Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] prefer xwrite instead of write 2014-01-17 18:21 ` [PATCH 1/2] prefer xwrite instead of write Jonathan Nieder @ 2014-01-17 19:07 ` Junio C Hamano 2014-01-17 19:08 ` Erik Faye-Lund 2014-01-17 20:02 ` Jonathan Nieder 0 siblings, 2 replies; 7+ messages in thread From: Junio C Hamano @ 2014-01-17 19:07 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Erik Faye-Lund, git, msysgit, Ilari Liusvaara Jonathan Nieder <jrnieder@gmail.com> writes: > Hi, > > Erik Faye-Lund wrote: > >> --- a/builtin/merge.c >> +++ b/builtin/merge.c >> @@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead >> sha1_to_hex(commit->object.sha1)); >> pretty_print_commit(&ctx, commit, &out); >> } >> - if (write(fd, out.buf, out.len) < 0) >> + if (xwrite(fd, out.buf, out.len) < 0) >> die_errno(_("Writing SQUASH_MSG")); > > Shouldn't this use write_in_full() to avoid a silently truncated result? (*) Meaning this? If so, I think it makes sense. builtin/merge.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/merge.c b/builtin/merge.c index 6e108d2..a6a38ee 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead sha1_to_hex(commit->object.sha1)); pretty_print_commit(&ctx, commit, &out); } - if (xwrite(fd, out.buf, out.len) < 0) + if (write_in_full(fd, out.buf, out.len) != out.len) die_errno(_("Writing SQUASH_MSG")); if (close(fd)) die_errno(_("Finishing SQUASH_MSG")); > > [...] >> --- a/streaming.c >> +++ b/streaming.c >> @@ -538,7 +538,7 @@ int stream_blob_to_fd(int fd, unsigned const char *sha1, struct stream_filter *f >> goto close_and_exit; >> } >> if (kept && (lseek(fd, kept - 1, SEEK_CUR) == (off_t) -1 || >> - write(fd, "", 1) != 1)) >> + xwrite(fd, "", 1) != 1)) > > Yeah, if we get EINTR then it's worth retrying. > > [...] >> --- a/transport-helper.c >> +++ b/transport-helper.c >> @@ -1129,9 +1129,8 @@ static int udt_do_write(struct unidirectional_transfer *t) >> return 0; /* Nothing to write. */ >> >> transfer_debug("%s is writable", t->dest_name); >> - bytes = write(t->dest, t->buf, t->bufuse); >> - if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN && >> - errno != EINTR) { >> + bytes = xwrite(t->dest, t->buf, t->bufuse); >> + if (bytes < 0 && errno != EWOULDBLOCK) { > > Here the write is limited by BUFFERSIZE, and returning to the outer > loop to try another read when the write returns EAGAIN, like the > original code does, seems philosophically like the right thing to do. > > Luckily we don't use O_NONBLOCK anywhere, so the change shouldn't > matter in practice. So although it doesn't do any good, using xwrite > here for consistency should be fine. > > So my only worry is the (*) above. With that change, > Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> > > -- -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] prefer xwrite instead of write 2014-01-17 19:07 ` Junio C Hamano @ 2014-01-17 19:08 ` Erik Faye-Lund 2014-01-17 20:02 ` Jonathan Nieder 1 sibling, 0 replies; 7+ messages in thread From: Erik Faye-Lund @ 2014-01-17 19:08 UTC (permalink / raw) To: Junio C Hamano Cc: Jonathan Nieder, GIT Mailing-list, msysGit, Ilari Liusvaara On Fri, Jan 17, 2014 at 8:07 PM, Junio C Hamano <gitster@pobox.com> wrote: > Jonathan Nieder <jrnieder@gmail.com> writes: > >> Hi, >> >> Erik Faye-Lund wrote: >> >>> --- a/builtin/merge.c >>> +++ b/builtin/merge.c >>> @@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead >>> sha1_to_hex(commit->object.sha1)); >>> pretty_print_commit(&ctx, commit, &out); >>> } >>> - if (write(fd, out.buf, out.len) < 0) >>> + if (xwrite(fd, out.buf, out.len) < 0) >>> die_errno(_("Writing SQUASH_MSG")); >> >> Shouldn't this use write_in_full() to avoid a silently truncated result? (*) > > Meaning this? If so, I think it makes sense. > Yeah, I think that's better. Thanks, both! -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] prefer xwrite instead of write 2014-01-17 19:07 ` Junio C Hamano 2014-01-17 19:08 ` Erik Faye-Lund @ 2014-01-17 20:02 ` Jonathan Nieder 2014-01-17 20:07 ` Junio C Hamano 1 sibling, 1 reply; 7+ messages in thread From: Jonathan Nieder @ 2014-01-17 20:02 UTC (permalink / raw) To: Junio C Hamano; +Cc: Erik Faye-Lund, git, msysgit, Ilari Liusvaara Junio C Hamano wrote: > Jonathan Nieder <jrnieder@gmail.com> writes: >> Shouldn't this use write_in_full() to avoid a silently truncated result? (*) > > Meaning this? If so, I think it makes sense. [...] > - if (xwrite(fd, out.buf, out.len) < 0) > + if (write_in_full(fd, out.buf, out.len) != out.len) Yes. Either '< 0' or '!= out.len' would work fine here, since write_in_full is defined to always either write the full 'count' bytes or return an error. Thanks, Jonathan -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] prefer xwrite instead of write 2014-01-17 20:02 ` Jonathan Nieder @ 2014-01-17 20:07 ` Junio C Hamano 0 siblings, 0 replies; 7+ messages in thread From: Junio C Hamano @ 2014-01-17 20:07 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Erik Faye-Lund, git, msysgit, Ilari Liusvaara Jonathan Nieder <jrnieder@gmail.com> writes: > Junio C Hamano wrote: >> Jonathan Nieder <jrnieder@gmail.com> writes: > >>> Shouldn't this use write_in_full() to avoid a silently truncated result? (*) >> >> Meaning this? If so, I think it makes sense. > [...] >> - if (xwrite(fd, out.buf, out.len) < 0) >> + if (write_in_full(fd, out.buf, out.len) != out.len) > > Yes. Either '< 0' or '!= out.len' would work fine here, since > write_in_full is defined to always either write the full 'count' > bytes or return an error. An unrelated tangent but we may want to fix majority of callers that do not seem to know that ;-) -- -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en --- You received this message because you are subscribed to the Google Groups "msysGit" group. To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-01-17 20:07 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-01-17 14:17 [PATCH 1/2] prefer xwrite instead of write Erik Faye-Lund 2014-01-17 14:17 ` [PATCH 2/2] mingw: remove mingw_write Erik Faye-Lund 2014-01-17 18:21 ` [PATCH 1/2] prefer xwrite instead of write Jonathan Nieder 2014-01-17 19:07 ` Junio C Hamano 2014-01-17 19:08 ` Erik Faye-Lund 2014-01-17 20:02 ` Jonathan Nieder 2014-01-17 20:07 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).