Commit de870533 by Carlos Martín Nieto

settings: add a setter for a custom user-agent

parent 1c34b717
......@@ -145,6 +145,7 @@ typedef enum {
GIT_OPT_GET_TEMPLATE_PATH,
GIT_OPT_SET_TEMPLATE_PATH,
GIT_OPT_SET_SSL_CERT_LOCATIONS,
GIT_OPT_SET_USER_AGENT,
} git_libgit2_opt_t;
/**
......@@ -240,6 +241,8 @@ typedef enum {
* >
* > Either parameter may be `NULL`, but not both.
*
* * opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)
*
* @param option Option key
* @param ... value to set the option
* @return 0 on success, <0 on failure
......
......@@ -31,6 +31,7 @@ static git_mutex *openssl_locks;
static git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB];
static git_atomic git__n_shutdown_callbacks;
static git_atomic git__n_inits;
char *git__user_agent;
void git__on_shutdown(git_global_shutdown_fn callback)
{
......@@ -269,6 +270,8 @@ int git_libgit2_shutdown(void)
git_win32__crtdbg_stacktrace_cleanup();
git_win32__stack_cleanup();
#endif
git__free(git__user_agent);
}
/* Exit the lock */
......@@ -369,6 +372,7 @@ int git_libgit2_shutdown(void)
git__global_state_cleanup(ptr);
git__free(ptr);
git__free(git__user_agent);
pthread_key_delete(_tls_key);
git_mutex_free(&git__mwindow_mutex);
......@@ -423,6 +427,7 @@ int git_libgit2_shutdown(void)
git__shutdown();
git__global_state_cleanup(&__state);
uninit_ssl();
git__free(git__user_agent);
return 0;
}
......
......@@ -35,4 +35,6 @@ extern void git__on_shutdown(git_global_shutdown_fn callback);
extern void git__free_tls_data(void);
extern const char *git_libgit2__user_agent(void);
#endif
......@@ -57,6 +57,13 @@ static int config_level_to_sysdir(int config_level)
return val;
}
extern char *git__user_agent;
const char *git_libgit2__user_agent()
{
return git__user_agent;
}
int git_libgit2_opts(int key, ...)
{
int error = 0;
......@@ -153,6 +160,15 @@ int git_libgit2_opts(int key, ...)
error = -1;
#endif
break;
case GIT_OPT_SET_USER_AGENT:
git__free(git__user_agent);
git__user_agent = git__strdup(va_arg(ap, const char *));
if (!git__user_agent) {
giterr_set_oom();
error = -1;
}
break;
}
va_end(ap);
......
#include "clar_libgit2.h"
#include "global.h"
void test_core_useragent__get(void)
{
const char *custom_name = "super duper git";
cl_assert_equal_p(NULL, git_libgit2__user_agent());
cl_git_pass(git_libgit2_opts(GIT_OPT_SET_USER_AGENT, custom_name));
cl_assert_equal_s(custom_name, git_libgit2__user_agent());
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment