Revision 3ebbd00cf3c5a7c6f90e2fed8adaf0c5145fb4ac authored by Jim Hill on 31 May 2015, 18:16:45 UTC, committed by Junio C Hamano on 10 August 2015, 19:51:13 UTC
The loop in strbuf_read() uses xread() repeatedly while extending
the strbuf until the call returns zero.  If the buffer is
sufficiently large to begin with, this results in xread()
returning the remainder of the file to the end (returning
non-zero), the loop extending the strbuf, and then making another
call to xread() to have it return zero.

By using read_in_full(), we can tell when the read reached the end
of file: when it returns less than was requested, it's eof.  This
way we can avoid an extra iteration that allocates an extra 8kB
that is never used.

Signed-off-by: Jim Hill <gjthill@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 282616c
Raw File
command-list.txt
# List of known git commands.
# command name				category [deprecated] [common]
git-add                                 mainporcelain common
git-am                                  mainporcelain
git-annotate                            ancillaryinterrogators
git-apply                               plumbingmanipulators
git-archimport                          foreignscminterface
git-archive                             mainporcelain
git-bisect                              mainporcelain common
git-blame                               ancillaryinterrogators
git-branch                              mainporcelain common
git-bundle                              mainporcelain
git-cat-file                            plumbinginterrogators
git-check-attr                          purehelpers
git-check-ignore                        purehelpers
git-check-mailmap                       purehelpers
git-checkout                            mainporcelain common
git-checkout-index                      plumbingmanipulators
git-check-ref-format                    purehelpers
git-cherry                              ancillaryinterrogators
git-cherry-pick                         mainporcelain
git-citool                              mainporcelain
git-clean                               mainporcelain
git-clone                               mainporcelain common
git-column                              purehelpers
git-commit                              mainporcelain common
git-commit-tree                         plumbingmanipulators
git-config                              ancillarymanipulators
git-count-objects                       ancillaryinterrogators
git-credential                          purehelpers
git-credential-cache                    purehelpers
git-credential-store                    purehelpers
git-cvsexportcommit                     foreignscminterface
git-cvsimport                           foreignscminterface
git-cvsserver                           foreignscminterface
git-daemon                              synchingrepositories
git-describe                            mainporcelain
git-diff                                mainporcelain common
git-diff-files                          plumbinginterrogators
git-diff-index                          plumbinginterrogators
git-diff-tree                           plumbinginterrogators
git-difftool                            ancillaryinterrogators
git-fast-export				ancillarymanipulators
git-fast-import				ancillarymanipulators
git-fetch                               mainporcelain common
git-fetch-pack                          synchingrepositories
git-filter-branch                       ancillarymanipulators
git-fmt-merge-msg                       purehelpers
git-for-each-ref                        plumbinginterrogators
git-format-patch                        mainporcelain
git-fsck	                        ancillaryinterrogators
git-gc                                  mainporcelain
git-get-tar-commit-id                   ancillaryinterrogators
git-grep                                mainporcelain common
git-gui                                 mainporcelain
git-hash-object                         plumbingmanipulators
git-help				ancillaryinterrogators
git-http-backend                        synchingrepositories
git-http-fetch                          synchelpers
git-http-push                           synchelpers
git-imap-send                           foreignscminterface
git-index-pack                          plumbingmanipulators
git-init                                mainporcelain common
git-instaweb                            ancillaryinterrogators
gitk                                    mainporcelain
git-log                                 mainporcelain common
git-ls-files                            plumbinginterrogators
git-ls-remote                           plumbinginterrogators
git-ls-tree                             plumbinginterrogators
git-mailinfo                            purehelpers
git-mailsplit                           purehelpers
git-merge                               mainporcelain common
git-merge-base                          plumbinginterrogators
git-merge-file                          plumbingmanipulators
git-merge-index                         plumbingmanipulators
git-merge-one-file                      purehelpers
git-mergetool                           ancillarymanipulators
git-merge-tree                          ancillaryinterrogators
git-mktag                               plumbingmanipulators
git-mktree                              plumbingmanipulators
git-mv                                  mainporcelain common
git-name-rev                            plumbinginterrogators
git-notes                               mainporcelain
git-p4                                  foreignscminterface
git-pack-objects                        plumbingmanipulators
git-pack-redundant                      plumbinginterrogators
git-pack-refs                           ancillarymanipulators
git-parse-remote                        synchelpers
git-patch-id                            purehelpers
git-prune                               ancillarymanipulators
git-prune-packed                        plumbingmanipulators
git-pull                                mainporcelain common
git-push                                mainporcelain common
git-quiltimport                         foreignscminterface
git-read-tree                           plumbingmanipulators
git-rebase                              mainporcelain common
git-receive-pack                        synchelpers
git-reflog                              ancillarymanipulators
git-relink                              ancillarymanipulators
git-remote                              ancillarymanipulators
git-repack                              ancillarymanipulators
git-replace                             ancillarymanipulators
git-request-pull                        foreignscminterface
git-rerere                              ancillaryinterrogators
git-reset                               mainporcelain common
git-revert                              mainporcelain
git-rev-list                            plumbinginterrogators
git-rev-parse                           ancillaryinterrogators
git-rm                                  mainporcelain common
git-send-email                          foreignscminterface
git-send-pack                           synchingrepositories
git-shell                               synchelpers
git-shortlog                            mainporcelain
git-show                                mainporcelain common
git-show-branch                         ancillaryinterrogators
git-show-index                          plumbinginterrogators
git-show-ref                            plumbinginterrogators
git-sh-i18n                             purehelpers
git-sh-setup                            purehelpers
git-stash                               mainporcelain
git-status                              mainporcelain common
git-stripspace                          purehelpers
git-submodule                           mainporcelain
git-svn                                 foreignscminterface
git-symbolic-ref                        plumbingmanipulators
git-tag                                 mainporcelain common
git-unpack-file                         plumbinginterrogators
git-unpack-objects                      plumbingmanipulators
git-update-index                        plumbingmanipulators
git-update-ref                          plumbingmanipulators
git-update-server-info                  synchingrepositories
git-upload-archive                      synchelpers
git-upload-pack                         synchelpers
git-var                                 plumbinginterrogators
git-verify-pack                         plumbinginterrogators
git-verify-tag                          ancillaryinterrogators
gitweb                                  ancillaryinterrogators
git-whatchanged                         ancillaryinterrogators
git-write-tree                          plumbingmanipulators
back to top