Revision 56d7c27af1f8aa7519f165f6c022732e64db3716 authored by Jeff King on 26 May 2011, 16:30:27 UTC, committed by Junio C Hamano on 26 May 2011, 20:54:18 UTC
The read_in_full function repeatedly calls read() to fill a
buffer. If the first read() returns an error, we notify the
caller by returning the error. However, if we read some data
and then get an error on a subsequent read, we simply return
the amount of data that we did read, and the caller is
unaware of the error.

This makes the tradeoff that seeing the partial data is more
important than the fact that an error occurred. In practice,
this is generally not the case; we care more if an error
occurred, and should throw away any partial data.

I audited the current callers. In most cases, this will make
no difference at all, as they do:

  if (read_in_full(fd, buf, size) != size)
	  error("short read");

However, it will help in a few cases:

  1. In sha1_file.c:index_stream, we would fail to notice
     errors in the incoming stream.

  2. When reading symbolic refs in resolve_ref, we would
     fail to notice errors and potentially use a truncated
     ref name.

  3. In various places, we will get much better error
     messages. For example, callers of safe_read would
     erroneously print "the remote end hung up unexpectedly"
     instead of showing the read error.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 09ffc70
History
File Mode Size
Documentation
block-sha1
builtin
compat
contrib
git-gui
git_remote_helpers
gitk-git
gitweb
perl
po
ppc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 105 bytes
.gitignore -rw-r--r-- 3.0 KB
.mailmap -rw-r--r-- 2.7 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 754 bytes
INSTALL -rw-r--r-- 7.5 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 68.3 KB
README -rw-r--r-- 2.4 KB
RelNotes l--------- 34 bytes
abspath.c -rw-r--r-- 3.4 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 1.4 KB
advice.h -rw-r--r-- 432 bytes
alias.c -rw-r--r-- 1.7 KB
alloc.c -rw-r--r-- 1.6 KB
archive-tar.c -rw-r--r-- 6.3 KB
archive-zip.c -rw-r--r-- 7.3 KB
archive.c -rw-r--r-- 10.3 KB
archive.h -rw-r--r-- 927 bytes
attr.c -rw-r--r-- 17.2 KB
attr.h -rw-r--r-- 972 bytes
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 23.9 KB
bisect.h -rw-r--r-- 820 bytes
blob.c -rw-r--r-- 565 bytes
blob.h -rw-r--r-- 664 bytes
branch.c -rw-r--r-- 5.6 KB
branch.h -rw-r--r-- 1.1 KB
builtin.h -rw-r--r-- 8.8 KB
bundle.c -rw-r--r-- 10.3 KB
bundle.h -rw-r--r-- 627 bytes
cache-tree.c -rw-r--r-- 15.7 KB
cache-tree.h -rw-r--r-- 1.4 KB
cache.h -rw-r--r-- 40.5 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 538 bytes
check_bindir -rwxr-xr-x 369 bytes
color.c -rw-r--r-- 4.3 KB
color.h -rw-r--r-- 2.4 KB
combine-diff.c -rw-r--r-- 27.9 KB
command-list.txt -rw-r--r-- 7.7 KB
commit.c -rw-r--r-- 19.9 KB
commit.h -rw-r--r-- 5.5 KB
config.c -rw-r--r-- 34.3 KB
config.mak.in -rw-r--r-- 1.7 KB
configure.ac -rw-r--r-- 27.6 KB
connect.c -rw-r--r-- 14.1 KB
convert.c -rw-r--r-- 19.0 KB
copy.c -rw-r--r-- 1.6 KB
csum-file.c -rw-r--r-- 2.5 KB
csum-file.h -rw-r--r-- 761 bytes
ctype.c -rw-r--r-- 873 bytes
daemon.c -rw-r--r-- 27.5 KB
date.c -rw-r--r-- 22.7 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 400 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 15.5 KB
diff-lib.c -rw-r--r-- 14.5 KB
diff-no-index.c -rw-r--r-- 6.1 KB
diff.c -rw-r--r-- 117.9 KB
diff.h -rw-r--r-- 10.3 KB
diffcore-break.c -rw-r--r-- 8.7 KB
diffcore-delta.c -rw-r--r-- 5.4 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 6.8 KB
diffcore-rename.c -rw-r--r-- 17.3 KB
diffcore.h -rw-r--r-- 4.3 KB
dir.c -rw-r--r-- 30.4 KB
dir.h -rw-r--r-- 3.3 KB
editor.c -rw-r--r-- 1.1 KB
entry.c -rw-r--r-- 5.9 KB
environment.c -rw-r--r-- 6.2 KB
exec_cmd.c -rw-r--r-- 3.2 KB
exec_cmd.h -rw-r--r-- 487 bytes
fast-import.c -rw-r--r-- 83.5 KB
fetch-pack.h -rw-r--r-- 479 bytes
fixup-builtins -rwxr-xr-x 432 bytes
fsck.c -rw-r--r-- 9.4 KB
fsck.h -rw-r--r-- 1.0 KB
generate-cmdlist.sh -rwxr-xr-x 443 bytes
gettext.c -rw-r--r-- 290 bytes
gettext.h -rw-r--r-- 975 bytes
git-add--interactive.perl -rwxr-xr-x 35.1 KB
git-am.sh -rwxr-xr-x 19.5 KB
git-archimport.perl -rwxr-xr-x 36.0 KB
git-bisect.sh -rwxr-xr-x 10.1 KB
git-compat-util.h -rw-r--r-- 13.9 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.4 KB
git-cvsimport.perl -rwxr-xr-x 29.5 KB
git-cvsserver.perl -rwxr-xr-x 118.0 KB
git-difftool--helper.sh -rwxr-xr-x 1.7 KB
git-difftool.perl -rwxr-xr-x 2.6 KB
git-filter-branch.sh -rwxr-xr-x 12.0 KB
git-instaweb.sh -rwxr-xr-x 17.4 KB
git-lost-found.sh -rwxr-xr-x 554 bytes
git-merge-octopus.sh -rwxr-xr-x 2.2 KB
git-merge-one-file.sh -rwxr-xr-x 3.8 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 9.3 KB
git-mergetool.sh -rwxr-xr-x 8.7 KB
git-parse-remote.sh -rw-r--r-- 1.3 KB
git-pull.sh -rwxr-xr-x 8.3 KB
git-quiltimport.sh -rwxr-xr-x 3.3 KB
git-rebase--interactive.sh -rwxr-xr-x 26.0 KB
git-rebase.sh -rwxr-xr-x 14.6 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote-testgit.py -rw-r--r-- 5.1 KB
git-repack.sh -rwxr-xr-x 4.5 KB
git-request-pull.sh -rwxr-xr-x 1.6 KB
git-send-email.perl -rwxr-xr-x 38.8 KB
git-sh-setup.sh -rw-r--r-- 4.6 KB
git-stash.sh -rwxr-xr-x 9.9 KB
git-submodule.sh -rwxr-xr-x 18.5 KB
git-svn.perl -rwxr-xr-x 173.9 KB
git-web--browse.sh -rwxr-xr-x 4.1 KB
git.c -rw-r--r-- 16.0 KB
git.spec.in -rw-r--r-- 10.7 KB
graph.c -rw-r--r-- 34.8 KB
graph.h -rw-r--r-- 3.6 KB
grep.c -rw-r--r-- 23.8 KB
grep.h -rw-r--r-- 2.7 KB
hash.c -rw-r--r-- 2.5 KB
hash.h -rw-r--r-- 1.1 KB
help.c -rw-r--r-- 9.4 KB
help.h -rw-r--r-- 906 bytes
hex.c -rw-r--r-- 2.1 KB
http-backend.c -rw-r--r-- 13.2 KB
http-fetch.c -rw-r--r-- 2.1 KB
http-push.c -rw-r--r-- 54.3 KB
http-walker.c -rw-r--r-- 13.9 KB
http.c -rw-r--r-- 33.0 KB
http.h -rw-r--r-- 5.1 KB
ident.c -rw-r--r-- 6.1 KB
imap-send.c -rw-r--r-- 35.2 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
list-objects.c -rw-r--r-- 5.3 KB
list-objects.h -rw-r--r-- 422 bytes
ll-merge.c -rw-r--r-- 10.0 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 6.2 KB
log-tree.c -rw-r--r-- 16.7 KB
log-tree.h -rw-r--r-- 867 bytes
mailmap.c -rw-r--r-- 6.5 KB
mailmap.h -rw-r--r-- 263 bytes
match-trees.c -rw-r--r-- 8.7 KB
merge-file.c -rw-r--r-- 2.6 KB
merge-recursive.c -rw-r--r-- 49.1 KB
merge-recursive.h -rw-r--r-- 1.7 KB
name-hash.c -rw-r--r-- 4.6 KB
notes-cache.c -rw-r--r-- 2.1 KB
notes-cache.h -rw-r--r-- 500 bytes
notes-merge.c -rw-r--r-- 22.6 KB
notes-merge.h -rw-r--r-- 3.4 KB
notes.c -rw-r--r-- 35.5 KB
notes.h -rw-r--r-- 11.7 KB
object.c -rw-r--r-- 5.8 KB
object.h -rw-r--r-- 2.5 KB
pack-check.c -rw-r--r-- 4.6 KB
pack-refs.c -rw-r--r-- 3.4 KB
pack-refs.h -rw-r--r-- 465 bytes
pack-revindex.c -rw-r--r-- 4.0 KB
pack-revindex.h -rw-r--r-- 223 bytes
pack-write.c -rw-r--r-- 8.0 KB
pack.h -rw-r--r-- 2.3 KB
pager.c -rw-r--r-- 2.2 KB
parse-options.c -rw-r--r-- 17.1 KB
parse-options.h -rw-r--r-- 7.7 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 2.5 KB
patch-ids.h -rw-r--r-- 490 bytes
path.c -rw-r--r-- 14.8 KB
pkt-line.c -rw-r--r-- 4.5 KB
pkt-line.h -rw-r--r-- 589 bytes
preload-index.c -rw-r--r-- 2.4 KB
pretty.c -rw-r--r-- 31.9 KB
progress.c -rw-r--r-- 6.5 KB
progress.h -rw-r--r-- 504 bytes
quote.c -rw-r--r-- 10.9 KB
quote.h -rw-r--r-- 2.7 KB
reachable.c -rw-r--r-- 5.5 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 45.2 KB
reflog-walk.c -rw-r--r-- 7.6 KB
reflog-walk.h -rw-r--r-- 664 bytes
refs.c -rw-r--r-- 46.4 KB
refs.h -rw-r--r-- 4.7 KB
remote-curl.c -rw-r--r-- 20.6 KB
remote.c -rw-r--r-- 41.2 KB
remote.h -rw-r--r-- 4.2 KB
replace_object.c -rw-r--r-- 2.6 KB
rerere.c -rw-r--r-- 15.8 KB
rerere.h -rw-r--r-- 736 bytes
resolve-undo.c -rw-r--r-- 3.9 KB
resolve-undo.h -rw-r--r-- 546 bytes
revision.c -rw-r--r-- 60.1 KB
revision.h -rw-r--r-- 4.9 KB
run-command.c -rw-r--r-- 13.3 KB
run-command.h -rw-r--r-- 2.8 KB
send-pack.h -rw-r--r-- 403 bytes
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 17.7 KB
sha1-lookup.c -rw-r--r-- 7.8 KB
sha1-lookup.h -rw-r--r-- 403 bytes
sha1_file.c -rw-r--r-- 67.5 KB
sha1_name.c -rw-r--r-- 28.5 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 5.1 KB
shortlog.h -rw-r--r-- 463 bytes
show-index.c -rw-r--r-- 2.2 KB
sideband.c -rw-r--r-- 3.4 KB
sideband.h -rw-r--r-- 326 bytes
sigchain.c -rw-r--r-- 969 bytes
sigchain.h -rw-r--r-- 215 bytes
strbuf.c -rw-r--r-- 7.9 KB
strbuf.h -rw-r--r-- 3.6 KB
string-list.c -rw-r--r-- 4.5 KB
string-list.h -rw-r--r-- 2.1 KB
submodule.c -rw-r--r-- 20.3 KB
submodule.h -rw-r--r-- 1.3 KB
symlinks.c -rw-r--r-- 8.4 KB
tag.c -rw-r--r-- 3.5 KB
tag.h -rw-r--r-- 517 bytes
tar.h -rw-r--r-- 644 bytes
test-chmtime.c -rw-r--r-- 2.6 KB
test-ctype.c -rw-r--r-- 1.4 KB
test-date.c -rw-r--r-- 1.4 KB
test-delta.c -rw-r--r-- 1.8 KB
test-dump-cache-tree.c -rw-r--r-- 1.5 KB
test-genrandom.c -rw-r--r-- 722 bytes
test-index-version.c -rw-r--r-- 264 bytes
test-line-buffer.c -rw-r--r-- 2.1 KB
test-match-trees.c -rw-r--r-- 588 bytes
test-mktemp.c -rw-r--r-- 269 bytes
test-obj-pool.c -rw-r--r-- 2.5 KB
test-parse-options.c -rw-r--r-- 3.0 KB
test-path-utils.c -rw-r--r-- 854 bytes
test-run-command.c -rw-r--r-- 774 bytes
test-sha1.c -rw-r--r-- 816 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
test-sigchain.c -rw-r--r-- 344 bytes
test-string-pool.c -rw-r--r-- 654 bytes
test-subprocess.c -rw-r--r-- 387 bytes
test-svn-fe.c -rw-r--r-- 312 bytes
test-treap.c -rw-r--r-- 1.7 KB
thread-utils.c -rw-r--r-- 1.3 KB
thread-utils.h -rw-r--r-- 209 bytes
trace.c -rw-r--r-- 4.7 KB
transport-helper.c -rw-r--r-- 28.4 KB
transport.c -rw-r--r-- 30.3 KB
transport.h -rw-r--r-- 5.7 KB
tree-diff.c -rw-r--r-- 8.6 KB
tree-walk.c -rw-r--r-- 14.6 KB
tree-walk.h -rw-r--r-- 1.9 KB
tree.c -rw-r--r-- 7.0 KB
tree.h -rw-r--r-- 883 bytes
unimplemented.sh -rw-r--r-- 100 bytes
unpack-trees.c -rw-r--r-- 46.0 KB
unpack-trees.h -rw-r--r-- 2.1 KB
upload-pack.c -rw-r--r-- 17.9 KB
url.c -rw-r--r-- 3.0 KB
url.h -rw-r--r-- 437 bytes
usage.c -rw-r--r-- 2.4 KB
userdiff.c -rw-r--r-- 8.3 KB
userdiff.h -rw-r--r-- 566 bytes
utf8.c -rw-r--r-- 13.0 KB
utf8.h -rw-r--r-- 658 bytes
walker.c -rw-r--r-- 7.2 KB
walker.h -rw-r--r-- 1.1 KB
wrap-for-bin.sh -rw-r--r-- 610 bytes
wrapper.c -rw-r--r-- 8.1 KB
write_or_die.c -rw-r--r-- 2.0 KB
ws.c -rw-r--r-- 9.6 KB
wt-status.c -rw-r--r-- 25.8 KB
wt-status.h -rw-r--r-- 2.1 KB
xdiff-interface.c -rw-r--r-- 8.2 KB
xdiff-interface.h -rw-r--r-- 1.1 KB
zlib.c -rw-r--r-- 1.2 KB

README

back to top