#include "git-compat-util.h" #include "version.h" #include "version-def.h" #include "strbuf.h" #include "sane-ctype.h" #include "gettext.h" const char git_version_string[] = GIT_VERSION; const char git_built_from_commit_string[] = GIT_BUILT_FROM_COMMIT; /* * Trim and replace each character with ascii code below 32 or above * 127 (included) using a dot '.' character. */ static void redact_non_printables(struct strbuf *buf) { strbuf_trim(buf); for (size_t i = 0; i < buf->len; i++) { if (!isprint(buf->buf[i]) || buf->buf[i] == ' ') buf->buf[i] = '.'; } } const char *git_user_agent(void) { static const char *agent = NULL; if (!agent) { agent = getenv("GIT_USER_AGENT"); if (!agent) agent = GIT_USER_AGENT; } return agent; } const char *git_user_agent_sanitized(void) { static const char *agent = NULL; if (!agent) { struct strbuf buf = STRBUF_INIT; strbuf_addstr(&buf, git_user_agent()); redact_non_printables(&buf); agent = strbuf_detach(&buf, NULL); } return agent; } int get_uname_info(struct strbuf *buf) { struct utsname uname_info; if (uname(&uname_info)) { strbuf_addf(buf, _("uname() failed with error '%s' (%d)\n"), strerror(errno), errno); return -1; } strbuf_addf(buf, "%s %s %s %s\n", uname_info.sysname, uname_info.release, uname_info.version, uname_info.machine); return 0; }