diff options
author | Ben Straub <bs@github.com> | 2012-11-29 20:01:24 -0800 |
---|---|---|
committer | Ben Straub <bs@github.com> | 2012-11-30 13:12:15 -0800 |
commit | 9267ff586f29deb99f41ab6eeb0599917ddd0cec (patch) | |
tree | 1626640207165137242ab55ca655e77caf98883f /src | |
parent | 55f6f21b7dd5a177e2cc60c1054b438c05ed8f14 (diff) | |
download | libgit2-9267ff586f29deb99f41ab6eeb0599917ddd0cec.tar.gz |
Deploy GIT_REMOTE_CALLBACKS_INIT
Diffstat (limited to 'src')
-rw-r--r-- | src/remote.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/remote.c b/src/remote.c index c84911aa1..d516d07fb 100644 --- a/src/remote.c +++ b/src/remote.c @@ -985,10 +985,25 @@ void git_remote_check_cert(git_remote *remote, int check) remote->check_cert = check; } -void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks) +static bool callbacks_have_valid_version(git_remote_callbacks *callbacks) +{ + if (!callbacks) + return true; + + if (callbacks->version > 0 && callbacks->version <= GIT_REMOTE_CALLBACKS_VERSION) + return true; + + giterr_set(GITERR_INVALID, "Invalid version %d for git_remote_callbacks", callbacks->version); + return false; +} + +int git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks) { assert(remote && callbacks); + if (!callbacks_have_valid_version(callbacks)) + return -1; + memcpy(&remote->callbacks, callbacks, sizeof(git_remote_callbacks)); if (remote->transport && remote->transport->set_callbacks) @@ -996,6 +1011,8 @@ void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callback remote->callbacks.progress, NULL, remote->callbacks.payload); + + return 0; } void git_remote_set_cred_acquire_cb( |