rugged 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
data/vendor/libgit2/src/buffer.c
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
#include "buffer.h"
|
|
8
8
|
#include "posix.h"
|
|
9
9
|
#include "git2/buffer.h"
|
|
10
|
-
#include "buf_text.h"
|
|
11
10
|
#include <ctype.h>
|
|
12
11
|
|
|
13
12
|
/* Used as default value for git_buf->ptr so that people can always
|
|
@@ -133,18 +132,24 @@ void git_buf_dispose(git_buf *buf)
|
|
|
133
132
|
git_buf_init(buf, 0);
|
|
134
133
|
}
|
|
135
134
|
|
|
135
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
136
136
|
void git_buf_free(git_buf *buf)
|
|
137
137
|
{
|
|
138
138
|
git_buf_dispose(buf);
|
|
139
139
|
}
|
|
140
|
+
#endif
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
int git_buf_sanitize(git_buf *buf)
|
|
142
143
|
{
|
|
143
144
|
if (buf->ptr == NULL) {
|
|
144
|
-
|
|
145
|
+
GIT_ASSERT_ARG(buf->size == 0 && buf->asize == 0);
|
|
146
|
+
|
|
145
147
|
buf->ptr = git_buf__initbuf;
|
|
146
|
-
} else if (buf->asize > buf->size)
|
|
148
|
+
} else if (buf->asize > buf->size) {
|
|
147
149
|
buf->ptr[buf->size] = '\0';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return 0;
|
|
148
153
|
}
|
|
149
154
|
|
|
150
155
|
void git_buf_clear(git_buf *buf)
|
|
@@ -181,16 +186,6 @@ int git_buf_set(git_buf *buf, const void *data, size_t len)
|
|
|
181
186
|
return 0;
|
|
182
187
|
}
|
|
183
188
|
|
|
184
|
-
int git_buf_is_binary(const git_buf *buf)
|
|
185
|
-
{
|
|
186
|
-
return git_buf_text_is_binary(buf);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
int git_buf_contains_nul(const git_buf *buf)
|
|
190
|
-
{
|
|
191
|
-
return git_buf_text_contains_nul(buf);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
189
|
int git_buf_sets(git_buf *buf, const char *string)
|
|
195
190
|
{
|
|
196
191
|
return git_buf_set(buf, string, string ? strlen(string) : 0);
|
|
@@ -223,7 +218,7 @@ int git_buf_put(git_buf *buf, const char *data, size_t len)
|
|
|
223
218
|
if (len) {
|
|
224
219
|
size_t new_size;
|
|
225
220
|
|
|
226
|
-
|
|
221
|
+
GIT_ASSERT_ARG(data);
|
|
227
222
|
|
|
228
223
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, len);
|
|
229
224
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
|
|
@@ -237,7 +232,8 @@ int git_buf_put(git_buf *buf, const char *data, size_t len)
|
|
|
237
232
|
|
|
238
233
|
int git_buf_puts(git_buf *buf, const char *string)
|
|
239
234
|
{
|
|
240
|
-
|
|
235
|
+
GIT_ASSERT_ARG(string);
|
|
236
|
+
|
|
241
237
|
return git_buf_put(buf, string, strlen(string));
|
|
242
238
|
}
|
|
243
239
|
|
|
@@ -317,7 +313,7 @@ int git_buf_decode_base64(git_buf *buf, const char *base64, size_t len)
|
|
|
317
313
|
return -1;
|
|
318
314
|
}
|
|
319
315
|
|
|
320
|
-
|
|
316
|
+
GIT_ASSERT_ARG(len % 4 == 0);
|
|
321
317
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, (len / 4 * 3), buf->size);
|
|
322
318
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
|
|
323
319
|
ENSURE_SIZE(buf, new_size);
|
|
@@ -363,7 +359,7 @@ int git_buf_encode_base85(git_buf *buf, const char *data, size_t len)
|
|
|
363
359
|
|
|
364
360
|
for (i = 24; i >= 0; i -= 8) {
|
|
365
361
|
uint8_t ch = *data++;
|
|
366
|
-
acc |= ch << i;
|
|
362
|
+
acc |= (uint32_t)ch << i;
|
|
367
363
|
|
|
368
364
|
if (--len == 0)
|
|
369
365
|
break;
|
|
@@ -549,22 +545,26 @@ int git_buf_printf(git_buf *buf, const char *format, ...)
|
|
|
549
545
|
return r;
|
|
550
546
|
}
|
|
551
547
|
|
|
552
|
-
|
|
548
|
+
int git_buf_copy_cstr(char *data, size_t datasize, const git_buf *buf)
|
|
553
549
|
{
|
|
554
550
|
size_t copylen;
|
|
555
551
|
|
|
556
|
-
|
|
552
|
+
GIT_ASSERT_ARG(data);
|
|
553
|
+
GIT_ASSERT_ARG(datasize);
|
|
554
|
+
GIT_ASSERT_ARG(buf);
|
|
557
555
|
|
|
558
556
|
data[0] = '\0';
|
|
559
557
|
|
|
560
558
|
if (buf->size == 0 || buf->asize <= 0)
|
|
561
|
-
return;
|
|
559
|
+
return 0;
|
|
562
560
|
|
|
563
561
|
copylen = buf->size;
|
|
564
562
|
if (copylen > datasize - 1)
|
|
565
563
|
copylen = datasize - 1;
|
|
566
564
|
memmove(data, buf->ptr, copylen);
|
|
567
565
|
data[copylen] = '\0';
|
|
566
|
+
|
|
567
|
+
return 0;
|
|
568
568
|
}
|
|
569
569
|
|
|
570
570
|
void git_buf_consume_bytes(git_buf *buf, size_t len)
|
|
@@ -757,7 +757,8 @@ int git_buf_join(
|
|
|
757
757
|
ssize_t offset_a = -1;
|
|
758
758
|
|
|
759
759
|
/* not safe to have str_b point internally to the buffer */
|
|
760
|
-
|
|
760
|
+
if (buf->size)
|
|
761
|
+
GIT_ASSERT_ARG(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
|
|
761
762
|
|
|
762
763
|
/* figure out if we need to insert a separator */
|
|
763
764
|
if (separator && strlen_a) {
|
|
@@ -767,7 +768,7 @@ int git_buf_join(
|
|
|
767
768
|
}
|
|
768
769
|
|
|
769
770
|
/* str_a could be part of the buffer */
|
|
770
|
-
if (str_a >= buf->ptr && str_a < buf->ptr + buf->size)
|
|
771
|
+
if (buf->size && str_a >= buf->ptr && str_a < buf->ptr + buf->size)
|
|
771
772
|
offset_a = str_a - buf->ptr;
|
|
772
773
|
|
|
773
774
|
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, strlen_a, strlen_b);
|
|
@@ -807,9 +808,9 @@ int git_buf_join3(
|
|
|
807
808
|
char *tgt;
|
|
808
809
|
|
|
809
810
|
/* for this function, disallow pointers into the existing buffer */
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
811
|
+
GIT_ASSERT(str_a < buf->ptr || str_a >= buf->ptr + buf->size);
|
|
812
|
+
GIT_ASSERT(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
|
|
813
|
+
GIT_ASSERT(str_c < buf->ptr || str_c >= buf->ptr + buf->size);
|
|
813
814
|
|
|
814
815
|
if (separator) {
|
|
815
816
|
if (len_a > 0) {
|
|
@@ -882,7 +883,9 @@ int git_buf_splice(
|
|
|
882
883
|
char *splice_loc;
|
|
883
884
|
size_t new_size, alloc_size;
|
|
884
885
|
|
|
885
|
-
|
|
886
|
+
GIT_ASSERT(buf);
|
|
887
|
+
GIT_ASSERT(where <= buf->size);
|
|
888
|
+
GIT_ASSERT(nb_to_remove <= buf->size - where);
|
|
886
889
|
|
|
887
890
|
splice_loc = buf->ptr + where;
|
|
888
891
|
|
|
@@ -1044,3 +1047,312 @@ invalid:
|
|
|
1044
1047
|
git_error_set(GIT_ERROR_INVALID, "invalid quoted line");
|
|
1045
1048
|
return -1;
|
|
1046
1049
|
}
|
|
1050
|
+
|
|
1051
|
+
int git_buf_puts_escaped(
|
|
1052
|
+
git_buf *buf,
|
|
1053
|
+
const char *string,
|
|
1054
|
+
const char *esc_chars,
|
|
1055
|
+
const char *esc_with)
|
|
1056
|
+
{
|
|
1057
|
+
const char *scan;
|
|
1058
|
+
size_t total = 0, esc_len = strlen(esc_with), count, alloclen;
|
|
1059
|
+
|
|
1060
|
+
if (!string)
|
|
1061
|
+
return 0;
|
|
1062
|
+
|
|
1063
|
+
for (scan = string; *scan; ) {
|
|
1064
|
+
/* count run of non-escaped characters */
|
|
1065
|
+
count = strcspn(scan, esc_chars);
|
|
1066
|
+
total += count;
|
|
1067
|
+
scan += count;
|
|
1068
|
+
/* count run of escaped characters */
|
|
1069
|
+
count = strspn(scan, esc_chars);
|
|
1070
|
+
total += count * (esc_len + 1);
|
|
1071
|
+
scan += count;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, total, 1);
|
|
1075
|
+
if (git_buf_grow_by(buf, alloclen) < 0)
|
|
1076
|
+
return -1;
|
|
1077
|
+
|
|
1078
|
+
for (scan = string; *scan; ) {
|
|
1079
|
+
count = strcspn(scan, esc_chars);
|
|
1080
|
+
|
|
1081
|
+
memmove(buf->ptr + buf->size, scan, count);
|
|
1082
|
+
scan += count;
|
|
1083
|
+
buf->size += count;
|
|
1084
|
+
|
|
1085
|
+
for (count = strspn(scan, esc_chars); count > 0; --count) {
|
|
1086
|
+
/* copy escape sequence */
|
|
1087
|
+
memmove(buf->ptr + buf->size, esc_with, esc_len);
|
|
1088
|
+
buf->size += esc_len;
|
|
1089
|
+
/* copy character to be escaped */
|
|
1090
|
+
buf->ptr[buf->size] = *scan;
|
|
1091
|
+
buf->size++;
|
|
1092
|
+
scan++;
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
buf->ptr[buf->size] = '\0';
|
|
1097
|
+
|
|
1098
|
+
return 0;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
void git_buf_unescape(git_buf *buf)
|
|
1102
|
+
{
|
|
1103
|
+
buf->size = git__unescape(buf->ptr);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
int git_buf_crlf_to_lf(git_buf *tgt, const git_buf *src)
|
|
1107
|
+
{
|
|
1108
|
+
const char *scan = src->ptr;
|
|
1109
|
+
const char *scan_end = src->ptr + src->size;
|
|
1110
|
+
const char *next = memchr(scan, '\r', src->size);
|
|
1111
|
+
size_t new_size;
|
|
1112
|
+
char *out;
|
|
1113
|
+
|
|
1114
|
+
GIT_ASSERT(tgt != src);
|
|
1115
|
+
|
|
1116
|
+
if (!next)
|
|
1117
|
+
return git_buf_set(tgt, src->ptr, src->size);
|
|
1118
|
+
|
|
1119
|
+
/* reduce reallocs while in the loop */
|
|
1120
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, src->size, 1);
|
|
1121
|
+
if (git_buf_grow(tgt, new_size) < 0)
|
|
1122
|
+
return -1;
|
|
1123
|
+
|
|
1124
|
+
out = tgt->ptr;
|
|
1125
|
+
tgt->size = 0;
|
|
1126
|
+
|
|
1127
|
+
/* Find the next \r and copy whole chunk up to there to tgt */
|
|
1128
|
+
for (; next; scan = next + 1, next = memchr(scan, '\r', scan_end - scan)) {
|
|
1129
|
+
if (next > scan) {
|
|
1130
|
+
size_t copylen = (size_t)(next - scan);
|
|
1131
|
+
memcpy(out, scan, copylen);
|
|
1132
|
+
out += copylen;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
/* Do not drop \r unless it is followed by \n */
|
|
1136
|
+
if (next + 1 == scan_end || next[1] != '\n')
|
|
1137
|
+
*out++ = '\r';
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
/* Copy remaining input into dest */
|
|
1141
|
+
if (scan < scan_end) {
|
|
1142
|
+
size_t remaining = (size_t)(scan_end - scan);
|
|
1143
|
+
memcpy(out, scan, remaining);
|
|
1144
|
+
out += remaining;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
tgt->size = (size_t)(out - tgt->ptr);
|
|
1148
|
+
tgt->ptr[tgt->size] = '\0';
|
|
1149
|
+
|
|
1150
|
+
return 0;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
int git_buf_lf_to_crlf(git_buf *tgt, const git_buf *src)
|
|
1154
|
+
{
|
|
1155
|
+
const char *start = src->ptr;
|
|
1156
|
+
const char *end = start + src->size;
|
|
1157
|
+
const char *scan = start;
|
|
1158
|
+
const char *next = memchr(scan, '\n', src->size);
|
|
1159
|
+
size_t alloclen;
|
|
1160
|
+
|
|
1161
|
+
GIT_ASSERT(tgt != src);
|
|
1162
|
+
|
|
1163
|
+
if (!next)
|
|
1164
|
+
return git_buf_set(tgt, src->ptr, src->size);
|
|
1165
|
+
|
|
1166
|
+
/* attempt to reduce reallocs while in the loop */
|
|
1167
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, src->size, src->size >> 4);
|
|
1168
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, alloclen, 1);
|
|
1169
|
+
if (git_buf_grow(tgt, alloclen) < 0)
|
|
1170
|
+
return -1;
|
|
1171
|
+
tgt->size = 0;
|
|
1172
|
+
|
|
1173
|
+
for (; next; scan = next + 1, next = memchr(scan, '\n', end - scan)) {
|
|
1174
|
+
size_t copylen = next - scan;
|
|
1175
|
+
|
|
1176
|
+
/* if we find mixed line endings, carry on */
|
|
1177
|
+
if (copylen && next[-1] == '\r')
|
|
1178
|
+
copylen--;
|
|
1179
|
+
|
|
1180
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, copylen, 3);
|
|
1181
|
+
if (git_buf_grow_by(tgt, alloclen) < 0)
|
|
1182
|
+
return -1;
|
|
1183
|
+
|
|
1184
|
+
if (copylen) {
|
|
1185
|
+
memcpy(tgt->ptr + tgt->size, scan, copylen);
|
|
1186
|
+
tgt->size += copylen;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
tgt->ptr[tgt->size++] = '\r';
|
|
1190
|
+
tgt->ptr[tgt->size++] = '\n';
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
tgt->ptr[tgt->size] = '\0';
|
|
1194
|
+
return git_buf_put(tgt, scan, end - scan);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
int git_buf_common_prefix(git_buf *buf, const git_strarray *strings)
|
|
1198
|
+
{
|
|
1199
|
+
size_t i;
|
|
1200
|
+
const char *str, *pfx;
|
|
1201
|
+
|
|
1202
|
+
git_buf_clear(buf);
|
|
1203
|
+
|
|
1204
|
+
if (!strings || !strings->count)
|
|
1205
|
+
return 0;
|
|
1206
|
+
|
|
1207
|
+
/* initialize common prefix to first string */
|
|
1208
|
+
if (git_buf_sets(buf, strings->strings[0]) < 0)
|
|
1209
|
+
return -1;
|
|
1210
|
+
|
|
1211
|
+
/* go through the rest of the strings, truncating to shared prefix */
|
|
1212
|
+
for (i = 1; i < strings->count; ++i) {
|
|
1213
|
+
|
|
1214
|
+
for (str = strings->strings[i], pfx = buf->ptr;
|
|
1215
|
+
*str && *str == *pfx; str++, pfx++)
|
|
1216
|
+
/* scanning */;
|
|
1217
|
+
|
|
1218
|
+
git_buf_truncate(buf, pfx - buf->ptr);
|
|
1219
|
+
|
|
1220
|
+
if (!buf->size)
|
|
1221
|
+
break;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
return 0;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
int git_buf_is_binary(const git_buf *buf)
|
|
1228
|
+
{
|
|
1229
|
+
const char *scan = buf->ptr, *end = buf->ptr + buf->size;
|
|
1230
|
+
git_buf_bom_t bom;
|
|
1231
|
+
int printable = 0, nonprintable = 0;
|
|
1232
|
+
|
|
1233
|
+
scan += git_buf_detect_bom(&bom, buf);
|
|
1234
|
+
|
|
1235
|
+
if (bom > GIT_BUF_BOM_UTF8)
|
|
1236
|
+
return 1;
|
|
1237
|
+
|
|
1238
|
+
while (scan < end) {
|
|
1239
|
+
unsigned char c = *scan++;
|
|
1240
|
+
|
|
1241
|
+
/* Printable characters are those above SPACE (0x1F) excluding DEL,
|
|
1242
|
+
* and including BS, ESC and FF.
|
|
1243
|
+
*/
|
|
1244
|
+
if ((c > 0x1F && c != 127) || c == '\b' || c == '\033' || c == '\014')
|
|
1245
|
+
printable++;
|
|
1246
|
+
else if (c == '\0')
|
|
1247
|
+
return true;
|
|
1248
|
+
else if (!git__isspace(c))
|
|
1249
|
+
nonprintable++;
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
return ((printable >> 7) < nonprintable);
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
int git_buf_contains_nul(const git_buf *buf)
|
|
1256
|
+
{
|
|
1257
|
+
return (memchr(buf->ptr, '\0', buf->size) != NULL);
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
int git_buf_detect_bom(git_buf_bom_t *bom, const git_buf *buf)
|
|
1261
|
+
{
|
|
1262
|
+
const char *ptr;
|
|
1263
|
+
size_t len;
|
|
1264
|
+
|
|
1265
|
+
*bom = GIT_BUF_BOM_NONE;
|
|
1266
|
+
/* need at least 2 bytes to look for any BOM */
|
|
1267
|
+
if (buf->size < 2)
|
|
1268
|
+
return 0;
|
|
1269
|
+
|
|
1270
|
+
ptr = buf->ptr;
|
|
1271
|
+
len = buf->size;
|
|
1272
|
+
|
|
1273
|
+
switch (*ptr++) {
|
|
1274
|
+
case 0:
|
|
1275
|
+
if (len >= 4 && ptr[0] == 0 && ptr[1] == '\xFE' && ptr[2] == '\xFF') {
|
|
1276
|
+
*bom = GIT_BUF_BOM_UTF32_BE;
|
|
1277
|
+
return 4;
|
|
1278
|
+
}
|
|
1279
|
+
break;
|
|
1280
|
+
case '\xEF':
|
|
1281
|
+
if (len >= 3 && ptr[0] == '\xBB' && ptr[1] == '\xBF') {
|
|
1282
|
+
*bom = GIT_BUF_BOM_UTF8;
|
|
1283
|
+
return 3;
|
|
1284
|
+
}
|
|
1285
|
+
break;
|
|
1286
|
+
case '\xFE':
|
|
1287
|
+
if (*ptr == '\xFF') {
|
|
1288
|
+
*bom = GIT_BUF_BOM_UTF16_BE;
|
|
1289
|
+
return 2;
|
|
1290
|
+
}
|
|
1291
|
+
break;
|
|
1292
|
+
case '\xFF':
|
|
1293
|
+
if (*ptr != '\xFE')
|
|
1294
|
+
break;
|
|
1295
|
+
if (len >= 4 && ptr[1] == 0 && ptr[2] == 0) {
|
|
1296
|
+
*bom = GIT_BUF_BOM_UTF32_LE;
|
|
1297
|
+
return 4;
|
|
1298
|
+
} else {
|
|
1299
|
+
*bom = GIT_BUF_BOM_UTF16_LE;
|
|
1300
|
+
return 2;
|
|
1301
|
+
}
|
|
1302
|
+
break;
|
|
1303
|
+
default:
|
|
1304
|
+
break;
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
return 0;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
bool git_buf_gather_text_stats(
|
|
1311
|
+
git_buf_text_stats *stats, const git_buf *buf, bool skip_bom)
|
|
1312
|
+
{
|
|
1313
|
+
const char *scan = buf->ptr, *end = buf->ptr + buf->size;
|
|
1314
|
+
int skip;
|
|
1315
|
+
|
|
1316
|
+
memset(stats, 0, sizeof(*stats));
|
|
1317
|
+
|
|
1318
|
+
/* BOM detection */
|
|
1319
|
+
skip = git_buf_detect_bom(&stats->bom, buf);
|
|
1320
|
+
if (skip_bom)
|
|
1321
|
+
scan += skip;
|
|
1322
|
+
|
|
1323
|
+
/* Ignore EOF character */
|
|
1324
|
+
if (buf->size > 0 && end[-1] == '\032')
|
|
1325
|
+
end--;
|
|
1326
|
+
|
|
1327
|
+
/* Counting loop */
|
|
1328
|
+
while (scan < end) {
|
|
1329
|
+
unsigned char c = *scan++;
|
|
1330
|
+
|
|
1331
|
+
if (c > 0x1F && c != 0x7F)
|
|
1332
|
+
stats->printable++;
|
|
1333
|
+
else switch (c) {
|
|
1334
|
+
case '\0':
|
|
1335
|
+
stats->nul++;
|
|
1336
|
+
stats->nonprintable++;
|
|
1337
|
+
break;
|
|
1338
|
+
case '\n':
|
|
1339
|
+
stats->lf++;
|
|
1340
|
+
break;
|
|
1341
|
+
case '\r':
|
|
1342
|
+
stats->cr++;
|
|
1343
|
+
if (scan < end && *scan == '\n')
|
|
1344
|
+
stats->crlf++;
|
|
1345
|
+
break;
|
|
1346
|
+
case '\t': case '\f': case '\v': case '\b': case 0x1b: /*ESC*/
|
|
1347
|
+
stats->printable++;
|
|
1348
|
+
break;
|
|
1349
|
+
default:
|
|
1350
|
+
stats->nonprintable++;
|
|
1351
|
+
break;
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/* Treat files with a bare CR as binary */
|
|
1356
|
+
return (stats->cr != stats->crlf || stats->nul > 0 ||
|
|
1357
|
+
((stats->printable >> 7) < stats->nonprintable));
|
|
1358
|
+
}
|