* [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).